Ein Mehrbenutzersystem in der Praxis Netzwerk Linux/Unix
Ein Mehrbenutzersystem in der Praxis Netzwerk Linux/Unix
Ein Mehrbenutzersystem in der Praxis Netzwerk Linux/Unix
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>E<strong>in</strong></strong> <strong>Mehrbenutzersystem</strong> <strong>in</strong> <strong>der</strong> <strong>Praxis</strong><br />
<strong>Netzwerk</strong><br />
L<strong>in</strong>ux/<strong>Unix</strong><br />
Kursunterlagen<br />
-Universitäten Gött<strong>in</strong>gen und Freiburg-<br />
pr<strong>in</strong>ter<br />
Internet<br />
WAN<br />
hera<br />
.dom.test<br />
zeus<br />
.dom.test<br />
LAN<br />
WLAN<br />
192.168.1.0/24<br />
aphrodite<br />
.dom.test<br />
Dirk von Suchodoletz (dirk@goe.net)<br />
mit Beiträgen von:<br />
Frank Schwichtenberg<br />
Daniel van Ross<br />
Tim Oliver Kaiser<br />
Steffen Wagner<br />
Stefan Koospal<br />
Korrekturgelesen und zusammengestellt von:<br />
Antonia Blanke<br />
3. Auflage<br />
22. Mai 2006
Alle <strong>in</strong> diesem Dokument ersche<strong>in</strong>enden Produktnamen dienen nur zu Identifikationszwecken<br />
und s<strong>in</strong>d Eigentum ihrer jeweiligen Besitzer.
Inhaltsverzeichnis<br />
1 <strong>E<strong>in</strong></strong>leitung <strong>Netzwerk</strong> 1<br />
1.1 Zu diesen Unterlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.2 Bezeichnung von Dateien und Verzeichnissen . . . . . . . . . . . . . . . . . 2<br />
1.3 Begriffserklärungen - Bereich <strong>Netzwerk</strong> . . . . . . . . . . . . . . . . . . . . . 2<br />
1.4 Begriffserklärungen - Telefonie . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2 OSI-Schichtenmodell 9<br />
2.1 Kategorisierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.2 Protokollhierarchien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.2.1 Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
2.3 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.4 Die e<strong>in</strong>zelnen Schichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
2.4.1 Bitübertragungsschicht . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
2.4.2 Sicherungsschicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
2.4.3 Vermittlungsschicht . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
2.4.4 Transportschicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.4.5 Sitzungsschicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.4.6 Darstellungsschicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.4.7 Verarbeitungsschicht . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.5 Konzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2.5.1 Protokolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2.6 <strong>E<strong>in</strong></strong>ordnungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2.7 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
2.7.1 OSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
2.7.2 <strong>Netzwerk</strong>e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />
3 LAN Hardware 17<br />
3.1 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />
3.1.1 Ethernet-Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
3.1.2 Koaxialkabelbasierte Netze für 10 MBit . . . . . . . . . . . . . . . . 19<br />
3.1.3 Twisted-Pair-basierte Verkabelungen 10/100 Mbit . . . . . . . . . . . 20<br />
3.1.4 1000 Mbit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
3.1.5 Ethernet unter L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
3.2 Funk-Netze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
3.3 TokenR<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />
3.4 <strong>Netzwerk</strong>-Interfaces von L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
3.5 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.5.1 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3
4 INHALTSVERZEICHNIS<br />
4 WAN Hardware 29<br />
4.1 <strong>E<strong>in</strong></strong>leitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
4.2 Leistung und Kosten <strong>der</strong> e<strong>in</strong>zelnen Technologien . . . . . . . . . . . . . . . 30<br />
4.2.1 Leistung / Datendurchsatz . . . . . . . . . . . . . . . . . . . . . . . 30<br />
4.2.2 Kosten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
4.3 Telefonnetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
4.3.1 Das klassische Telefonnetz . . . . . . . . . . . . . . . . . . . . . . . . 31<br />
4.3.2 Digitale Telefonnetze - ISDN . . . . . . . . . . . . . . . . . . . . . . 31<br />
4.3.3 Mobilfunknetze nach dem GSM-Standard . . . . . . . . . . . . . . . 32<br />
4.3.4 GPRS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
4.3.5 HSCSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />
4.3.6 Mobilfunknetze <strong>der</strong> dritten Generation - UMTS . . . . . . . . . . . . 33<br />
4.4 ISDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
4.5 Modem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
4.6 ADSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />
4.6.1 Designüberlegungen . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />
4.6.2 Übertragungsmethoden . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />
4.6.3 Vorteile <strong>der</strong> neuen Technik . . . . . . . . . . . . . . . . . . . . . . . 36<br />
4.6.4 Benutzung unter L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
4.7 ATM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
4.7.1 Die ATM-Zelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
4.8 FDDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
4.9 Mobilfunknetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
4.9.1 GSM, HSCSD, GPRS und UMTS . . . . . . . . . . . . . . . . . . . 40<br />
4.10 <strong>Netzwerk</strong>adapter für Mobilfunknetze . . . . . . . . . . . . . . . . . . . . . . 41<br />
5 TCP-IP 43<br />
5.1 Schaffung von ”Inter-Nets” . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />
5.2 Überblick über TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
5.3 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
5.4 Internet Protocol (IP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
5.5 Spezifikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
5.5.1 IPv4-Standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
5.5.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
5.5.3 Adressbereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
5.5.4 Spezielle IP-Adressen . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
5.5.5 Private IP-Adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />
5.6 Der IP-Hea<strong>der</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.6.1 Fragmentierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
5.7 IP-Rout<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
5.7.1 Pr<strong>in</strong>zip <strong>der</strong> IP-Netze . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />
5.7.2 Rout<strong>in</strong>g (Die Wege im Netz) . . . . . . . . . . . . . . . . . . . . . . 55<br />
5.7.3 <strong>E<strong>in</strong></strong>faches Hostrout<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />
5.7.4 Rout<strong>in</strong>gentscheidung . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />
5.7.5 Subnett<strong>in</strong>g und Supernett<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . 58<br />
5.7.6 QoS-Rout<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
5.8 Address Resolution Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
5.8.1 ARP - Hilfsprotokoll des IP . . . . . . . . . . . . . . . . . . . . . . . 61<br />
5.8.2 Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
INHALTSVERZEICHNIS 5<br />
5.8.3 ARP unter L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />
5.8.4 <strong>E<strong>in</strong></strong>gebaute Sicherheitslücken . . . . . . . . . . . . . . . . . . . . . . 66<br />
5.8.5 Gefahrenabwehr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
5.8.6 ARP und doppelte IP-Adressen . . . . . . . . . . . . . . . . . . . . . 69<br />
5.8.7 Proxy-ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />
5.8.8 Probleme durch Proxy-ARP . . . . . . . . . . . . . . . . . . . . . . . 71<br />
5.9 ICMP - Internet Control Message Protocol . . . . . . . . . . . . . . . . . . 72<br />
5.10 Doma<strong>in</strong>-Name-Service (DNS) . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />
5.11 Transmission Control Protocol (TCP) . . . . . . . . . . . . . . . . . . . . . 75<br />
5.12 User Datagram Protocol (UDP) . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />
5.13 Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />
5.14 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />
5.14.1 Internets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />
5.14.2 Internet Protokoll / Hea<strong>der</strong> . . . . . . . . . . . . . . . . . . . . . . . 78<br />
5.14.3 IP-Netze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />
5.14.4 Fragmentierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />
5.14.5 IP-Rout<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />
5.14.6 ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />
6 L<strong>in</strong>ux im <strong>Netzwerk</strong> 81<br />
6.1 IP-Konfiguration unter L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />
6.1.1 Die traditionellen Tools . . . . . . . . . . . . . . . . . . . . . . . . . 81<br />
6.1.2 Rout<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />
6.1.3 Next Generation IP-Config . . . . . . . . . . . . . . . . . . . . . . . 83<br />
6.1.4 Das Kommando ip . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />
6.1.5 Erste Schritte mit ip . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />
6.2 Weitergehende Anwendungen von IProute2 . . . . . . . . . . . . . . . . . . 86<br />
6.2.1 Weitere Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />
6.2.2 Rout<strong>in</strong>g Policy Database . . . . . . . . . . . . . . . . . . . . . . . . 88<br />
6.2.3 Generelle 2-Wege-Routen . . . . . . . . . . . . . . . . . . . . . . . . 89<br />
6.2.4 Dienste-basiertes Rout<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . 91<br />
6.3 Überprüfung <strong>der</strong> Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />
6.4 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91<br />
6.4.1 IP-Konfiguration und Erreichbarkeit . . . . . . . . . . . . . . . . . . 91<br />
6.4.2 Datenverkehr zählen . . . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />
7 DHCP 93<br />
7.1 Automatische IP-Zuweisung . . . . . . . . . . . . . . . . . . . . . . . . . . . 93<br />
7.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93<br />
7.3 DHCP-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96<br />
7.3.1 DHCP-Standardoptionen . . . . . . . . . . . . . . . . . . . . . . . . 97<br />
7.3.2 DHCP-DNS-Verb<strong>in</strong>dung . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />
7.4 Benutzerdef<strong>in</strong>ierte Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />
7.5 Die Verwendung von Vendor-Code-Identifiern . . . . . . . . . . . . . . . . . 100<br />
7.6 DHCP-Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />
7.7 DHCP mit LDAP-Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . 104<br />
7.8 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106<br />
7.8.1 DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
6 INHALTSVERZEICHNIS<br />
8 DNS 107<br />
8.1 <strong>E<strong>in</strong></strong>stieg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />
8.1.1 Enstehungsgeschichte . . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />
8.1.2 DNS - Das virtuelle IP-Telefonbuch . . . . . . . . . . . . . . . . . . 109<br />
8.1.3 Regeln für die Namensgebung . . . . . . . . . . . . . . . . . . . . . . 109<br />
8.1.4 Registrieren und Verwalten von Doma<strong>in</strong>s . . . . . . . . . . . . . . . 110<br />
8.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111<br />
8.2.1 Nameserver und Zuständigkeiten . . . . . . . . . . . . . . . . . . . . 111<br />
8.2.2 Cach<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />
8.2.3 Primärer und sekundäre Nameserver . . . . . . . . . . . . . . . . . . 113<br />
8.3 DNS-Server mit L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113<br />
8.3.1 Der Dämon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114<br />
8.3.2 Die DNS-Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . 115<br />
8.3.3 Starten und Anhalten des Nameservers . . . . . . . . . . . . . . . . 117<br />
8.3.4 Slave-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117<br />
8.3.5 Delegation e<strong>in</strong>er Subdoma<strong>in</strong> . . . . . . . . . . . . . . . . . . . . . . . 118<br />
8.4 Dynamische Updates <strong>der</strong> Zonendateien . . . . . . . . . . . . . . . . . . . . . 119<br />
8.4.1 Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119<br />
8.5 DNS bekommt neue Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . 121<br />
8.5.1 ENUM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121<br />
8.5.2 IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122<br />
8.5.3 DNS als Bannerfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . 122<br />
8.6 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123<br />
8.6.1 Rechnernamen im Internet . . . . . . . . . . . . . . . . . . . . . . . 123<br />
8.6.2 Doma<strong>in</strong> Name Service (DNS) . . . . . . . . . . . . . . . . . . . . . . 124<br />
8.6.3 DNS Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />
9 Webserver 125<br />
9.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125<br />
9.2 HTTP-Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126<br />
9.3 Was ist e<strong>in</strong> Webserver? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />
9.4 Apache 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />
9.4.1 Erweiterte Funktionalität . . . . . . . . . . . . . . . . . . . . . . . . 127<br />
9.5 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127<br />
9.5.1 Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128<br />
9.5.2 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />
9.5.3 User-WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />
9.6 Webserver Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130<br />
9.6.1 Die Benutzer-Homepage - mod userdir . . . . . . . . . . . . . . . . . 131<br />
9.6.2 URL-Umschreiber mod rewrite . . . . . . . . . . . . . . . . . . . . . 131<br />
9.6.3 Zugriffskontrollen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131<br />
9.6.4 Kompression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />
9.6.5 Das Web-DAV Modul . . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />
9.6.6 Vrituelle Webserver . . . . . . . . . . . . . . . . . . . . . . . . . . . 134<br />
9.7 SSL (Secure Socket Layer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135<br />
9.7.1 Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136<br />
9.7.2 Zertifikate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136<br />
9.7.3 Zertifikate erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . 136<br />
9.7.4 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
INHALTSVERZEICHNIS 7<br />
9.8 CGI (-Modul) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137<br />
9.9 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138<br />
9.9.1 Das Apache-PHP-Modul . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />
9.10 SSI (Server Side Includes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140<br />
9.11 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141<br />
9.12 HTTP-Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />
9.13 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142<br />
9.14 HTTP-Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143<br />
9.15 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143<br />
9.16 HTTP-Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />
9.17 Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144<br />
10 Mail 145<br />
10.1 SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146<br />
10.1.1 E-Mail-Adresse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147<br />
10.1.2 Versenden e<strong>in</strong>er E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . 147<br />
10.1.3 Mail-Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148<br />
10.1.4 E-Mail Hea<strong>der</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149<br />
10.1.5 Open-Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150<br />
10.1.6 Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150<br />
10.2 sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152<br />
10.3 exim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152<br />
10.4 POP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153<br />
10.5 IMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155<br />
10.6 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />
10.6.1 Dienste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156<br />
11 Fileserver 157<br />
11.1 <strong>Unix</strong>-<strong>Netzwerk</strong>dateisystem - NFS . . . . . . . . . . . . . . . . . . . . . . . . 157<br />
11.1.1 NFS im <strong>E<strong>in</strong></strong>satz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />
11.1.2 NFS und Portmapper . . . . . . . . . . . . . . . . . . . . . . . . . . 159<br />
11.1.3 NFS-Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />
11.1.4 NFS-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />
11.1.5 NFS und (Un)Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . 161<br />
11.2 Andrew Filesystem (AFS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />
11.2.1 Die Clientseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162<br />
11.3 File Transfer Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166<br />
11.3.1 Dateiarchiv - FTP-Server . . . . . . . . . . . . . . . . . . . . . . . . 166<br />
11.3.2 FTP-Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166<br />
11.4 Das M<strong>in</strong>imal-FTP (TFTP) . . . . . . . . . . . . . . . . . . . . . . . . . . . 166<br />
11.5 Weitere Fileserver-Konzepte . . . . . . . . . . . . . . . . . . . . . . . . . . . 169<br />
11.6 Network Block Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170<br />
11.7 NBDs im <strong>E<strong>in</strong></strong>satz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171<br />
11.7.1 Erste Versuche mit NBD . . . . . . . . . . . . . . . . . . . . . . . . 171<br />
11.7.2 NBD und Filesysteme . . . . . . . . . . . . . . . . . . . . . . . . . . 172<br />
11.7.3 DNBD - e<strong>in</strong>e spezialisierte Alternative . . . . . . . . . . . . . . . . . 173<br />
11.8 Spezielle Blockdevice-Erweiterungen . . . . . . . . . . . . . . . . . . . . . . 175
8 INHALTSVERZEICHNIS<br />
12 Samba 177<br />
12.1 Samba - Brücke zwischen Microsoft- und <strong>Unix</strong>-Welt . . . . . . . . . . . . . 177<br />
12.1.1 <strong>E<strong>in</strong></strong>satzgebiete von Samba . . . . . . . . . . . . . . . . . . . . . . . . 177<br />
12.2 Erste Versuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178<br />
12.2.1 W<strong>in</strong>dows-Server - L<strong>in</strong>ux-Client . . . . . . . . . . . . . . . . . . . . . 178<br />
12.2.2 L<strong>in</strong>ux-Server - W<strong>in</strong>dows-Client . . . . . . . . . . . . . . . . . . . . . 180<br />
12.3 Weitergehende Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . 181<br />
12.3.1 Homeverzeichnisse für W<strong>in</strong>dows und L<strong>in</strong>ux . . . . . . . . . . . . . . 183<br />
12.3.2 Druckerfreigaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184<br />
12.3.3 Nachrichtendienst auf L<strong>in</strong>ux-Clients . . . . . . . . . . . . . . . . . . 184<br />
12.4 Die zentrale Samba-Konfigurationsdatei . . . . . . . . . . . . . . . . . . . . 184<br />
12.4.1 Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185<br />
12.4.2 Wichtige Optionen <strong>in</strong> <strong>der</strong> Sektion [global] . . . . . . . . . . . . . . . 185<br />
12.4.3 Wichtige Optionen <strong>der</strong> an<strong>der</strong>en Abschnitte . . . . . . . . . . . . . . 186<br />
12.4.4 Virtuelle Samba-Server . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />
12.5 Controller-Funktionalität . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187<br />
12.5.1 Der W<strong>in</strong>dows Namensdienst . . . . . . . . . . . . . . . . . . . . . . . 187<br />
12.5.2 NetBIOS Namen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188<br />
12.5.3 Der Nameserver (WINS) . . . . . . . . . . . . . . . . . . . . . . . . . 190<br />
12.6 Samba als PDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191<br />
12.6.1 Benutzerprofile und Logon-Skripten . . . . . . . . . . . . . . . . . . 192<br />
12.7 Samba und LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194<br />
12.7.1 Konfiguration des LDAP-Servers . . . . . . . . . . . . . . . . . . . . 195<br />
12.7.2 Die neue Samba-Konfiguration . . . . . . . . . . . . . . . . . . . . . 195<br />
12.7.3 Die IDEALX-Skripten . . . . . . . . . . . . . . . . . . . . . . . . . . 197<br />
12.7.4 Fazit von Samba-LDAP-Aktionen . . . . . . . . . . . . . . . . . . . 202<br />
13 Ressourcenverwaltung 203<br />
13.1 <strong>E<strong>in</strong></strong>leitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />
13.2 NIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />
13.2.1 Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />
13.2.2 NIS-Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203<br />
13.2.3 NIS-Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
13.2.4 NIS-Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
13.3 Hierarchische Datenbank: LDAP . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
13.3.1 Intro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />
13.3.2 Was kann mit LDAP abgebildet werden . . . . . . . . . . . . . . . . 205<br />
13.3.3 Das Datenmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206<br />
13.3.4 Das Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />
13.4 LDAP praktisch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />
13.4.1 Server- und Clientprogramme unter L<strong>in</strong>ux . . . . . . . . . . . . . . . 209<br />
13.4.2 <strong>E<strong>in</strong></strong>e e<strong>in</strong>fache Beispielkonfiguration . . . . . . . . . . . . . . . . . . . 210<br />
13.4.3 Absicherung durch SSL . . . . . . . . . . . . . . . . . . . . . . . . . 213<br />
14 Drucken im Netz 219<br />
14.1 <strong>E<strong>in</strong></strong>leitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219<br />
14.1.1 Anfor<strong>der</strong>ungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219<br />
14.1.2 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220<br />
14.2 CUPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
INHALTSVERZEICHNIS 9<br />
14.2.1 Client-Server-Architektur . . . . . . . . . . . . . . . . . . . . . . . . 221<br />
14.2.2 IPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221<br />
14.2.3 Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222<br />
14.2.4 Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222<br />
14.2.5 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222<br />
14.3 Alternativen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223<br />
15 Wichtige <strong>Netzwerk</strong>kommandos 225<br />
15.1 Offene Dateien und <strong>Netzwerk</strong>verb<strong>in</strong>dungen . . . . . . . . . . . . . . . . . . 225<br />
15.2 netstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225<br />
15.3 Systemprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />
15.3.1 Dämonen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226<br />
15.4 <strong>Netzwerk</strong>konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227<br />
15.4.1 <strong>Netzwerk</strong>tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227<br />
15.4.2 <strong>Netzwerk</strong>überwachung . . . . . . . . . . . . . . . . . . . . . . . . . . 229<br />
16 <strong>Netzwerk</strong>überwachung<br />
16.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
231<br />
231<br />
16.2 SNMP - Das Simple Network Mangement Protocol . . . . . . . . . . . . . .<br />
16.2.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
231<br />
231<br />
16.3 Die Datendef<strong>in</strong>ition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232<br />
16.3.1 Der SNMP-Namensraum und die Management Information Bases . . 233<br />
16.3.2 Die SNMP-Agenten . . . . . . . . . . . . . . . . . . . . . . . . . . . 234<br />
16.3.3 Der Kommunikations-Code <strong>der</strong> Agenten . . . . . . . . . . . . . . . . 234<br />
16.4 SNMP-Implementierungen unter L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . . . 235<br />
16.5 Kommandos zur Datenbeschaffung . . . . . . . . . . . . . . . . . . . . . . . 235<br />
16.6 Konfiguration des UCD-SNMP . . . . . . . . . . . . . . . . . . . . . . . . . 236<br />
16.6.1 Der Kopf def<strong>in</strong>iert die Zugriffs-Policies . . . . . . . . . . . . . . . . . 236<br />
16.6.2 Parameter <strong>der</strong> ”Enterprise”-Erweiterungen . . . . . . . . . . . . . . 237<br />
16.6.3 Erweiterung durch externe Skripten und Programme . . . . . . . . . 237<br />
16.7 Überwachung weiterer Parameter . . . . . . . . . . . . . . . . . . . . . . . . 238<br />
16.7.1 Weitergehende Ergänzungen . . . . . . . . . . . . . . . . . . . . . . . 239<br />
16.7.2 Parameter <strong>der</strong> Host-Ressource-Erweiterungen . . . . . . . . . . . . . 240<br />
16.8 MRTG als Frontend zur Anzeige von Zeitreihen . . . . . . . . . . . . . . . . 241<br />
16.9 <strong>E<strong>in</strong></strong>ige abschließende Worte zu SNMP . . . . . . . . . . . . . . . . . . . . . 242<br />
16.10Weiterführende Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242<br />
17 Systemsicherheit 245<br />
17.1 Generelle Überlegungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245<br />
17.2 Sicherheit auf dem Rechner . . . . . . . . . . . . . . . . . . . . . . . . . . . 245<br />
17.2.1 <strong>E<strong>in</strong></strong>leitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245<br />
17.2.2 Passwörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245<br />
17.2.3 Der Adm<strong>in</strong>-Account . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />
17.2.4 /etc/passwd und /etc/shadow . . . . . . . . . . . . . . . . . . . . . . 246<br />
17.2.5 Locken o<strong>der</strong> ausloggen . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />
17.2.6 Setuid und Verzeichnisse . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />
17.2.7 Setuid und Mount<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . 247<br />
17.2.8 Browser, CGI / Java-Applet und B<strong>in</strong>aries, per Mail . . . . . . . . . 247<br />
17.2.9 Physikalischer Zugriff . . . . . . . . . . . . . . . . . . . . . . . . . . 247<br />
17.3 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
10 INHALTSVERZEICHNIS<br />
17.4 Sicherheit im <strong>Netzwerk</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />
17.4.1 <strong>E<strong>in</strong></strong>leitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />
17.4.2 Gesicherte Verb<strong>in</strong>dungen . . . . . . . . . . . . . . . . . . . . . . . . 248<br />
17.4.3 ssh und scp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />
17.4.4 Der Intenet-”Super”-Daemon (x)<strong>in</strong>etd . . . . . . . . . . . . . . . . . 249<br />
17.4.5 xhost + und das unsichtbare Fenster . . . . . . . . . . . . . . . . . . 250<br />
17.4.6 .rhosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250<br />
17.4.7<br />
Überprüfung <strong>der</strong> <strong>Netzwerk</strong>sicherheit eigener und an<strong>der</strong>er Rechner . . 250<br />
17.4.8 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251<br />
17.5 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251<br />
17.5.1 Secure Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251<br />
18 Sicheres IP 253<br />
18.1 Sicherheitsprobleme des <strong>der</strong>zeitigen IP-Standards . . . . . . . . . . . . . . . 253<br />
18.1.1 Intro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253<br />
18.1.2 Offener Datentransport . . . . . . . . . . . . . . . . . . . . . . . . . 253<br />
18.1.3 Absicherung - Lösungsansätze . . . . . . . . . . . . . . . . . . . . . . 255<br />
18.2 VPNs - Sichere Netze über das Internet . . . . . . . . . . . . . . . . . . . . 257<br />
18.3 CIPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />
18.3.1 Idee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257<br />
18.3.2 Aufsetzen von CIPE . . . . . . . . . . . . . . . . . . . . . . . . . . . 259<br />
18.4 IPsec-Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260<br />
18.5 IPsec praktisch - FreeSWAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 262<br />
18.5.1 Konfigurationsmöglichkeiten von IPsec . . . . . . . . . . . . . . . . . 263<br />
18.5.2 <strong>E<strong>in</strong></strong>richtung von IPsec unter L<strong>in</strong>ux . . . . . . . . . . . . . . . . . . . 264<br />
18.5.3 <strong>E<strong>in</strong></strong>schaltbare Optionen . . . . . . . . . . . . . . . . . . . . . . . . . 265<br />
18.5.4 Konfiguration von IPsec-Verb<strong>in</strong>dungen . . . . . . . . . . . . . . . . . 266<br />
18.6 Kommerzielle VPN-Lösungen . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />
18.6.1 Cisco-VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />
18.6.2 Verwendung <strong>der</strong> Cisco-Tools . . . . . . . . . . . . . . . . . . . . . . . 270<br />
18.6.3 <strong>E<strong>in</strong></strong>satzszenarien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272<br />
18.6.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273<br />
18.7 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273<br />
19 Firewall 275<br />
19.1 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275<br />
19.2 <strong>E<strong>in</strong></strong>- und Austragen von cha<strong>in</strong>s und Filter-Regeln . . . . . . . . . . . . . . . 276<br />
19.2.1 Pakete genauer spezifizieren . . . . . . . . . . . . . . . . . . . . . . . 276<br />
19.2.2 ”Match Extensions” und Erweiterbarkeit . . . . . . . . . . . . . . . 277<br />
19.3 von ”masquerad<strong>in</strong>g” und ”packet mangl<strong>in</strong>g” . . . . . . . . . . . . . . . . . . 279<br />
19.3.1 Network Address Translation . . . . . . . . . . . . . . . . . . . . . . 279<br />
19.3.2 packet mangl<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280<br />
19.4 connection track<strong>in</strong>g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281<br />
19.5 Referenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Kapitel 1<br />
<strong>E<strong>in</strong></strong>leitung <strong>Netzwerk</strong><br />
1.1 Zu diesen Unterlagen<br />
Der Kurs ”L<strong>in</strong>ux und <strong>Netzwerk</strong>e” soll <strong>in</strong> die Begriffswelt vernetzter Rechner e<strong>in</strong>führen. Vorgestellt<br />
werden die Grundlagen von <strong>Netzwerk</strong>en und darauf aufbauende Applikationen. Zur<br />
besseren <strong>E<strong>in</strong></strong>ordnung <strong>der</strong> unterschiedlichen <strong>Netzwerk</strong>-Layer ist das OSI-Schichtenmodell<br />
vorangestellt. Gefolgt wird dieses von Ausführungen zu <strong>der</strong>zeitig verfügbarer <strong>Netzwerk</strong>hardware,<br />
wie Ethernet o<strong>der</strong> Funk-Lan und verfügbaren <strong>Netzwerk</strong>anschlüssen, wie Modem,<br />
ISDN, ATM und ADSL. Alle Erläuterungen erfolgen am Beispiel des Betriebssystems L<strong>in</strong>ux.<br />
Im Zuge des Skriptes werden etliche Programme vorgestellt, welche zu Konfiguration,<br />
Tests, Fehlersuche, Betrieb bestimmter Dienste und Abfragen dieser benötigt werden.<br />
Diese Unterlagen wurden aus Anlass mehrerer Vorlesungen, Sem<strong>in</strong>are und e<strong>in</strong>iger Fortbildungskurse<br />
zum Thema “L<strong>in</strong>ux und Adm<strong>in</strong>istration <strong>in</strong> <strong>Netzwerk</strong>en”, ”L<strong>in</strong>ux als Beispiel<br />
e<strong>in</strong>es <strong>Netzwerk</strong>betriebssystems” o<strong>der</strong> ”<strong>E<strong>in</strong></strong>führung <strong>in</strong> IP-<strong>Netzwerk</strong>e” zusammengestellt. Sie<br />
s<strong>in</strong>d <strong>in</strong>zwischen e<strong>in</strong> geme<strong>in</strong>sames Projekt des Rechenzentrums <strong>der</strong> Universität Freiburg und<br />
<strong>der</strong> mathematischen Fakultät Gött<strong>in</strong>gen. Die Unterlagen werden permanent aktualisiert, jedoch<br />
können e<strong>in</strong>ige Teile durchaus älteren Datums se<strong>in</strong>.<br />
Sollte es Fehler <strong>in</strong> den Texten o<strong>der</strong> Probleme geben, bitte ich Sie, mich e<strong>in</strong>fach zu<br />
benachrichtigen. 1 Viele Teile stammen von Artikeln ab, die ich irgendwann mal <strong>in</strong> <strong>der</strong><br />
e<strong>in</strong>en o<strong>der</strong> an<strong>der</strong>en Publikumszeitschrift veröffentlicht hatte.<br />
Ich habe daher nichts dagegen, wenn diese Unterlagen ganz o<strong>der</strong> zum Teil für an<strong>der</strong>e<br />
Projekte Verwendung f<strong>in</strong>den. Ich möchte dann nur auf den Haftungsausschluss h<strong>in</strong>weisen<br />
und bitten, die Quellen zu überprüfen und gegebenenfalls zu kennzeichnen. Deshalb möchte<br />
ich die GPL möchte auf diese Unterlagen angewandt sehen.<br />
Das Skript erhebt ke<strong>in</strong>en Anspruch auf Vollständigkeit o<strong>der</strong> Orig<strong>in</strong>alität. Vieles f<strong>in</strong>det<br />
man im Internet o<strong>der</strong> <strong>in</strong> Lehrbüchern ebenso gut o<strong>der</strong> besser. Dort nachzuschlagen und zu<br />
vergleichen, sei den Lesern nachdrücklich ans Herz gelegt. Dennoch wird immer wie<strong>der</strong> e<strong>in</strong><br />
”eigener” Weg <strong>der</strong> Darstellung begangen, wobei manches über den normalen Umfang e<strong>in</strong>er<br />
<strong>E<strong>in</strong></strong>führung h<strong>in</strong>ausgehen kann. Dafür kommen manche traditionell breits abgehandelten<br />
Gebiete hier recht kurz weg. Manches fehlt auch ganz, weil man es woan<strong>der</strong>s leicht f<strong>in</strong>den<br />
kann. Dieses Skript will und kann ke<strong>in</strong> Lehrbuch ersetzen (das brauchen Sie außerdem),<br />
son<strong>der</strong>n ergänzen. Das “Self-L<strong>in</strong>ux”-Projekt 2 bietet e<strong>in</strong>e vernünftige Ergänzung zu den<br />
vorliegenden Unterlagen.<br />
<strong>E<strong>in</strong></strong>iges wird an<strong>der</strong>s als gewohnt präsentiert. Es werden Beispiele und auch zusätzliche<br />
Informationen angeboten, die nicht unbed<strong>in</strong>gt zum Prüfungsstoff gehören, aber gut zu wis-<br />
1 beispielsweise per Mail an dirk@goe.net<br />
2 www.selfl<strong>in</strong>ux.org<br />
1
2 KAPITEL 1. EINLEITUNG NETZWERK<br />
sen s<strong>in</strong>d (o<strong>der</strong> die man hier bequemer f<strong>in</strong>det). Dafür entfallen viele Aspekte, die <strong>in</strong> den<br />
Standard-Lehrbüchern gut dargestellt o<strong>der</strong> weitgehend bekannt s<strong>in</strong>d. Die weiterführende<br />
Literatur f<strong>in</strong>det sich am Ende e<strong>in</strong>es Abschnitts. Ich hoffe, dass diese Kursunterlagen den<br />
<strong>E<strong>in</strong></strong>stieg <strong>in</strong> <strong>Netzwerk</strong>e und L<strong>in</strong>ux <strong>in</strong> diesen erleichtern. Die Beispiele habe ich <strong>in</strong> den meisten<br />
Fällen selbst ausprobiert und Angaben aus Konfigurationsdateien stammen aus me<strong>in</strong>er<br />
eigenen <strong>Praxis</strong>. Trotzdem können Fehler enthalten se<strong>in</strong>, die ich dann zu entschuldigen bitte<br />
...<br />
1.2 Bezeichnung von Dateien und Verzeichnissen<br />
Zur Erhöhung <strong>der</strong> Lesbarkeit werden alle auführbaren Dateien/Systembefehle durch Fettdruck,<br />
z.B. dhcpd hervorgehoben. Alle Konfigurationsdateien, IP- und MAC-Adressen,<br />
Hostnamen werden italic gesetzt, um sie vom Druckbild hervorzuheben.<br />
Um den Lesefluss nicht stark zu stören, werden viele Erläuterungen als Fussnoten angefügt.<br />
Auch alle L<strong>in</strong>ks zu den entsprechenden Webseiten s<strong>in</strong>d hier zu f<strong>in</strong>den.<br />
1.3 Begriffserklärungen - Bereich <strong>Netzwerk</strong><br />
Im folgenden werden e<strong>in</strong>ige Begriffe und Abkürzungen erläutert, die im Bereich L<strong>in</strong>ux im<br />
<strong>Netzwerk</strong> und Internet häufig vorkommen.<br />
Bandbreite wird <strong>in</strong> mehreren Bedeutungen benutzt: Zum e<strong>in</strong>en ist die Bandbreite e<strong>in</strong><br />
Mass für die Breite e<strong>in</strong>es Frequenzbands. Die Differenz zwischen e<strong>in</strong>er oberen und e<strong>in</strong>er<br />
unteren Grenzfrequenz, die nie über- o<strong>der</strong> unterschritten wird. So hat beispielsweise hat e<strong>in</strong><br />
analoges Telefonsignal, das <strong>in</strong> e<strong>in</strong>em Frequenzbandbereich von 300 Hz bis 3400 Hz übertragen<br />
wird, e<strong>in</strong>e Bandbreite von 3100 Hz. An<strong>der</strong>erseits ist die Bandbreite e<strong>in</strong> Mass für die<br />
Anzahl Bits pro Sekunde, die gleichzeitig über e<strong>in</strong>e Kommunikationsleitung transferiert<br />
werden können. So hat das klassische Ethernet e<strong>in</strong>e Bandbreite von 10 Mbit/s.<br />
CSMA Carrier Sense Multiple Access beschreibt das Zugriffsverfahren für bestimmte<br />
Broadcast-Netze, wie Ethernet o<strong>der</strong> TokenR<strong>in</strong>g. Dabei gibt es zwei wichtige Ausprägungen:<br />
CD steht für Collision Detection, das Erkennen und CA für Collision Avoidance - das<br />
Vermeiden von Paketzusammenstößen. Ersteres ist charakteristisch für Ethernet, das Zweite<br />
für TokenR<strong>in</strong>g o<strong>der</strong> FDDI.<br />
Datenübertragungsrate Die maximale Datenübertragungsrate R lässt sich gemäss dem<br />
Nyquist-Theorem folgen<strong>der</strong>massen berechnen: Wenn das Signal aus V diskreten Stufen<br />
besteht: R = 2Hlog2V Bit/s. Nach Shannon beträgt die maximale Datenübertragungsrate<br />
R e<strong>in</strong>es rauschenden Kanals mit e<strong>in</strong>er Bandbreite von H Hz und e<strong>in</strong>em Rauschabstand von<br />
S/N gleich Hlog2(1 + S/N), die maximale Anzahl von Bit pro Sekunde.<br />
Dezibel (dB) ist e<strong>in</strong> e<strong>in</strong>heitenloses Maß. Bel ist nach dem Physiker Alexan<strong>der</strong> Graham<br />
Bell benannt. In <strong>der</strong> Nachrichtentechnik verwendet kommt üblicherweise die Masse<strong>in</strong>heit<br />
Dezibel (dB) zum <strong>E<strong>in</strong></strong>satz. Das Dezibel ist e<strong>in</strong> logarithmisches Maß. Es vere<strong>in</strong>facht<br />
die Berechnung <strong>der</strong> Dämpfung o<strong>der</strong> Verstärkung. Damit müssen für die Ermittlung <strong>der</strong><br />
Verstärkung e<strong>in</strong>es Gesamtsystems nur die e<strong>in</strong>zelnen dB-Werte addiert werden. <strong>E<strong>in</strong></strong>e Rechnung<br />
<strong>der</strong> Sendeleistung (beispielsweise e<strong>in</strong>es WLAN-Access-Po<strong>in</strong>ts) addiert die Leistung
1.3. BEGRIFFSERKLÄRUNGEN - BEREICH NETZWERK 3<br />
des Sen<strong>der</strong>s/Empfängers zur Leistung e<strong>in</strong>es eventuell verwendeten Verstärkers und <strong>der</strong> Antennenleistung.<br />
Von diesem Wert zieht man den Leistungsverlust durch Kabel, Stecker<br />
und eventuellem Blitzschutz ab. <strong>E<strong>in</strong></strong>e Verän<strong>der</strong>ung um 3dB entspricht immer e<strong>in</strong>er Leistungsverdoppelung<br />
o<strong>der</strong> Halbierung. Die <strong>E<strong>in</strong></strong>heit Dezibel Milliwatt (dBm) beschreibt den<br />
Leistungspegel bezogen auf e<strong>in</strong> Milliwatt. Die <strong>E<strong>in</strong></strong>heit ist e<strong>in</strong>e absolute Angabe. 20 dBm entsprechen<br />
e<strong>in</strong>er Leistung von 100 mW, 0dBm entsprechen 1 mW. Der Antennengew<strong>in</strong>n <strong>in</strong> dBi<br />
beschreibt die Leistungsverbesserung gegenüber e<strong>in</strong>em isotrophen Kugelstrahler. Sobald die<br />
Leistung nicht mehr <strong>in</strong> alle Richtungen gleichmäßig, son<strong>der</strong>n bezogen auf e<strong>in</strong> bestimmtes<br />
Raumsegment abgegeben wird, erhält man e<strong>in</strong>en Gew<strong>in</strong>n.<br />
Diskless X-Station Diskless X-Station me<strong>in</strong>t Workstations auf PC-Basis. Diese Geräte<br />
mounten ihr Dateisystem von e<strong>in</strong>em Fileserver und gestatten dem Benutzer das lokale<br />
Ausführen von Applikationen, sowie den Zugriff auf alle Laufwerke, <strong>in</strong>stallierte Erweiterungshardware<br />
(Audio, Video, SCSI, USB ...) und angeschlossene Perepheriegeräte.<br />
DHCP Dynamic Host Control Protocol. DHCP basiert auf UDP und benutzt für den<br />
Server-Kanal Port 67 und den Client-Kanal Port 68.<br />
Durchsatz o<strong>der</strong> Datendurchsatz bezeichnet die gemessene Leistung e<strong>in</strong>es Kanals und<br />
wird <strong>in</strong> Bit pro Sekunde (bps) angegeben.<br />
ERP und EIRP machen Angaben zur abgestrahlten Leistung von Antennen. ERP (Effective<br />
Radiated Power) gibt die effektiv abgestrahlte Leistung <strong>in</strong> <strong>der</strong> Hauptstrahlungsrichtung<br />
<strong>der</strong> Antenne an. EIRP (Effective Isotropic Radiated Power) wird benutzt um Richtantennen<br />
zu charakterisieren. EIRP gibt an, wie stark e<strong>in</strong>e ungerichtete Antenne (isotrop) senden<br />
müsste, um die gleiche Wirkung zu erzielen wie die Richtantenne <strong>in</strong> ihrer Hauptsen<strong>der</strong>ichtung.<br />
FTP Das File Transfer Protocal ist e<strong>in</strong>e <strong>der</strong> ältesten Möglichkeiten über TCP/IP Dateien<br />
zwischen Rechnern zu kopieren. Es verwendet das verb<strong>in</strong>dungsorientierte TCP und<br />
verwendet Port 23.<br />
LAN Local Area Network. Me<strong>in</strong>t <strong>Netzwerk</strong>e e<strong>in</strong>er ger<strong>in</strong>gen bis mittleren Ausbreitung,<br />
die sich üblicherweise <strong>der</strong> Ethernet-, ATM-, TokenR<strong>in</strong>g- o<strong>der</strong> FDDI-Technologie bedienen.<br />
Latenz ist die Dauer, die e<strong>in</strong>e Nachricht von e<strong>in</strong>em Ende e<strong>in</strong>es <strong>Netzwerk</strong>s zum an<strong>der</strong>en<br />
braucht. Die Zeitspanne, e<strong>in</strong>e Nachricht von e<strong>in</strong>em Ende e<strong>in</strong>es <strong>Netzwerk</strong>s zum an<strong>der</strong>en und<br />
wie<strong>der</strong> zurück zu senden, wird als Round Trip Time (RTT) des <strong>Netzwerk</strong>s bezeichnet, sie<br />
bewegt sich (<strong>in</strong> den meisten Netzen) meist im Millisekundenbereich.<br />
MIME Multipurpose Internet Mail Extension ist e<strong>in</strong> Kodierstandard, <strong>der</strong> die Struktur<br />
und den Aufbau von E-Mails und an<strong>der</strong>en Internetnachrichten festlegt.<br />
Modulation Unter Modulation versteht man die Verän<strong>der</strong>ung von Merkmalen e<strong>in</strong>es Signals,<br />
z.B. <strong>der</strong> Frequenz, Amplitude o<strong>der</strong> Phase, um Informationen zu kodieren.<br />
NFS Network File System. NFS ist e<strong>in</strong> UDP-basiertes Protokoll, das Dateisysteme über<br />
e<strong>in</strong> TCP/IP-<strong>Netzwerk</strong> zur Verfügung stellen kann.
4 KAPITEL 1. EINLEITUNG NETZWERK<br />
Nyquist-Theorem besagt, dass e<strong>in</strong> Signal mit <strong>der</strong> Bandbreite H durch 2H Abtastwerte<br />
pro Sekunde vollständig rekonstruiert werden kann. An<strong>der</strong>s ausgedrückt kann e<strong>in</strong> Signal<br />
<strong>der</strong> Frequenz f mit 2f Abtastwerten vollständig rekonstruiert werden.<br />
OSI-Schichtenmodell Dieses Modell <strong>der</strong> International Organization for Standardization<br />
(ISO) betrifft die Organisation von Datenfernübertragungen und veranschaulicht die<br />
ebenenorientierte Denkweise <strong>in</strong> <strong>der</strong> Informatik.<br />
Port Neben <strong>der</strong> IP-Adresse verfügt e<strong>in</strong> Rechner über jeweils 65.535 TCP bzw. UDP-<br />
Ports. Damit wird es möglich viele verschiedene Dienste auf e<strong>in</strong>em Rechner gleichzeitig<br />
anzubieten, bzw. viele gleichzeitige Verb<strong>in</strong>dunge aufzubauen.<br />
Server Der Server ist e<strong>in</strong> Diensteanbieter im klassichen TCP/IP-Client-Server-Modell,<br />
d.h. er stellt, meistens zentral, bestimmte Funktionalitäten, wie Mail-, File- und Webdienste<br />
o<strong>der</strong> Applikationen zur Verfügung. Benutzer können sich an e<strong>in</strong>em Server anmelden, werden<br />
aber nur <strong>in</strong> den seltensten Fällen physisch vor dem Gerät sitzen.<br />
Signal-Rausch-Abstand (englisch: Signal Noise Ratio (SNR) beschreibt das Verhältnis<br />
<strong>der</strong> Signalstärke S zur Rauschstärke N , also die Intensität des thermischen Rauschens <strong>in</strong><br />
e<strong>in</strong>em Übertragungskanal: S/N , und wird <strong>in</strong> Dezibel (dB) gemessen. Es ist e<strong>in</strong> Mass für<br />
die Re<strong>in</strong>heit e<strong>in</strong>es Signals.<br />
SSH Secure Shell Verb<strong>in</strong>dung. Diese ist dem Telnet auf jeden Fall vorzuziehen, da sie<br />
verschlüsselt erfolgt. Das Programm auf <strong>der</strong> Serverseite heisst üblicherweise sshd, die Clientapplikation<br />
ssh.<br />
Telnet <strong>E<strong>in</strong></strong>es <strong>der</strong> ersten Protokolle <strong>der</strong> TCP/IP-Suite, um sich an entfernten Rechnern<br />
anmelden zu können. Telnet verwendet als Transportprotokoll TCP und arbeitet auf Port<br />
21. Der Daemon, d.h. <strong>der</strong> H<strong>in</strong>tergrundprozess, <strong>der</strong> den Telnet-Dienst auf e<strong>in</strong>em Rechner<br />
anbietet, heisst üblicherweise (<strong>in</strong>.)telnetd und wird meistens über den Internet-Super-<br />
Daemon (x)<strong>in</strong>etd gestartet. Die Clientapplikation heisst e<strong>in</strong>fach telnet. Heutzutage aus<br />
Sicherheitsgründen kaum noch Telnet-Server, jedoch lassen sich mit Telnet e<strong>in</strong>fache Tests<br />
auf TCP-basierte Dienste loslassen.<br />
TFTP Trivial File Transfer Protocol. TFTP stellt e<strong>in</strong>e stark vere<strong>in</strong>fachte Version des<br />
FTP dar und arbeitet auf Basis von UDP Port 69.<br />
UDP User Datagram Protocol. UDP ist Teil von TCP/IP und stellt e<strong>in</strong>e Implementation<br />
<strong>der</strong> Transportschicht dar. UDP arbeitet verb<strong>in</strong>dungslos.<br />
User Agent o<strong>der</strong> Benutzeragent, -programm ist e<strong>in</strong> Client Programm <strong>in</strong> <strong>Netzwerk</strong>verb<strong>in</strong>dungen.<br />
Es <strong>in</strong>itiiert Anfragen, beispiel e<strong>in</strong> Browser an e<strong>in</strong>en Web-Server.<br />
WAN Wide Area Network. Me<strong>in</strong>t <strong>Netzwerk</strong>e mit großer räumlicher Ausdehnung, die sich<br />
üblicherweise <strong>der</strong> ISDN o<strong>der</strong> ATM Technologie bedienen. (Lichtwellenleiter, Kupferkabel)
1.4. BEGRIFFSERKLÄRUNGEN - TELEFONIE 5<br />
XDMCP Das X display message control protocol steuert die Grafikschnittstelle auf <strong>Unix</strong>-<br />
Systemen. Diese Schnittstelle ist netzwerktransparent. Dabei erfolgt die Ausgabe des Grafikoberfläche<br />
des Servers lokal auf <strong>der</strong> Masch<strong>in</strong>e. Die Bentutzere<strong>in</strong>gaben durch Tastatur und<br />
Maus werden über XDMCP an den Server weitergereicht.<br />
1.4 Begriffserklärungen - Telefonie<br />
Im folgenden werden e<strong>in</strong>ige Begriffe und Abkürzungen erläutert, die im Bereich digitaler<br />
Telefonnetze, Mobiltelefonie, Voice-over-IP, ISDN häufig verwendet werden.<br />
ACM Die Address Complete Message signalisiert im PSTN, dass das Rout<strong>in</strong>g e<strong>in</strong>es Telefonanrufes<br />
erfolgt ist. Üblicherweise erhält <strong>der</strong> Anrufer <strong>in</strong> <strong>der</strong> Zwischenzeit das Rufzeichen,<br />
Ansagen wie ”The person you have called is temporarily not available”, ”This number is no<br />
longer <strong>in</strong> service” ... <strong>E<strong>in</strong></strong> PSTN-2-SIP Gateway muss e<strong>in</strong>e solche Meldung geeignet weitergeben<br />
- durch ”early media” (def<strong>in</strong>iert <strong>in</strong> RFC2543) und/o<strong>der</strong> durch 183 Session Progress.<br />
AIN Advanced Intelligent Network, siehe auch IN.<br />
ANM steht für Answer Message im PSTN.<br />
BSC Base Station Controller.<br />
BSS bezeichnet das Base Station System. Dieses besteht aus e<strong>in</strong>em o<strong>der</strong> mehreren BSC.<br />
BTS Base Transceiver Station .<br />
CCI Der Call Charge Indicator ist e<strong>in</strong> ISUP Parameterfeld.<br />
CdPN Called Party Number ist e<strong>in</strong> Teil <strong>der</strong> ISUP Message. Dieses Feld enthält den NPI<br />
(Number<strong>in</strong>g Plan Indicator), beispielsweise ”E.164” und NOA (Nature of Address, z.B.<br />
”national”).<br />
CgPN Call<strong>in</strong>g Party Number ist e<strong>in</strong> weiterer Teil <strong>der</strong> ISUP Message.<br />
CPC Die Call<strong>in</strong>g Party Category ist e<strong>in</strong> ISUP Parameterfeld.<br />
CSD Circuit Switched Data ist e<strong>in</strong> Begriff aus dem Bereich <strong>der</strong> GSM-Telefonnetze und<br />
bezeichnet den Standard zum Datenaustausch. Die Nutzdatenrate beschränkte sich auf<br />
maximal 9,6 kBit/s. In <strong>der</strong> GSM-Phase-2 wurde die Geschw<strong>in</strong>digkeit <strong>der</strong> Datenübertragung<br />
auf 14,4 kBit/s erhöht, <strong>in</strong> <strong>der</strong> GSM-Phase-2+ die Bündelung mehrerer Kanäle ermöglicht.<br />
DTAP Der Direct Transfer Application Part ist das Call Control Protocol zwischen MS<br />
und MSC.<br />
FCI Der Forward Call Indicator ist e<strong>in</strong> ISUP Parameterfeld.
6 KAPITEL 1. EINLEITUNG NETZWERK<br />
GPRS Der General Packet Radio Service benötigt ke<strong>in</strong>e eigene Infrastruktur, son<strong>der</strong>n ist<br />
lediglich e<strong>in</strong>e Erweiterung <strong>der</strong> bestehenden GSM-Netze. GPRS-Mobiltelefone stellen für den<br />
schnellen Austausch <strong>der</strong> Datenpakete e<strong>in</strong>e dauerhafte Verb<strong>in</strong>dung zu e<strong>in</strong>em <strong>E<strong>in</strong></strong>wahlpunkt<br />
(APN = Acces Po<strong>in</strong>t Name) <strong>in</strong>s Netz her. Für die Datenkommunikation wird es Endgeräten<br />
erlaubt mehrere GSM-Kanäle zusammenzufassen und für die Kommunikation zu reservieren.<br />
Bandbreiten <strong>in</strong> Funknetzen haben immer e<strong>in</strong> Problem: Alle Nutzer e<strong>in</strong>er Zelle teilen<br />
sich e<strong>in</strong> geme<strong>in</strong>sames Medium. Wollen alle geme<strong>in</strong>sam zugreifen, s<strong>in</strong>kt für jeden e<strong>in</strong>zelnen<br />
die erreichbare Datenrate. n <strong>der</strong> <strong>E<strong>in</strong></strong>führungsphase von GPRS wurde netzseitig e<strong>in</strong>e Bandbreite<br />
von 53,6 kbit/s (4 Kanäle à 13,4 kbit/s) pro Funkzelle vorgesehen. Stehen alle acht<br />
Kanäle für GPRS zur Verfügung, würde die Bandbreite auf 107,2 kbit/s steigen. Weitere<br />
Steigerungen durch bessere Fehlerprotokoll erlaubten theoretische 171,2 kbit/s (acht Kanäle<br />
a 21,4 kbit/s). Mobiltelefone arbeiten momentan mit 13,4 kbit/s pro Kanal. Sie können je<br />
nach Gerät zwei bis drei Kanäle zusammenfassen.<br />
GMSC Gateway Mobile Switch<strong>in</strong>g Centre.<br />
GSM Global System of Mobile Telecommunication bezeichnet allgeme<strong>in</strong> den weltweiten<br />
Generation 2 Standard digitalen Mobilfunks.<br />
HLR Home Location Register<br />
HSCSD High Speed Circuit Switched Data, <strong>der</strong> Nachfolger von CSD, erreicht e<strong>in</strong>e maximale<br />
Datentransferrate von 57,6 kBit/s. Der Unterschied zwischen den beiden Systemen<br />
liegt <strong>in</strong> den verwendeten Protokollen und <strong>der</strong> Übertragungstechnik. Wie bei e<strong>in</strong>er Telefonleitung<br />
steht bei HSCSD jedem User e<strong>in</strong> dedizierter Nutzkanal exklusiv zur Verfügung. Die<br />
Zahl <strong>der</strong> gleichzeitig aktiven Teilnehmern ist für die verfügbare Bandbreite nicht relevant<br />
und nur durch die maximale Zellkapazität (bezogen auf aktive Teilnehmer) beschränkt.<br />
IAM steht für Initial Address Message im PSTN und ist Bestandteil des ISUP. IAM<br />
entspricht <strong>der</strong> ISDN Message ”Setup” und <strong>der</strong> SIP Message INVITE.<br />
IMSI Die International Mobile Subscriber Identity ist auf <strong>der</strong> SIM-Karte h<strong>in</strong>terlegt. Sie<br />
besteht aus maximal 15 Ziffern, wobei die ersten drei Ziffern für die MCC und die folgenden<br />
zwei o<strong>der</strong> drei Ziffern für die MNC vorgesehen s<strong>in</strong>d. Dabei bezeichnet MCC den Mobile<br />
Country Code und MNC (Mobile Network Code) den Betreiber des Mobilfunknetzes <strong>in</strong>nerhalb<br />
e<strong>in</strong>es Landes. Unterhalb des MCC ist <strong>der</strong> MNC immer e<strong>in</strong>heitlich zwei o<strong>der</strong> drei<br />
Ziffern lang. Der Rest ist die MSIN, Mobile Subscriber Identification Number. Sie dient zur<br />
Identifikation e<strong>in</strong>es Benutzers im PLMN.<br />
IN Intelligent Network me<strong>in</strong>t <strong>in</strong> <strong>der</strong> Telco-Szene mo<strong>der</strong>ne digitale circuit-switched Telefonnetze,<br />
die noch großartigere Form wird mit AIN bezeichnet.<br />
Interface An<strong>der</strong>s als <strong>in</strong> paketorientierten IP-<strong>Netzwerk</strong>en, wo die <strong>E<strong>in</strong></strong>haltung von (offenen)<br />
Protokollen und Standards e<strong>in</strong>e wesentliche Voraussetzung ist, spielen im Bereich<br />
klassische Telefonie Interfaces e<strong>in</strong>e große Rolle für die Signalisierung zwischen Komponenten<br />
des <strong>Netzwerk</strong>s. So bezeichnet das A Interface die Verb<strong>in</strong>dung zwischen MSC und BSC,<br />
Abis liegt zwischen BSC und BTS, D zwischen MSC und HLR und Um für die Funkverb<strong>in</strong>dung<br />
zwischen MS und BTS. Im Bereich des ISDN bezeichnet S0 die Schnittstelle zwischen
1.4. BEGRIFFSERKLÄRUNGEN - TELEFONIE 7<br />
NTBA und den Endgeräten, wie ISDN-Telefon o<strong>der</strong> AB-Wandler. Uk0 ist die Zweidraht-<br />
Kupferschnittstelle zwischen NTBA und Vermittlungsstelle.<br />
ISDN Integrated Services Digital Network ist e<strong>in</strong> weltweiter Standard <strong>der</strong> leitungsvermittelten<br />
(circuit-switched) Telefonie. Endbenutzer haben mit dem sogenannten Basic Rate<br />
Interface (BRI) zu tun. Grosse Nebenstellenanlagen s<strong>in</strong>d mittels Primary Rate Interfaces<br />
(PRI) mit dem öffentlichen Telefonnetz verbunden.<br />
ISUP Der ISDN User Part regelt die Inter-Circuit-Signalisierung von Anrufen und ist für<br />
<strong>der</strong>en Auf- und Abbau zuständig. Diese kann mittels SS7 o<strong>der</strong> alternativ mittels D-Kanal<br />
(Q.931) erfolgen. ISUP be<strong>in</strong>haltet folgende Fel<strong>der</strong>: IAM, CgPN, CdPN, USI, FCI, CPC,<br />
CCI.<br />
MSC Das Mobile Service Switch<strong>in</strong>g Centre ist die zentrale Schaltstelle im Telefonie-<br />
<strong>Netzwerk</strong>. Es ist verbunden mit dem Radio Access Network (RAN), welches von den BTS<br />
und BSCs gebildet wird, welche wie<strong>der</strong>um das Public Land Mobile Network (PLMN) bilden.<br />
MISDN Die Mobile Station ISDN Number wird dazu verwendet Benutzer zu identifizieren,<br />
wenn Verb<strong>in</strong>dungen aufgebaut werden. Sie besteht aus maximal 15 Ziffern, 3 wobei die<br />
ersten e<strong>in</strong>s, zwei o<strong>der</strong> drei Ziffern für den Country Code (CC) und anschliessende Ziffern<br />
für den National Dest<strong>in</strong>ation Code (NDC) stehen. Letzterer bezeichnet üblicherweise die<br />
”Vorwahlen” <strong>der</strong> diversen Mobilfunkanbieter. Der Rest ist dann die Subscriber Number<br />
(SN), welche den Benutzer <strong>in</strong>nerhalb e<strong>in</strong>es PLMN Nummernplans e<strong>in</strong>sortiert. Die MISDN<br />
ist dabei nicht(!) auf <strong>der</strong> SIM gespeichert und ist nicht auf <strong>der</strong> MS feststellbar. Unabhängig<br />
davon kann sich je<strong>der</strong> die Nummer natürlich irgendwo h<strong>in</strong> speichern, was aber für das Netz<br />
ke<strong>in</strong>e Auswirkungen hat.<br />
MS Die Mobile Station ist das Benutzerendgerät <strong>in</strong> Mobilfunknetzen, welches man <strong>in</strong> <strong>der</strong><br />
Hand hält. Dieses besteht aus dem Mobiltelefon, dem Mobile Equipment (ME) und <strong>der</strong><br />
SIM-Card. Jedes Mobiltelefon hat e<strong>in</strong>e e<strong>in</strong>deutige Kennung (IMEI - International Mobile<br />
Equipment Identifier), die hardcodiert im Gerät h<strong>in</strong>terlegt ist.<br />
MSRN Die Mobile Station Roam<strong>in</strong>g Number ist e<strong>in</strong>e temporäre Nummer, die e<strong>in</strong>er MS<br />
zugeordnet wird, wenn e<strong>in</strong>e Verb<strong>in</strong>dung aufgebaut wird. Dieses ist notwendig, da zwar die<br />
MISDN e<strong>in</strong>en Benutzer identifiziert, aber nichts darüber aussagt, wo er sich gerade bef<strong>in</strong>det.<br />
PBX Private Branch eXchange me<strong>in</strong>t die Endbenutzer Vermittlungsstelle.<br />
PLMN Public Land Mobile Network. So s<strong>in</strong>d GSM und UMTS Beispiele für PLMNs.<br />
GSM unterscheidet hier noch <strong>in</strong> Home PLMN (HPLMN), Visited PLMN (VPLMN) und<br />
Interrogat<strong>in</strong>g PLMN (IPLMN)<br />
3 Im Gegensatz zu den bekannten IP-Adressen handelt es sich hier um aufe<strong>in</strong>an<strong>der</strong>folgende Dezimalziffern.<br />
Das liegt an <strong>der</strong> langen Historie von Telefonnetzen, die traditionell Teilnehmern Ziffernfolgen des<br />
Dezimalsystems zuordnen.
8 KAPITEL 1. EINLEITUNG NETZWERK<br />
POTS Pla<strong>in</strong> Old Telephony System bezeichnet oft die klassische ”Analog”-Teleonie über<br />
die 2-Draht-Kupferleitung.<br />
PSTN Das Public Switched Telephone Network me<strong>in</strong>t das klassische System <strong>der</strong> (digitalen)<br />
Telefonie. Üblicherweise wird hierfür ISDN e<strong>in</strong>gesetzt.<br />
REL ist e<strong>in</strong>e ISUP Message (Release) und entspricht dem ”Release” des ISDN.<br />
RLC ist e<strong>in</strong>e ISUP Message (Release complete) und entspricht dem ”Release Complete”<br />
des ISDN.<br />
SIM Subscriber Identification Module ist e<strong>in</strong> Chip (auf e<strong>in</strong>em genormten Stück Plastik,<br />
das <strong>in</strong> das ME gesteckt wird), welcher den sogenannten Subscriber (Mobilfunkbenutzer)<br />
gegenüber dem GSM-Netz identifiziert.<br />
SIP Session Initiation Protocol ist e<strong>in</strong> Application Layer Protocol welches auf Basis von<br />
TCP o<strong>der</strong> UDP Session-Setup, In-Session-Info und Session-Close-Services für <strong>in</strong>teraktive<br />
Dienste wie Telefonie, Video-Conferenc<strong>in</strong>g o<strong>der</strong> Multi-User-Games zur Verfügung stellen<br />
kann.<br />
SS7 Das Signalisierungs System (Signal<strong>in</strong>g System) 7 ist e<strong>in</strong> Standard <strong>der</strong> Out-of-Band-<br />
Signalisierung <strong>in</strong> digitalen Telefonnetzen.<br />
UTMS H<strong>in</strong>ter <strong>der</strong> Abkürzung Universal Mobile Telecommunications System steckt <strong>der</strong><br />
1998 von <strong>der</strong> ETSI (Abkürzung für European Telecommunications Standard Institute)<br />
vorgestellte Breitband-Mobilfunkstandard <strong>der</strong> 3. Generation (G3). Die Weiterentwicklung<br />
und Pflege des Standards unterliegt <strong>in</strong>zwischen dem 3GPP (3rd Generation Partnership<br />
Project). Zu den wesentlichen Leistungsmerkmale von UMTS zählt die Übertragung von<br />
Sprache und Audiodaten, die Übermittlung von multimedialen Inhalten sowie <strong>der</strong> schnelle<br />
Zugriff auf das Internet. UMTS ermöglicht Datenübertragungsraten von 364 kbit/s bis zu<br />
2 Mbit/s, womit Stream<strong>in</strong>g Video und Audio Übertragung, sowie Bildtelefonie ermöglicht<br />
werden sollen. Diese Übertragungsraten erreicht UMTS durch den asynchronen Transfermodus<br />
kurz ATM-Verfahren im sogenannten Codemultiplexverfahren. Als Funk-Technologie<br />
kommt Wideband CDMA (WCDMA) im Frequenzbereich um die 2 GHz zum <strong>E<strong>in</strong></strong>satz.<br />
VLR Visitor Location Register ist e<strong>in</strong> Begriff auf dem Bereich digitaler Mobilfunknetze<br />
<strong>der</strong> zweiten (GSM) und dritten Generation (UMTS).
Kapitel 2<br />
OSI-Schichtenmodell<br />
2.1 Kategorisierungen<br />
Computernetze s<strong>in</strong>d durchaus komplex aufgebaut. Nicht jede Applikation soll diese Komplexität<br />
jeweils nachvollziehen müssen. An dieser Stelle wird wie<strong>der</strong>um Abstraktion verlangt.<br />
Dies ist durchaus vergleichbar mit den Aufgaben von Betriebssystemen, welche die<br />
Hardware virtualisieren. <strong>E<strong>in</strong></strong>e ”saubere” Trennung <strong>der</strong> Aufgaben (im S<strong>in</strong>ne <strong>der</strong> Programmierung<br />
von Schnittstellen) ist erfor<strong>der</strong>lich. Sonst wären Applikationen schwer zu warten,<br />
schlecht erweiterbar und im Laufe ihrer Weiterentwicklung kaum überschaubar. Deshalb ist<br />
e<strong>in</strong> strukturierter Aufbau notwendig. Hierfür erfolgt die Vere<strong>in</strong>barung von Protokollen und<br />
die Def<strong>in</strong>ition von Schnittstellen.<br />
Für die Modellierung von <strong>Netzwerk</strong>en bietet das OSI-Schichtenmodell e<strong>in</strong>e Orientierung.<br />
Dieses schafft e<strong>in</strong>e hierarchische Aufteilung <strong>der</strong> Hardware und Programme <strong>in</strong> Module, die<br />
jedoch durchaus von sehr verschiedenen Lieferanten stammen können.<br />
2.2 Protokollhierarchien<br />
Protokolle s<strong>in</strong>d Regeln, die den Austausch von Nachrichten - o<strong>der</strong> allgeme<strong>in</strong>er das Verhalten<br />
- zwischen (Kommunikations-) Partnern regeln (”Protocols are formal rules of behaviour”).<br />
Die Verletzung e<strong>in</strong>es vere<strong>in</strong>barten Protokolls erschwert die Kommunikation o<strong>der</strong> macht sie<br />
sogar gänzlich unmöglich.<br />
<strong>E<strong>in</strong></strong> Beispiel für e<strong>in</strong> Protokoll ”aus dem täglichen Leben” ist z.B. <strong>der</strong> Sprechfunkverkehr:<br />
Die Kommunikationspartner bestätigen den Empfang e<strong>in</strong>er Nachricht mit ”Roger” und<br />
leiten e<strong>in</strong>en Wechsel <strong>der</strong> Sprechrichtung mit ”Over” e<strong>in</strong>. Beendet wird die Verb<strong>in</strong>dung<br />
schließlich mit ”Over and out”.<br />
Ähnliche Protokolle werden auch beim Datenaustausch zwischen verschiedenen Computern<br />
benötigt - auch wenn hier die Komplexität <strong>der</strong> Anfor<strong>der</strong>ungen etwas höher ist.<br />
Aufgrund dieser höheren Komplexität werden viele Aufgabe nicht von e<strong>in</strong>em e<strong>in</strong>zigen Protokoll<br />
abgewickelt. In <strong>der</strong> Regel kommen e<strong>in</strong>e ganze Reihe von Protokollen, mit verschiedenen<br />
Teilaufgaben, zum <strong>E<strong>in</strong></strong>satz. Diese Protokolle s<strong>in</strong>d dann <strong>in</strong> Form von Protokollschichten<br />
mit jeweils unterschiedlichen Funktionen angeordnet.<br />
2.2.1 Hierarchie<br />
Jede Schicht n enthält Instanzen für den Datenaustausch mit <strong>der</strong> Partner<strong>in</strong>stanz <strong>der</strong> gleichen<br />
Schicht n <strong>in</strong> an<strong>der</strong>en Computern. Die Vere<strong>in</strong>barungen, nach denen diese Kommunikation<br />
abgewickelt wird, nennt man das Protokoll <strong>der</strong> Schicht n. Praktisch kommunizieren die<br />
9
10 KAPITEL 2. OSI-SCHICHTENMODELL<br />
Schichten nicht direkt mite<strong>in</strong>an<strong>der</strong>, son<strong>der</strong>n jede Schicht gibt <strong>der</strong> darunterliegenden Schicht<br />
die Daten und Steuer<strong>in</strong>formationen. Man kann sich vorstellen, dass jede Schicht (bis auf<br />
die unterste Schicht, die nur für das Senden und Empfangen e<strong>in</strong>es nicht formatierten Bitstroms<br />
zuständig ist) die erhaltenen Daten <strong>in</strong> e<strong>in</strong>en Umschlag steckt, <strong>in</strong> dem zusätzlich<br />
Informationen für die korrespondierende Schicht auf <strong>der</strong> an<strong>der</strong>en Masch<strong>in</strong>e stecken, die für<br />
die korrekte Wie<strong>der</strong>herstellung <strong>der</strong> Daten nötig s<strong>in</strong>d. Auf <strong>der</strong> untersten Schicht (Schicht<br />
1) f<strong>in</strong>det die tatsächliche Kommunikation auf dem darunterliegenden Medium statt. Auf<br />
<strong>der</strong> an<strong>der</strong>en Masch<strong>in</strong>e werden nun die Daten von <strong>der</strong> untersten Schicht <strong>in</strong> Empfang genommen<br />
und an die Schicht 2 übergeben. Diese öffnet den Umschlag und stellt mit den dar<strong>in</strong><br />
enthaltenen Informationen die korrekte Nachricht für Schicht 3 wie<strong>der</strong> her. Dies geschieht<br />
solange, bis die oberste Schicht erreicht ist. Diesen Satz von Schichten und Protokollen<br />
nennt man Protokollarchitektur. Das Schichtenmodell und die Protokollarchitektur, sowie<br />
die standardisierten Kommunikationsprotokolle bilden das OSI-Referenzmodell.<br />
2.3 Motivation<br />
Der Name des Modells lautet “Open Systems Interconnection”. Dieses Referenzmodell ist<br />
als Vorschlag für die Standardisierung von <strong>Netzwerk</strong>protokollen durch die ISO entstanden.<br />
Es wurde etwas später bzw. <strong>in</strong> gewissem Maße zeitgleich zu TCP/IP vorgeschlagen. Es<br />
sollte deshalb eher als theoretisches Konzept denn als technische Leitl<strong>in</strong>ie <strong>der</strong> Entwicklung<br />
von <strong>Netzwerk</strong>schichten verstanden werden.<br />
Layer<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
Application<br />
Presentation<br />
Session<br />
Transport<br />
Network<br />
Data l<strong>in</strong>k<br />
Physical<br />
ftp,http,smtp,pop3<br />
A<br />
TCP, UDP, SPX, Appleshare<br />
IP, IPX, Appletalk<br />
N<br />
Ethernet-, ATM-Switch<br />
Ethernet, TokenR<strong>in</strong>g, ISDN<br />
Application<br />
Presentation<br />
Session<br />
Transport<br />
Network<br />
Data l<strong>in</strong>k<br />
Physical<br />
Host A Host B<br />
Real Connection<br />
A User-Application<br />
Virtual Connection<br />
Flow of Data from A to B<br />
N Network-Protocol<br />
Abbildung 2.1: OSI-Schichtenmodell<br />
Name of Unit<br />
Packet<br />
Kaum e<strong>in</strong> Protokoll für Internets setzt alle Vorschläge des Schichtenmodells um. Trotzdem<br />
ist es hilfreich für die Strukturierung und Abgrenzung von <strong>Netzwerk</strong>protokollen und<br />
zum Verständnis für die Funktion von <strong>Netzwerk</strong>en.<br />
Frame<br />
Bit
2.3. MOTIVATION 11<br />
Hardware (-nahe) Protokolle für LANs und WANs lassen sich mit OSI erklären und<br />
e<strong>in</strong>ordnen. Auch die Abbildung <strong>der</strong> Dienste <strong>der</strong> TCP/IP-Suite kann <strong>in</strong>nerhalb des OSI-<br />
Modells erfolgen. Die Kommunikation zwischen verschiedenen Hosts läßt sich anhand von<br />
OSI gut veranschaulichen. Deshalb wird dieses durchaus immer noch erwähnt bzw. gelehrt.<br />
Die sieben Schichten entstammen folgenden Designpr<strong>in</strong>zipen:<br />
• <strong>E<strong>in</strong></strong>e Schicht sollte dort entstehen, wo e<strong>in</strong> neuer Abstraktionsgrad benötigt wird<br />
• Jede Schicht soll genau def<strong>in</strong>ierte Funktionen erfüllen<br />
• Bei <strong>der</strong> Funktionswahl sollte die Def<strong>in</strong>ition <strong>in</strong>ternational genormter Protokolle berücksichtigt<br />
werden<br />
• Grenzen zwischen Schnittstellen so wählen, dass möglichst wenig Informationsfluß<br />
über Schnittstellen notwendig wird<br />
• Es s<strong>in</strong>d so viele Schichten vorzusehen, dass ke<strong>in</strong>e Notwendigkeit besteht mehrere verschiedene<br />
Funktionen <strong>in</strong> e<strong>in</strong>er Schicht zu implementieren<br />
Schichten von unten nach oben (d.h. ausgehend von <strong>der</strong> Hardware hoch zur Applikation)<br />
s<strong>in</strong>d <strong>in</strong> <strong>der</strong> Tabelle dargestellt.<br />
# Schicht Layer<br />
(engl.)<br />
7 Anwendungs- application<br />
-<br />
6 Darstellungs- presentation<br />
-<br />
5 Kommunikationssteuer<br />
Orientiert Aufgabe Prot.<br />
Anwen-dungs- Verb<strong>in</strong>dung zwischen<br />
Benutzern<br />
und <strong>der</strong>en Tätigkeiten<br />
Anwendungs- Datenformat des<br />
Informationsaustausches<br />
session - Anwendungs- Verb<strong>in</strong>dung zwischen<br />
Prozessen<br />
auf verschiedenen<br />
Rechnern<br />
4 Transport- transport - Transport- Zusammensetzung<br />
<strong>der</strong> Nachrichten<br />
3 Vermittlungs- network - Transport- Adressierung<br />
<strong>der</strong> Nachrichten<br />
zwischen Rechnern<br />
2 Sicherungs- data l<strong>in</strong>k - Transport- Beseitigung<br />
Übertraguns-<br />
von<br />
fehlern<br />
Störungen<br />
durch<br />
1 Bitübertraphysical - Transport- Betrieb <strong>der</strong> Netzgungskarten<br />
Tabelle 2.1: Das OSI-Modell mit Beispiel FTP als TCP/IP-Protokoll<br />
FTP<br />
TCP<br />
TCP<br />
IP
12 KAPITEL 2. OSI-SCHICHTENMODELL<br />
2.4 Die e<strong>in</strong>zelnen Schichten<br />
Im OSI-Modell s<strong>in</strong>d die Schichten 1 - 4 transportorientiert; sie entsprechen den verschiedenen<br />
<strong>Netzwerk</strong>protokollen, welche <strong>in</strong> <strong>der</strong> <strong>Netzwerk</strong>hardware o<strong>der</strong> im Betriebssystem implementiert<br />
s<strong>in</strong>d. Die Schichten 5 - 7 arbeiten anwendungsorientiert; sie f<strong>in</strong>den üblicherweise<br />
<strong>in</strong>nerhalb e<strong>in</strong>er Anwendung statt. Jede Schicht soll sich dabei nur <strong>der</strong> Dienste <strong>der</strong> darunterliegenden<br />
Schicht bedienen. Die Implementation ist dabei beliebig, d.h. liegt im Ermessen<br />
des Anwen<strong>der</strong>s o<strong>der</strong> <strong>Netzwerk</strong>designers. Der Austausch von Schichten soll dabei möglich<br />
se<strong>in</strong>, wenn die neue Schicht die Funktionen <strong>der</strong> alten zur Verfügung stellt.<br />
Die Aufgaben <strong>der</strong> e<strong>in</strong>zelnen Schichten lassen sich wie folgt beschreiben:<br />
2.4.1 Bitübertragungsschicht<br />
regelt die Übertragung von ”rohen” Bits über den Kommunikationskanal. Dabei handelt<br />
es sich um e<strong>in</strong>en unstrukturierten Bitstrom. Die Bitübertragungsschicht enthält die Def<strong>in</strong>ition,<br />
welcher elektrischer, physikalischer Zustand e<strong>in</strong>er b<strong>in</strong>ären ”Null” bzw. e<strong>in</strong>er ”<strong>E<strong>in</strong></strong>s”<br />
entspricht. Dazu zählt beispielsweise, welche Länge e<strong>in</strong> bestimmter Zustand andauern muss<br />
o<strong>der</strong> mit wieviel Volt signalisiert wird. Weiterh<strong>in</strong> erfolgt die Festlegung, wie gross bestimmte<br />
Toleranzen se<strong>in</strong> dürfen, damit e<strong>in</strong> Signal noch <strong>in</strong>terpretiert werden kann und welche<br />
Abstände zwischen verschiedenen Zuständen liegen, damit diese sauber <strong>in</strong>terpretiert werden<br />
können.<br />
Weiterh<strong>in</strong> zählt dazu die Festlegung von Kabeltypen und -qualitäten (optisch bzw. elektrisch)<br />
o<strong>der</strong> die Def<strong>in</strong>ition von Funkstandards für drahtlose Übermittlung. Bestandteil ist<br />
weiterh<strong>in</strong> die Def<strong>in</strong>ition von Steckern und Buchsen, die Anzahl benötigter A<strong>der</strong>n und die<br />
full- o<strong>der</strong> halfduplex Datenkommunikation.<br />
2.4.2 Sicherungsschicht<br />
übernimmt die Umwandlung des rohen Datenkanals <strong>der</strong> Bitübertragungsschicht <strong>in</strong> e<strong>in</strong>e<br />
Leitung, welche virtuell frei von unerkannten Übertragungsfehlern ist. Dies geschieht durch<br />
die Aufteilung des Datenstroms <strong>in</strong> Frames1 . Dabei erfolgt das Setzen von Rahmengrenzen<br />
durch spezielle Kontrollbits. Weiterh<strong>in</strong> werden e<strong>in</strong>fache Prüfmechanismen geschaffen z.B.<br />
durch die <strong>E<strong>in</strong></strong>führung von CRC-Prüfsummen. Die Sicherungsschicht erlaubt weiterh<strong>in</strong> e<strong>in</strong>e<br />
Datenverkehrskontrolle. Sie kann Meldungen von Überschwemmungen e<strong>in</strong>es Empfängers<br />
generieren. Darüberh<strong>in</strong>aus regelt sie die Zugriffssteuerung <strong>in</strong> Broadcastnetzen.<br />
2.4.3 Vermittlungsschicht<br />
sichert die Steuerung des Teilnetzbetriebes. Sie ist sozusagen verantwortlich für die Auswahl<br />
<strong>der</strong> Paketrouten auf dem Weg vom Ursprungs- zum Bestimmungsort. Die auftretenden<br />
Routen können statisch, d.h. fest verdrahtet se<strong>in</strong> o<strong>der</strong> dynamisch für jede Sitzung festgelegt<br />
werden. Es geht auch noch dynamischer: Für jedes Paket e<strong>in</strong>er Sitzung wird e<strong>in</strong>e Route<br />
generiert.<br />
Bei Überlastungen <strong>der</strong> Teilnetze mit zuvielen Paketen muss e<strong>in</strong>e Engpass- bzw. Stausteuerung<br />
erfolgen. Darüberh<strong>in</strong>aus können Abrechnungsfunktionen2 <strong>in</strong> dieser Schicht implementiert<br />
se<strong>in</strong>. Die Vermittlungsschicht überw<strong>in</strong>det verschiedene Hardwareprotokolle. Sie<br />
kann Pakete <strong>in</strong> die angepaßte Größe für jedes Teilnetz umbauen.<br />
1 an<strong>der</strong>er Name für Paket, um die Daten”häppchen” <strong>der</strong> verschiedenen Schichten unterscheiden zu können<br />
2 z.B. für die Paketdurchleitung; da kaum e<strong>in</strong> Anbieter jede End-zu-Endverb<strong>in</strong>dung im eigenen Netz<br />
realisieren kann
2.5. KONZEPTE 13<br />
2.4.4 Transportschicht<br />
ist für die Entgegennahme <strong>der</strong> Daten aus <strong>der</strong> Sitzungsschicht verantwortlich. Die Transportschicht<br />
regelt gegebenenfalls die geeignete Zerstückelung des e<strong>in</strong>treffenden Datenstromes.<br />
Diese Daten werden an die Vermittlungsschicht weitergegeben.<br />
Die Transportschicht bietet e<strong>in</strong>e End-zu-End-Kontrolle <strong>der</strong> Korrektheit <strong>der</strong> Pakete und<br />
<strong>der</strong>en Reihenfolge. Dadurch erhält <strong>der</strong> Anwen<strong>der</strong> e<strong>in</strong>en fehlerfreien Punkt-zu-Punkt-Datenkanal.<br />
Die Transportschicht ist echte End-zu-End-Schicht, d.h. sie stellt die Ebene dar, auf<br />
<strong>der</strong> Programme Informationen mite<strong>in</strong>an<strong>der</strong> austauschen können. Weiterh<strong>in</strong> erlaubt sie das<br />
Multiplexen mehrerer Datenströme, da e<strong>in</strong> Host durchaus mehrere Verb<strong>in</strong>dungen unterhalten<br />
kann.<br />
2.4.5 Sitzungsschicht<br />
soll den Benutzern an verschiedenen Masch<strong>in</strong>en erlauben, Sitzungen mite<strong>in</strong>an<strong>der</strong> aufzubauen,<br />
d.h. e<strong>in</strong>erseits e<strong>in</strong>en gewöhnlichen Datentransport zu realisieren, aber auch zusätzliche<br />
Dienste anzubieten. Dialogsteuerungen und Tokenmanagement e<strong>in</strong>iger Anwendungen könnten<br />
<strong>in</strong> <strong>der</strong> Sitzungsschicht verortet werden. Weitere mögliche Aufgaben wären die Synchronisation<br />
z.B. Recovery e<strong>in</strong>es Datenstransfers nach e<strong>in</strong>em längerem Ausfall. Die genannten<br />
Beschreibungen deuten bereits an, dass diese Schicht sich schwer abgrenzen läßt.<br />
2.4.6 Darstellungsschicht<br />
realisiert Funktionen, die sich mit Syntax und Semantik <strong>der</strong> übertragenen Informationen<br />
beschäftigen. Hierzu zählt die Kodierung <strong>der</strong> Daten auf vere<strong>in</strong>barte Weise 3 . In <strong>der</strong> Darstellungsschicht<br />
erfolgt die Umwandlung spezieller Daten- und Objektstrukturen e<strong>in</strong>es Rechners<br />
<strong>in</strong> die für die Netzübertragung geeignete Form.<br />
2.4.7 Verarbeitungsschicht<br />
wird <strong>in</strong> e<strong>in</strong>igen Darstellungen auch Anwendungsschicht genannt. Sie bezieht sich auf die<br />
letztendlich auf e<strong>in</strong>em Host ablaufenden <strong>Netzwerk</strong>-Applikationen. Diese können z.B. e<strong>in</strong>e<br />
e<strong>in</strong>heitliche Term<strong>in</strong>alemulation 4 umfassen, die e<strong>in</strong>e Vielzahl sehr unterschiedlicher Term<strong>in</strong>altypen<br />
darstellen kann. Damit wird an<strong>der</strong>en Programmen (und <strong>der</strong>en Programmierern)<br />
die Ausgaben von Text und die Entgegennahme von Tastature<strong>in</strong>gaben erleichtert.<br />
Weiterh<strong>in</strong> könnte die Verarbeitungsschicht den Dateitransfer über verschiedene Standards<br />
von Dateisystemen und Namenskonventionen h<strong>in</strong>weg organisieren. Diese Erörterungen<br />
lassen sich ebenso auf Email-, Webdienste etc. anwenden.<br />
2.5 Konzepte<br />
Für den Zusammenschluss verschiedener Netze s<strong>in</strong>d spezielle Hardwarekomponenten notwendig.<br />
Diese regeln die Übergänge zwischen verschiedenen Teilnetzen und <strong>Netzwerk</strong>technologien,<br />
die sich sowohl im Medientyp, den Adressierungsschemata und den Frameformaten<br />
unterscheiden können.<br />
3<br />
little- o<strong>der</strong> bigendian, ASCII o<strong>der</strong> Unicode, Kodierung negativer Ganzzahlen als <strong>E<strong>in</strong></strong>er- o<strong>der</strong> Zweierkomplement,<br />
...<br />
4<br />
Mit ”Term<strong>in</strong>als” s<strong>in</strong>d im heutigen Sprachgebrauch die virtuellen Nachbildungen <strong>der</strong> meist seriellen<br />
Datensichtgeräte an Workstations o<strong>der</strong> Ma<strong>in</strong>frames geme<strong>in</strong>t.
14 KAPITEL 2. OSI-SCHICHTENMODELL<br />
Diese Hardwarekomponenten können wie Hosts mit m<strong>in</strong>destens zwei Interfaces aufgefaßt<br />
werden. Sie sollen sich wie e<strong>in</strong> Host 5 im jeweiligen Teil-Netz verhalten, wobei die Zahl von<br />
Übergängen zwischen verschiedenen <strong>Netzwerk</strong>en möglichst nicht begrenzt se<strong>in</strong> sollte. Hierfür<br />
dient <strong>der</strong> <strong>E<strong>in</strong></strong>satz sogenannter ”Router”.<br />
Weiterh<strong>in</strong>:<br />
• Schaffung e<strong>in</strong>es Adressierungsschemas, welches hardwareunabhängig (z.B. von <strong>der</strong><br />
Ethernetadressierung) ist<br />
• Schaffung e<strong>in</strong>es virtuellen Netzes; die Netzstuktur dieses ”Super”-Netzes muss von<br />
Topologie und Ausdehnung <strong>der</strong> darunterliegenden Netze unabhängig se<strong>in</strong><br />
• abstraktes Kommunikationssystem, .h. Soft- und Hardwarelösungen bilden e<strong>in</strong>e Illusion<br />
e<strong>in</strong>es geme<strong>in</strong>samen übergreifenden Netzes<br />
2.5.1 Protokolle<br />
”Protokoll” dient als geme<strong>in</strong>same Vere<strong>in</strong>barung (Standard) über die Kommunikationsparameter.<br />
Es wurden verschiedene Protokolle für den genannten Aufgabenbereich geschaffen:<br />
• TCP/IP als bekanntester Vertreter dieser Gruppe, da das weltweite Internet dieses<br />
verwendet<br />
• IPX/SPX als <strong>Netzwerk</strong>protokoll von Novell<br />
• Appletalk: <strong>Netzwerk</strong>dienst <strong>der</strong> Apple-Mac<strong>in</strong>tosh-Architektur<br />
• DECnet: Vernetzung von <strong>Unix</strong>-Workstations<br />
• X25: ITU-Standard für WAN-Technologien, Angebot von Telefongesellschaften<br />
Diese Protokolle besitzen Rout<strong>in</strong>gfähigkeit, d.h. verschiedene Netze können über spezielle<br />
Rechner (Router) mite<strong>in</strong>an<strong>der</strong> gekoppelt werden. Sie bieten e<strong>in</strong>en e<strong>in</strong>heitlichen bzw. ”globalen”<br />
Adressraum und s<strong>in</strong>d für verschiedene <strong>Netzwerk</strong>hardware verfügbar. An<strong>der</strong>e Protokolle,<br />
z.B. NetBIOS von Microsoft, s<strong>in</strong>d nur im LAN e<strong>in</strong>setzbar, weil sie über ke<strong>in</strong> globales<br />
Adressschema verfügen, nicht rout<strong>in</strong>gfähig s<strong>in</strong>d und nur auf bestimmte <strong>Netzwerk</strong>hardware<br />
anwendbar s<strong>in</strong>d.<br />
Mit <strong>der</strong> Ausdehnung <strong>der</strong> Firmennetze, dem Ausbruch des Rechners aus dem Rechenzentrum,<br />
<strong>der</strong> Popularisierung von Computern spielen <strong>Netzwerk</strong>e e<strong>in</strong>e immer größere Rolle.<br />
Deshalb wurde e<strong>in</strong> allgeme<strong>in</strong> standardisiertes, nichtproprietäres <strong>Netzwerk</strong>protokoll gesucht,<br />
welches gleichzeitig die Unabhängigkeit von bestimmten Herstellern besitzt. Betriebserfahrungen<br />
und Robustheit im <strong>E<strong>in</strong></strong>satz waren weitere Argumente. Die TCP/IP-Suite hat sich<br />
umfassend durchgesetzt; an<strong>der</strong>e Protokolle s<strong>in</strong>d nur mehr Ran<strong>der</strong>sche<strong>in</strong>ungen.<br />
2.6 <strong>E<strong>in</strong></strong>ordnungen<br />
Nach dem Aufbau e<strong>in</strong>es Theoriegerüstes <strong>in</strong> Form des OSI-Modells, läßt sich nun e<strong>in</strong>e <strong>E<strong>in</strong></strong>ordnung<br />
<strong>der</strong> im Folgenden vorgestellten <strong>Netzwerk</strong>protokolle <strong>in</strong> e<strong>in</strong>em kurzen Ausblick vornehmen.<br />
Dabei wird sichtbar, welche Protokolle jeweils für die Umsetzung bestimmter Aufgaben<br />
benötigt werden.<br />
5 e<strong>in</strong>faches Mitglied <strong>in</strong> e<strong>in</strong>em <strong>Netzwerk</strong>
2.7. AUFGABEN 15<br />
Ethernet, TokenR<strong>in</strong>g, ADSL, ISDN o<strong>der</strong> Modem def<strong>in</strong>ieren <strong>in</strong> erster L<strong>in</strong>ie verschiedene<br />
Typen von Bitübertragungsschichten. Sie stellen die Übertragungsstandards, was Kabel<br />
und elektrische bzw. optische Signalisierung, Verb<strong>in</strong>dungslängen etc. betrifft, sicher. Sie bestimmen<br />
außerdem die Datenraten und Half- o<strong>der</strong> Fullduplex-Betrieb, sowie die Kodierung<br />
<strong>der</strong> Daten für beste Erkennung und höchste Datenraten.<br />
Weiterh<strong>in</strong> implementieren Ethernet- und TokenR<strong>in</strong>g jeweils die Medienzugriffsverfahren,<br />
wie CSMA/CD o<strong>der</strong> CA6 , die <strong>der</strong> Sicherungsschicht zuzuordnen s<strong>in</strong>d. MAC-Adressierung<br />
ist ebenfalls e<strong>in</strong> Konzept <strong>der</strong> Sicherungsschicht. Ethernetswitches arbeiten auf dieser und<br />
schalten virtuelle Punkt-zu-Punkt-Verb<strong>in</strong>dungen auf dieser Ebene. Ethernet implementiert<br />
weiterh<strong>in</strong> Verfahren zur Congestioncontrol. Auch Korrekturverfahren, wie sie bei Modemkommunikation<br />
def<strong>in</strong>iert werden, s<strong>in</strong>d <strong>der</strong> Sicherungsschicht zuzuordnen.<br />
Das Internet-Protokoll läßt sich <strong>der</strong> Vermittlungsschicht zuordnen. Es übernimmt die<br />
Paketadressierung <strong>der</strong> End-zu-End-Zustellung und implementiert die Rout<strong>in</strong>gfunktionalitäten.<br />
IP kann dabei auf austauschbare Bitübertragungs- bzw. Sicherungsschichten zurückgreifen.<br />
Es kann über Ethernet, GPRS, ADSL, ISDN o<strong>der</strong> Modem ohne Än<strong>der</strong>ungen im<br />
Protokoll arbeiten. Dabei nimmt es evtl. Paketgrößenanpassungen vor. Dies geschieht durch<br />
die Steuerung <strong>der</strong> Paketfragmentierung auf dem Weg und durch den Zusammenbau im Zielhost.<br />
Der Weg e<strong>in</strong>es Paketes von Rechner A zu Rechner B durch e<strong>in</strong> <strong>Netzwerk</strong> liesse sich<br />
im OSI-Modell wie folgt veranschaulichen.<br />
Weg e<strong>in</strong>es Datenpaketes von Host A zu B über e<strong>in</strong>en Router<br />
Host A Eth-HUB Router Switch Host B<br />
2.7 Aufgaben<br />
2.7.1 OSI<br />
Abbildung 2.2: Weg e<strong>in</strong>es Paketes durch OSI-Schichten<br />
1. Wor<strong>in</strong> unterscheiden sich das OSI- und TCP-Schichtenmodell?<br />
6 Carrier Sense Multiple Access with Collision Detection bzw. Collision Avoidance<br />
Schicht<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1
16 KAPITEL 2. OSI-SCHICHTENMODELL<br />
2. Warum kann es passieren, dass e<strong>in</strong>zelne Schichten vielfach nochmal unterteilt wurden?<br />
3. Was s<strong>in</strong>d Gründe um geschichtete Protokolle zu verwenden?<br />
4. <strong>E<strong>in</strong></strong> System verwendet e<strong>in</strong>e n-Layer Protokollhierarchie. <strong>E<strong>in</strong></strong>e Applikation generiert e<strong>in</strong>e<br />
Nachricht von <strong>der</strong> Länge N Bytes. Auf je<strong>der</strong> Schicht wird e<strong>in</strong> H Byte langer Hea<strong>der</strong><br />
angefügt. Welcher Anteil <strong>der</strong> <strong>Netzwerk</strong>bandbreite wird alle<strong>in</strong> durch die Hea<strong>der</strong><strong>in</strong>formation<br />
belegt?<br />
5. Welche OSI-Schicht handelt die folgenden Aufgaben ab: a) Aufteilung des zu übertragenden<br />
Datenstroms <strong>in</strong> Frames und b) festzustellen, welche Route durch das <strong>Netzwerk</strong><br />
benutzt werden soll?<br />
2.7.2 <strong>Netzwerk</strong>e<br />
1. Was s<strong>in</strong>d die wesentlichen Unterschiedungen von packet-switch<strong>in</strong>g und circuit-switched<br />
Networks?<br />
2. Wodurch kommen Ende-zu-Ende-Verzögerungen zustande? Woraus setzt sich die Gesamtverzögerung<br />
zusammen? Annahme: Pakete bewegen sich entlang e<strong>in</strong>er festgelegten<br />
Route.
Kapitel 3<br />
LAN Hardware<br />
3.1 Ethernet<br />
Die <strong>in</strong> LANs am weitesten verbreitete Hardware ist im allgeme<strong>in</strong>en unter dem Namen Ethernet<br />
bekannt. Es umfaßt die Schichten 1 und 2 des ISO/OSI-Modells. Ethernets s<strong>in</strong>d <strong>in</strong> <strong>der</strong><br />
Installation relativ günstig, was, zusammen mit Übertragungsraten von bis zu 1000 Megabit<br />
pro Sekunde, zu se<strong>in</strong>er starken Popularität gesorgt hat.<br />
ISO/OSI<br />
Application<br />
Presentation<br />
Session<br />
Transport<br />
Network<br />
Data L<strong>in</strong>k<br />
IEEE 802.3<br />
reference model<br />
Upper-layer<br />
protocols<br />
MAC-Client<br />
Media Access (MAC)<br />
Physical Physical (PHY)<br />
IEEE 802-spcific<br />
IEEE 802.3-spcific<br />
Media-specific<br />
Abbildung 3.1: Ethernet im OSI-Schichtenmodell<br />
<strong>E<strong>in</strong></strong> Nachteil <strong>der</strong> Ethernet-Technologie ist die begrenzte Länge <strong>der</strong> Kabel, was die Verwendung<br />
auf LAN’s (Local Area Network) beschränkt. Allerd<strong>in</strong>gs kann man aber mehrere<br />
Ethernet-Segmente mite<strong>in</strong>an<strong>der</strong> verb<strong>in</strong>den, <strong>in</strong>dem man sogenannte Repeater, Bridges o<strong>der</strong><br />
Router verwendet. Repeater kopieren e<strong>in</strong>fach die Signale zwischen zwei o<strong>der</strong> mehreren Segmenten,<br />
was bedeutet, dass alle Segmente zusammenarbeiten, als wäre es e<strong>in</strong> e<strong>in</strong>zelnes<br />
Ethernet. Aufgrund <strong>der</strong> Tim<strong>in</strong>g-Anfor<strong>der</strong>ungen dürfen zwischen zwei Hosts im <strong>Netzwerk</strong><br />
nicht mehr als vier Repeater verwendet werden. Bridges und Router s<strong>in</strong>d da schon etwas<br />
aufwendiger. Sie analysieren die e<strong>in</strong>gehenden Daten und leiten sie nur dann weiter, wenn<br />
sich <strong>der</strong> empfangende Host nicht im lokalen Ethernet bef<strong>in</strong>det.<br />
Ethernet arbeitet wie e<strong>in</strong> Bus-System, bei dem e<strong>in</strong> Host die Pakete (o<strong>der</strong> Frames) mit<br />
e<strong>in</strong>er Größe von bis zu 1500 Byte an e<strong>in</strong>en an<strong>der</strong>en Host <strong>in</strong> demselben Ethernet übertragen<br />
kann. <strong>E<strong>in</strong></strong> Host wird dabei über e<strong>in</strong>e sechs Byte lange Adresse (MAC) angesprochen, die<br />
<strong>in</strong> die Firmware <strong>der</strong> Ethernet-Karte fest e<strong>in</strong>getragen ist. Diese Adressen werden von <strong>der</strong><br />
FCC <strong>in</strong> den USA zugeteilt. Die Sequenz von zweistelligen Hexadezimalzahlen, die jeweils<br />
durch Doppelpunkte vone<strong>in</strong>an<strong>der</strong> getrennt werden, kennt <strong>in</strong>zwischen fast je<strong>der</strong>, <strong>der</strong> mit<br />
17
18 KAPITEL 3. LAN HARDWARE<br />
Transmission or<strong>der</strong>: left-to-right, bit serial<br />
FCS error detection coverage<br />
FCS generation span<br />
PRE SFD DA SA Length/Type Data Pad FCS<br />
7 1 6 6 4 46 - 1500 4<br />
Field length <strong>in</strong> bytes<br />
Abbildung 3.2: Aufbau des Ethernet-Hea<strong>der</strong>s<br />
<strong>Netzwerk</strong>en zu tun hat.<br />
<strong>E<strong>in</strong></strong> Ethernet-Hea<strong>der</strong> beg<strong>in</strong>nt mit e<strong>in</strong>er 64 bit (8 octets) langen Sequenz aus Nullen<br />
und <strong>E<strong>in</strong></strong>sen um e<strong>in</strong> Paket e<strong>in</strong>zuleiten. Dieses ist zur Synchronisation <strong>der</strong> angeschlossenen<br />
Geräte und zur Collision Detection erfor<strong>der</strong>lich. Die ersten sieben Bytes besitzen jeweils<br />
e<strong>in</strong>en Wert von 10101010 während das letzte Byte mit dem Wert 10101011 das Ende <strong>der</strong><br />
Präambel ankündigt. Es folgen die Ziel und Quelladresse (jeweils 6 octets lang) und die Art<br />
des darüberliegenden Protokolls (kodiert <strong>in</strong> 2 octets). Nach den m<strong>in</strong>imal 46 und maximal<br />
1500 Byte Daten schliesst sich e<strong>in</strong>e Prüfsumme (4 octets lang). Unterschreitet e<strong>in</strong>e Datagrammgröße<br />
46 Bytes, so muss mit Zusatz-Bits erweitert werden. Die Vermittlungsschicht<br />
verwendet das Längen-Feld im Hea<strong>der</strong>, um die Füllbits zu erkennen. Durch das CRC-Feld<br />
wird überprüft, ob irgendwelche Bits im Rahmen durch äußere <strong>E<strong>in</strong></strong>flüsse (z.B. Dämpfung<br />
<strong>der</strong> Signalstärke, elektromagnetische Umgebungsstörungen, usw.) gekippt (komplementiert)<br />
wurden. Der Client berechnet den Wert des CRC-Feldes aus den übrigen Bits im Rahmen<br />
e<strong>in</strong>schließlich <strong>der</strong> Präambelbits. Der Server wendet auf die empfangenden Bits im Rahmen<br />
dieselbe Berechnung an (CRC-Prüfung) und überprüft damit den vom Client e<strong>in</strong>getragenen<br />
Wert.<br />
Ethernet arbeitet nach dem CSMA/CD-Verfahren, was ”Carrier Sense Multiple Access/Collision<br />
Detection” bedeutet. Bevor e<strong>in</strong>e Datenübertragung beg<strong>in</strong>nt, wird <strong>der</strong> Zustand<br />
des Netzes von <strong>der</strong> sendewilligen Station überprüft. Jede Station darf immer dann<br />
senden, wenn <strong>in</strong> diesem Moment ke<strong>in</strong>e an<strong>der</strong>e Station Daten überträgt. Deshalb kann jede<br />
Station simultan horchen und senden.<br />
<strong>E<strong>in</strong></strong> von e<strong>in</strong>em Rechner ausgesandter Frame wird von allen vorhandenen Rechnern registriert,<br />
aber nur <strong>der</strong> Ziel-Host liest das Paket und verarbeitet es. Hier<strong>in</strong> liegt e<strong>in</strong> Sicherheitsproblem<br />
von Ethernet, weil e<strong>in</strong> Rechner e<strong>in</strong>fach alle im Netz kursierenden Frames<br />
untersuchen kann.<br />
<strong>E<strong>in</strong></strong>e sendende Station überprüft - zur Sicherstellung, dass sie alle<strong>in</strong>e sendete - ob das gesendete<br />
Signal gleich dem empfangenden ist. Sollte dies nicht <strong>der</strong> Fall se<strong>in</strong>, so verschickt die<br />
Station e<strong>in</strong> Störsignal (Jam-Sequence), um allen an<strong>der</strong>en Stationen zu signalisieren, dass<br />
e<strong>in</strong>e Kollision stattfand. Anschliessend stellt sie das Senden e<strong>in</strong>. Die an<strong>der</strong>e gleichzeitig<br />
sendende Station registriert dieses Signal und stellt ebenfalls das Senden e<strong>in</strong>. Der nächste<br />
Sendeversuch erfolgt zeitversetzt um e<strong>in</strong>en Zufallsfaktor, damit e<strong>in</strong> weiteres Zusammentreffen<br />
von Paketen vermieden wird.<br />
Bef<strong>in</strong>det sich jedoch e<strong>in</strong>e sehr hohe Last auf dem <strong>Netzwerk</strong>, so wird - aufgrund dieses<br />
Verfahrens zu Kollisionsbehebung - <strong>der</strong> Datendurchsatz dieser <strong>Netzwerk</strong>technologie stark<br />
e<strong>in</strong>geschränkt. Mo<strong>der</strong>ne <strong>Netzwerk</strong>komponenten wie Switches reduzieren das Sicherheitsund<br />
Kollisionsproblem, <strong>in</strong> dem sie zum e<strong>in</strong>en die Datenpakete nur noch an dem Port zur<br />
Verfügung stellen, an dem e<strong>in</strong>e bestimmte MAC anliegt (hierzu haben diese Geräte übli-
3.1. ETHERNET 19<br />
cherweise e<strong>in</strong>en Speicher von 1000 - 8000 MAC-Adressen) und zum an<strong>der</strong>en wird per Store&Forward<br />
das Zusammentreffen von Paketen vermeiden.<br />
3.1.1 Ethernet-Adapter<br />
Die Protokolle s<strong>in</strong>d <strong>in</strong> e<strong>in</strong>en sogenannten Adapter, welcher auch als <strong>Netzwerk</strong>schnittstellenkarte<br />
bekannt ist und <strong>der</strong> mit e<strong>in</strong>em ROM sowie mit e<strong>in</strong>em DSP-Chip versehen ist, implementiert.<br />
<strong>E<strong>in</strong></strong> Adapter ist e<strong>in</strong>e halbautonome <strong>E<strong>in</strong></strong>heit. Er besitzt e<strong>in</strong>e eigene feste Adresse,<br />
MAC-Adresse (Media Access Controll), welche bei <strong>der</strong> Herstellung <strong>in</strong> das ROM des Adapters<br />
fest e<strong>in</strong>gebrannt wird. Diese Adresse ist sechs Bytes lang und wird normalerweise <strong>in</strong><br />
hexa-dezimaler Notation ausgedrückt. Somit leitet die Vermittlungsschicht des sendenden<br />
Clients Datagramme an den Adapter <strong>der</strong> Sicherungsschicht weiter, während dieser dann die<br />
Erweiterung des Ethernet-Hea<strong>der</strong>s übernimmt und den so entstandenen Rahmen auf <strong>der</strong><br />
Kommunikationsleitung überträgt.<br />
Der Adapter des empfangenden Servers extrahiert dann die Datagramme aus den Rahmen<br />
und leitet sie nach <strong>der</strong> Überprüfung auf Fehler gegebenenfalls an die Vermittlungsschicht<br />
weiter. Der Adapter besitzt die Freiheit e<strong>in</strong>en Rahmen zu verwerfen, falls er feststellt,<br />
dass dieser fehlerhaft ist, ohne die oberen Schichten <strong>in</strong>formieren zu müssen. <strong>E<strong>in</strong></strong><br />
wesentlicher Grund dafür, warum man auf <strong>der</strong> Sicherungsschicht MAC-Adressen und ke<strong>in</strong>e<br />
gewöhnliche IP-Adressen verwendet, ist, dass dann die Adapter kaum an<strong>der</strong>e Protokolle <strong>der</strong><br />
Vermittlungsschicht (z.B. IPX, DECNet) unterstützten könnten und somit ihre Flexibilität<br />
verlieren würden.<br />
Adressauflösungsprotokolle wie ARP, dienen den Sende-Adaptern, aus den Ziel-IP-<br />
Adressen die MAC-Adressen <strong>der</strong> entsprechenden Empfangs-Adapter zu ermitteln. Es ist<br />
zu erwähnen, dass ARP nur die IP-Adressen <strong>in</strong> MAC-Adressen auflöst, <strong>der</strong>en Hosts sich im<br />
gleichen LAN bef<strong>in</strong>den.<br />
3.1.2 Koaxialkabelbasierte Netze für 10 MBit<br />
TERM<br />
50Ohm<br />
max. 30 Stationen pro Segment max. 100 Stationen pro Segment<br />
PC 1<br />
CHEAPER-NET T-Connector<br />
2,5m<br />
PC 2<br />
TERM<br />
50Ohm TERM<br />
50Ohm<br />
WS 1 WS 2 WS 3<br />
10Base2 max. 4 Repeater<br />
Repeater<br />
10Base5<br />
185m<br />
MAUI<br />
500m<br />
Abbildung 3.3: Regeln <strong>in</strong> BNC-Netzen<br />
YELLOW-CABLE<br />
TERM<br />
50Ohm<br />
Th<strong>in</strong> Ethernet, Cheaper Net o<strong>der</strong> auch BNC bezeichnet die <strong>in</strong>zwischen veraltetete Vernetzung<br />
mittels 50 Ohm abgeschirmten Koaxialkabel (wie beim Rundfunk; Verb<strong>in</strong>dungsstücke<br />
und -kupplungen s<strong>in</strong>d <strong>in</strong> BNC-Technik ausgeführt. Die Enden müssen mit Endwi<strong>der</strong>ständen<br />
”term<strong>in</strong>iert”, d.h. abgeschlossen werden.). Diese Topologie ist preiswert und<br />
recht e<strong>in</strong>fach; neue Knoten s<strong>in</strong>d mit ger<strong>in</strong>gem Aufwand e<strong>in</strong>zufügen. Die Nachteile liegen jedoch<br />
<strong>in</strong> <strong>der</strong> primitiven Technik und se<strong>in</strong>er Empf<strong>in</strong>dlichkeit. Die Unterbrechung des Kabels<br />
an e<strong>in</strong>er Stelle führt zum Ausfall des ganzen <strong>Netzwerk</strong>(-segment)es. Bezeichnet wird dieser<br />
Standard mit 10Base2. Mittels Cheapernet können bis zu 185 m überbrückt werden. Der<br />
ursrpüngliche Standard 10Base5 basiert auf dickerem Koaxialkabel, wobei die Anschlüsse
20 KAPITEL 3. LAN HARDWARE<br />
<strong>der</strong> Endgeräte mittels Transceiver erfolgte. Hiermit s<strong>in</strong>d bis zu 500 m Gesamtlänge erreichbar.<br />
3.1.3 Twisted-Pair-basierte Verkabelungen 10/100 Mbit<br />
Twisted Pair Kabel mit 10/100 Mbit verwendet vier Kupfera<strong>der</strong>n, die paarweise verdrillt<br />
s<strong>in</strong>d. Die maximale Segmentlänge liegt hier bei 100 m. Bei mehr als zwei Rechnern ist nun<br />
üblicherweise zusätzliche Hardware notwendig, die als ”Hub” bezeichnet ist. Die Verkabelung<br />
erfolgt sternförmig zum HUB und erlaubt die e<strong>in</strong>zelne Segmentierung (Abschaltung)<br />
e<strong>in</strong>es Rechners, falls es zu Fehlern auf dem Kabel kommt.<br />
Im 8-adrigen Kabel bzw. auf <strong>der</strong> 8-poligen Anschlussdose werden üblicherweise die Kabelpaare<br />
1,2 und 3,6 verwendet. Möchte man zwei Rechner direkt mittels TP-Kabel verb<strong>in</strong>den,<br />
muss dieses gekreuzt se<strong>in</strong>, damit Empfangs- und Sendeanschlüsse entsprechend<br />
mite<strong>in</strong>an<strong>der</strong> verbunden werden. Diese Aufgabe wird üblicherweise von e<strong>in</strong>em Hub bzw.<br />
Switch übernommen. <strong>E<strong>in</strong></strong>e an<strong>der</strong>e Möglichkeit ist die beiden Rechner mit e<strong>in</strong>em “Cross-<br />
Connenct-Kabel” zu verb<strong>in</strong>den.<br />
Damit Endgeräte und <strong>Netzwerk</strong>komponenten mit unterschiedlichen Übertragungsraten<br />
<strong>in</strong> e<strong>in</strong>em Netz betrieben werden können, s<strong>in</strong>d Komponenten, die 100 Mbit transferieren<br />
können, mit e<strong>in</strong>em Media Independent Interface (MII) ausgestattet. Dieses handelt beim<br />
Aufbau <strong>der</strong> Verb<strong>in</strong>dung die Übertragungsrate, sowie den Verb<strong>in</strong>dungsmodus (Voll- o<strong>der</strong><br />
Halbduplexbetrieb) aus.<br />
3.1.4 1000Mbit<br />
Für Ethernetverb<strong>in</strong>dungen mit 1000 Mbit (Gigabit) benötigt man vier verdrillte Kupfera<strong>der</strong>npaare.<br />
Das hat zur Folge, dass ältere Kabel aufgrund ihrer Beschaltung und elektrischen<br />
Eigenschaften nicht mehr genutzt werden können. Gigabitnetzwerkkomponenten verfügen<br />
analog zu 100 Mbit Geräten über e<strong>in</strong> Gigabit Media Independent Interface (GMII), welches<br />
die Aushandlung <strong>der</strong> Verb<strong>in</strong>dungsart vornimmt. Auf diese Weise können ältere Geräte<br />
weiterh<strong>in</strong> <strong>in</strong> e<strong>in</strong>em solchen Netz betrieben werden. Das GMII ist <strong>in</strong> <strong>der</strong> Lage automatisch<br />
zwischen gekreuzten und ungekreuzten Kabelverb<strong>in</strong>dungen zu unterscheiden und die Verb<strong>in</strong>dung<br />
entsprechend zu schalten.<br />
416 byte for 1000Base-X<br />
520 byte for 1000Base-T<br />
PRE SFD DA SA Length/Type Data Pad FCS<br />
7 1 6 6 4 46 - 1500 4<br />
Field length <strong>in</strong> bytes<br />
Extension<br />
Abbildung 3.4: Erweiterungen des Ethernet-Standards für Gigabit<br />
3.1.5 Ethernet unter L<strong>in</strong>ux<br />
Die durchschnittliche vernetzte L<strong>in</strong>ux-Masch<strong>in</strong>e hängt an e<strong>in</strong>em Ethernet. Für mobile Endgeräte<br />
wie Laptops o<strong>der</strong> Tablet-PC gilt, dass dieses noch nicht e<strong>in</strong>mal die ganze Zeit <strong>der</strong><br />
Fall se<strong>in</strong> muss. Wenn auch Ethernets zu den fehlerfreiesten <strong>Netzwerk</strong>en zählen, so müssen<br />
trotzdem nicht immer alle Komponenten problemlos mite<strong>in</strong>an<strong>der</strong> kooperieren. Klappt die<br />
Aushandlung <strong>der</strong> Verb<strong>in</strong>dungsgeschw<strong>in</strong>digkeit beispielsweise zwischen älterer Switch und<br />
billigem <strong>Netzwerk</strong>adapter nicht, kommt ke<strong>in</strong> Datenaustausch zustande.
3.1. ETHERNET 21<br />
Weniger dramatisch ist e<strong>in</strong>e <strong>Netzwerk</strong>karte im Fullduplex-Mode an e<strong>in</strong>em Hub. Hier<br />
leidet die Verb<strong>in</strong>dungsqualität unter Umständen heftig, wegen <strong>der</strong> ausgeschalteten Kollisionserkennung<br />
<strong>der</strong> <strong>Netzwerk</strong>karte. Als Ergebnis beobachtet man Datenraten durchaus weit<br />
unter <strong>der</strong> nom<strong>in</strong>ellen Schnittstellengeschw<strong>in</strong>digkeit.<br />
An dieser Stelle setzen Programme wie ethtool, mii-diag o<strong>der</strong> die Toolsuite ”nictools”<br />
an. Man als Systemadm<strong>in</strong>istrator ethtool eth0 aufruft, erhält man e<strong>in</strong>en umfassenden<br />
Überblick zum Ethernet-Interface eth0. Hierzu gehören die unterstützten Interface-<br />
Geschw<strong>in</strong>digkeiten, die aktuell benutzte Geschw<strong>in</strong>digkeit, <strong>der</strong> Duplex-Status, welche Art<br />
des Mediums angeschlossen ist, ob e<strong>in</strong> L<strong>in</strong>k besteht und weiteres. Wenn es Probleme mit<br />
<strong>der</strong> automatischen Aushandlung <strong>der</strong> Parameter gibt, lässt sich diese ausschalten:<br />
s02:~ # ethtool -s eth0 autoneg off<br />
s02:~ # ethtool -s eth0 speed 10<br />
s02:~ # ethtool -s eth0 duplex half<br />
Anschliessend kann die Geschw<strong>in</strong>dkeit und die Art des L<strong>in</strong>ks manuell e<strong>in</strong>gestellt werden.<br />
Das Ergebnis <strong>der</strong> letzten beiden Kommandos sorgt für e<strong>in</strong>e <strong>Netzwerk</strong>verb<strong>in</strong>dung <strong>in</strong> <strong>der</strong> Qualität<br />
des alten BNC-Ethernets - 10 Mbits half duplex. Unterstützt die <strong>Netzwerk</strong>komponente<br />
Hub o<strong>der</strong> Switch die Anzeige <strong>der</strong> Geschw<strong>in</strong>digkeit, kann man die Än<strong>der</strong>ung <strong>der</strong> Parameter<br />
dort nachvollziehen. Nach <strong>der</strong> Wie<strong>der</strong>e<strong>in</strong>schaltung <strong>der</strong> ”Autonegotiation” reicht e<strong>in</strong> kurzes<br />
Ziehen und Wie<strong>der</strong>e<strong>in</strong>stecken des Kabels, um wie<strong>der</strong> die alten Parameter vor dem Experiment<br />
zu erhalten. Die <strong>E<strong>in</strong></strong>stellungen kann e<strong>in</strong> Adm<strong>in</strong> natürlich auch Schritt-für-Schritt <strong>in</strong><br />
<strong>der</strong> Kommandozeile vornehmen, <strong>in</strong>dem er die eben gezeigten Befehle umkehrt.<br />
<strong>E<strong>in</strong></strong> gezogenes Kabel quittiert ethtool mit <strong>der</strong> Meldung ”L<strong>in</strong>k detected: no”. Ähnliche<br />
Informationen liefert auch mii-diag.<br />
hermes:~ # mii-diag eth0<br />
Basic registers of MII PHY #1: 1000 796d 0020 6162 05e1 41e1 0005 2001.<br />
The autonegotiated capability is 01e0.<br />
The autonegotiated media type is 100baseTx-FD.<br />
Basic mode control register 0x1000: Auto-negotiation enabled.<br />
You have l<strong>in</strong>k beat, and everyth<strong>in</strong>g is work<strong>in</strong>g OK.<br />
Your l<strong>in</strong>k partner advertised 41e1: 100baseTx-FD 100baseTx 10baseT-FD<br />
10baseT.<br />
End of basic transceiver <strong>in</strong>formation.<br />
ethtool kann bei e<strong>in</strong>er Reihe von <strong>Netzwerk</strong>karten, beispielsweise e<strong>in</strong>igen Onboard Via-<br />
Rh<strong>in</strong>e, dazu verwendet werden, Wake-on-LAN e<strong>in</strong>zuschalten. Dieses erreicht man durch<br />
ethtool -s eth0 wol g. Der Parameter ”g” steht für ”Wake on MagicPacket”. <strong>E<strong>in</strong></strong>en<br />
solchen Weckruf kann das Programm ether-wake erschallen lassen.<br />
ether-wake 00:10:20:30:40:50 schickt e<strong>in</strong> geeignet formatiertes Ethernet-Frame an<br />
die angegebene MAC-Adresse. Es gibt e<strong>in</strong>e ganze Reihe weiterer Programme, die solche<br />
Pakete schicken können, auch über Router h<strong>in</strong>weg.<br />
Möchte man permanent den L<strong>in</strong>k-Status überwachen, weil man beispielsweise nicht zum<br />
Ablesen <strong>der</strong> LEDs an <strong>der</strong> Karte auf die Rechnerrückseite krabbeln will, können hier die<br />
Nic-Tools weiterhelfen. So überwacht beispielsweise für e<strong>in</strong>e SMC Epic100-Karte (83c170)<br />
”epic-diag -mm” permanent ob e<strong>in</strong> Kabel angeschlossen ist o<strong>der</strong> e<strong>in</strong> L<strong>in</strong>k zu e<strong>in</strong>er an<strong>der</strong>en<br />
<strong>Netzwerk</strong>komponente besteht. Die Diag-Tools - <strong>der</strong> Name beg<strong>in</strong>nt immer mit <strong>der</strong><br />
<strong>Netzwerk</strong>karte o<strong>der</strong> dem Chip - können weitere Informationen, beispielsweise über den<br />
Inhalt des Konfigurations-EEPROMs o<strong>der</strong> Device-Register ausgeben: via-diag -e o<strong>der</strong><br />
rtl8139-diag -a.
22 KAPITEL 3. LAN HARDWARE<br />
3.2 Funk-Netze<br />
Drahtlose lokale Kommunikationssysteme, sogenannte Wireless LANs, f<strong>in</strong>den bei zunehmen<strong>der</strong><br />
Produktvielfalt e<strong>in</strong>e immer grössere Verbreitung. Sie basieren üblicherweise auf<br />
Funk als Übertragungsweg. Lokale Funknetze können e<strong>in</strong>e effiziente Alternative zu aufwendigem<br />
Verlegen von Kabeln darstellen. <strong>E<strong>in</strong></strong>e Ad-hoc-Vernetzung per Funk erlaubt den<br />
spontanen und mobilen Datenaustausch. Kabellose <strong>E<strong>in</strong></strong>gabegeräte erhöhen den Bedienkomfort<br />
von Computern. Mit heute verfügbarer drahtloser Technik s<strong>in</strong>d e<strong>in</strong>e ganze Reihe von<br />
Mobilitätsansprüche <strong>der</strong> Nutzer von IT-Technik realisierbar. Die wichtigsten technischen<br />
Systeme hierzu s<strong>in</strong>d z.Z. WLAN (IEEE 802.11) und Bluetooth-Module (IEEE 802.15).<br />
Funknetze s<strong>in</strong>d komplexer im Zugriff als drahtgebundene LANs. Die begrenzte Reichweite<br />
<strong>der</strong> e<strong>in</strong>zelnen Teilnehmer und Stationen verh<strong>in</strong><strong>der</strong>n, dass e<strong>in</strong> übergreifendes Signalerkennen<br />
möglich ist o<strong>der</strong> stark erschwert wird. Zusätzlich soll e<strong>in</strong>e Bewegung zwischen<br />
verschiedenen Zellen ermöglicht werden. Diese Fähigkeit von Netzen wird als Roam<strong>in</strong>g bezeichnet.<br />
Um die beschriebenen Probleme <strong>in</strong> den Griff zu bekommen, wird e<strong>in</strong> MAC-Sublayer-<br />
Protokoll implementiert. Damit wird e<strong>in</strong> e<strong>in</strong>heitliches Netz über verschiedene Sen<strong>der</strong> möglich.<br />
<strong>E<strong>in</strong></strong> naiver Ansatz wäre Verwendung des CSMA/CD-Verfahrens, wie es beim drahtgebundenen<br />
Ethernet geschieht. Jedoch hört 3 nichts bei e<strong>in</strong>em Transfer zwischen 1 & 2 und<br />
könnte zu 2 übertragen wollen. Die Leitung sche<strong>in</strong>t frei zu se<strong>in</strong>, obwohl gesendet wird.<br />
Diese Situation wird als ”Hidden Station Problem” bezeichnet.<br />
Es tritt weiterh<strong>in</strong> folgende Schwierigkeit auf: Bei e<strong>in</strong>em Datentransfer von 2 zu 1 denkt<br />
3, dass Zelle blockiert ist und unterläßt e<strong>in</strong>en gleichzeitigen Transferversuch zu 4, obwohl<br />
dadurch ke<strong>in</strong>e gegenseitige Störung auftreten würde. Auf diese Weise wird Bandbreite verschenkt:<br />
”Exposed Station Problem”. Deshalb wird e<strong>in</strong> neues Zugriffsverfahren e<strong>in</strong>geführt.<br />
MACA(W) bezeichnet Multiple Access with Collision Avoidance. Bei diesem Verfahren wird<br />
vor dem eigentlichen Datentransfer e<strong>in</strong> kurzes Testsignal mit <strong>der</strong> Bezeichnung RTS (Ready<br />
To Send) gesendet. Mit diesem Signal erfolgt die Ankündigung des großen Datenblocks. Die<br />
Zielstation antwortet mit e<strong>in</strong>em CTS (Clear To Send).<br />
Reichweite von 1<br />
3 1 RTS 2 4 3 1 CTS 2 4<br />
5<br />
Reichweite von 2<br />
MACA (W) Zugriffsverfahren für WLAN<br />
Abbildung 3.5: Sichtbarkeitsproblem<br />
Alle Stationen, die e<strong>in</strong> RTS-Signal hören, müssen <strong>in</strong> <strong>der</strong> Zwischenzeit ”schweigen”. Es<br />
gibt e<strong>in</strong>e Optimierung des Protokolls, die mit MACAW bezeichnet wird.<br />
Folgende wichtige Standards regeln die Implementierung drahtloser <strong>Netzwerk</strong>e:<br />
• 802.11a bis 54 Mbit/s im 5 GHz Band<br />
• 802.11b <strong>der</strong>zeitige Implementation bis 11 Mbit/s<br />
5
3.2. FUNK-NETZE 23<br />
• 802.11g bis 54M bit/s jedoch im 2,4 GHz Band<br />
Mit dem <strong>der</strong>zeitig verfügbaren Standard s<strong>in</strong>d bei 11 Mbit/s nom<strong>in</strong>aler Übertragungsrate<br />
aufgrund von Protokolloverheads real ca. 6Mbit/s erreichbar. Verwendet wird das für<br />
Forschung, Mediz<strong>in</strong> und private Zwecke freigegebene Frequenzband bei 2,4 GHz. Die Leistung<br />
<strong>der</strong> verwendeten Geräte, Access-Po<strong>in</strong>ts, <strong>Netzwerk</strong>karten o<strong>der</strong> Repeater darf maximal<br />
100 mW betragen. Die Reichweiten liegen <strong>in</strong>door je nach Gebäudebeschaffenheit bei 30 bis<br />
100 m. Im Freien s<strong>in</strong>d bei Sichtkontakt 300 bis 500 m und mit Antenne verstärkt bis zu<br />
mehreren Kilometern überbrückbar.<br />
<strong>E<strong>in</strong></strong> Funknetz kann <strong>in</strong> verschiedenen Modi aufgebaut werden: AdHoc, Managed, Master,<br />
AccessPo<strong>in</strong>t. Hiervon hängt ab, ob die <strong>Netzwerk</strong>karten auf e<strong>in</strong>e feste Frequenz e<strong>in</strong>gestellt<br />
werden müssen o<strong>der</strong> sie nach e<strong>in</strong>em geme<strong>in</strong>samen Kanal suchen. Beim AccessPo<strong>in</strong>t-Modus<br />
übernimmt <strong>der</strong> AccessPo<strong>in</strong>t die Steuerung <strong>der</strong> Verb<strong>in</strong>dung. Der 802.11g Standard versucht<br />
bis zu 54 Mbit/s noch im 2,4 GHz Band zu realisieren, weiterh<strong>in</strong> gibt es herstellereigene Zwischenstandards<br />
bis 22 Mbits/s, die <strong>der</strong>zeitig auf dem Markt auftauchen und meistens nicht<br />
untere<strong>in</strong>an<strong>der</strong> kompatibel s<strong>in</strong>d. Die WiFi-Zertifizierung kennzeichnet Geräte, die nach den<br />
gegebenen Standards <strong>in</strong>teroperabel s<strong>in</strong>d. Erreicht werden die höheren Bandbreiten durch<br />
Kanalbündelung, womit <strong>in</strong>sgesamt weniger Kanäle für verschiedene Netze zur Auswahl stehen.<br />
Die Aufteilung des zur Verfügung stehenden Frequenzspektrums erfolgt auf bis zu<br />
13 Kanäle 1 Bei e<strong>in</strong>em engmaschigem Netz von AccessPo<strong>in</strong>ts ist e<strong>in</strong>e geschickte Kanalaufteilung<br />
notwendig, um Signalstörung o<strong>der</strong> Auslöschung zu vermeiden. Mehrere AccessPo<strong>in</strong>ts<br />
können <strong>in</strong> e<strong>in</strong>em Bereich betrieben werden, wenn ihre Kanäle weit genug ause<strong>in</strong>an<strong>der</strong>liegen.<br />
Alle Bandbreitenangaben beziehen sich auf e<strong>in</strong> ”Shared Medium”, d.h. bei steigen<strong>der</strong><br />
Teilnehmerzahl steht dem e<strong>in</strong>zelnen e<strong>in</strong>e niedrigere Datenrate, vergleichbar mit Ethernet<br />
über Koaxialkabel, zur Verfügung. Die nutzbare Bandbreite hängt also von den Teilnehmern<br />
pro Funkzelle ab. Es ist jedoch möglich mehrere Zellen parallel zu betreiben. Die<br />
Kennung erfolgt über die sechsstellige MAC, mit dieser erfolgt auch die Anmeldung an den<br />
AccessPo<strong>in</strong>ts.<br />
2,4000GHz 2,4835GHz<br />
1 2 3 4 5 6 7 8 9 10 11 12 13<br />
Kanalbelegung und evtl. Überschneidung beim WLAN (802.11b)<br />
Abbildung 3.6: Kanalaufteilung<br />
1 Die Verteilung ist <strong>in</strong> verschiedenen Län<strong>der</strong>n unterschiedlich, so dass nicht immer alle Kanäle genutzt<br />
werden dürfen.
24 KAPITEL 3. LAN HARDWARE<br />
<strong>E<strong>in</strong></strong> wesentliches Problem haben WLANs gegenüber ihren drahtgebundenen Pendents;<br />
sie s<strong>in</strong>d sehr offen. Deshalb muss e<strong>in</strong>e ganz an<strong>der</strong>e Absicherung als bei drahtgebundenen<br />
Netzen erfolgen. Zur Sicherung <strong>der</strong> Verb<strong>in</strong>dung wurde WEP (WiredEquivalentPrivacy) e<strong>in</strong>geführt.<br />
Es arbeitet mit 64 bzw. 128 Bit Schlüsseln. Diese s<strong>in</strong>d jedoch nicht unproblematisch:<br />
Sie besitzen e<strong>in</strong>en Klartext-Initialisierungsvektor (24 bit), <strong>der</strong> je<strong>der</strong> Nachricht voransteht.<br />
Damit ist <strong>der</strong> WEP-Key nur noch 40 bzw. 104 Bit lang.<br />
Die <strong>E<strong>in</strong></strong>fachheit <strong>der</strong> Konfiguration von WLANs br<strong>in</strong>gt weitere Probleme mit sich: Die<br />
AccessPo<strong>in</strong>ts arbeiten meistens sofort und ohne vore<strong>in</strong>gestellte Absicherung. Zusätzlich werden<br />
meistens DHCP-Server für sich anmeldende Geräte betrieben, die meist so konfiguriert<br />
s<strong>in</strong>d, dass je<strong>der</strong> Host e<strong>in</strong>e Adresse erhält. Deshalb gibt es <strong>in</strong>zwischen e<strong>in</strong>e Art Volkssport:<br />
WarDriv<strong>in</strong>g (o<strong>der</strong> WarChalk<strong>in</strong>g - Suchen nach offenen WLAN-Netzen).<br />
3.3 TokenR<strong>in</strong>g<br />
TokenR<strong>in</strong>g wurde von IBM entwickelt und ist heutzutage nur noch <strong>in</strong> alten Netzen im<br />
<strong>E<strong>in</strong></strong>satz. Im Gegensatz zu Ethernet kreist zur Zuteilung <strong>der</strong> Sendeerlaubnis e<strong>in</strong> ”Token”,<br />
welches dem Netzadapter - <strong>der</strong> im Besitz dieses Tokens ist - erlaubt Pakete zu verschicken.<br />
So kommt es nicht zu Kollisionen und die Bandbreite des Netzes (üblicherweise 4 o<strong>der</strong><br />
16 Mbit) kann auch mit e<strong>in</strong>er grösseren Zahl von Masch<strong>in</strong>en besser ausgenutzt werden, als im<br />
ungeswitchten Ethernet. Die Verzögerungszeiten <strong>in</strong> e<strong>in</strong>em TokenR<strong>in</strong>g liegen üblicherweise<br />
unter 250 ms.<br />
In <strong>der</strong> Regel berechtigt <strong>der</strong> Besitz des Tokens nur zur Sendung e<strong>in</strong>es Blocks (non exhaustive).<br />
Im an<strong>der</strong>en Extremfall könnte auch def<strong>in</strong>iert werden, dass die Station soviele<br />
Datenblöcke senden kann, wie sie möchte (exhaustive). Damit könnte aber e<strong>in</strong>e Station,<br />
die den Token besitzt, alle an<strong>der</strong>en dom<strong>in</strong>ieren. Normalerweise wird deshalb nur e<strong>in</strong> Block<br />
gesendet. Außerdem wird die Dauer <strong>der</strong> Sendeberechtigung befristet (Token Hold<strong>in</strong>g Time,<br />
z.B. 10 ms). Solange das Netz fehlerfrei funktioniert, stellt Token-R<strong>in</strong>g e<strong>in</strong> sehr e<strong>in</strong>fach zu<br />
bedienendes Verfahren dar. Komplexer s<strong>in</strong>d die Aufgaben beim Initieren des Netzes und<br />
be<strong>in</strong> <strong>E<strong>in</strong></strong>- o<strong>der</strong> Auskoppeln von Stationen. TokenR<strong>in</strong>g ist das e<strong>in</strong>zige Netz mit aktiven Stationen,<br />
die aus <strong>E<strong>in</strong></strong>gabe- und Ausgabee<strong>in</strong>heit bestehen. Grundsätzlich s<strong>in</strong>d alle Stationen<br />
gleichberechtigt, jedoch übernimmt e<strong>in</strong>e von ihnen als ”aktiver Monitor” beson<strong>der</strong>e Überwachungsaufgaben<br />
im Netz. <strong>E<strong>in</strong></strong>e an<strong>der</strong>e Station überwacht als ”passiver Monitor” den<br />
aktiven Monitor und kann gegebenenfalls dessen Aufgaben übernehmen. Die Aufgaben des<br />
aktiven Monitors s<strong>in</strong>d:<br />
• Erzeugen des R<strong>in</strong>gtaktes<br />
•<br />
Überwachen des Tokens (Neuen Token erzeugen, falls er verloren geht; Verh<strong>in</strong><strong>der</strong>n<br />
mehrerer Tokens)<br />
• Unterb<strong>in</strong>den permanent kreisen<strong>der</strong> Blöcke o<strong>der</strong> Tokens erhöhter Priorität. (Generell:<br />
R<strong>in</strong>g säubern durch Senden e<strong>in</strong>es “Purge R<strong>in</strong>g Frame” an alle Stationen und Erzeugen<br />
e<strong>in</strong>es neuen Frei-Tokens).<br />
• Verh<strong>in</strong><strong>der</strong>n, dass mehrere Monitore aktiv s<strong>in</strong>d.<br />
• Verzögerung des Token-Rahmens um 24 Bit-Zeiten (die Länge des Token-Rahmens<br />
beträgt 24 Bit). Auch bei extrem kle<strong>in</strong>em R<strong>in</strong>g wird so sichergestellt, dass e<strong>in</strong>e Station<br />
den Token-Rahmen vollständig senden kann, bevor sie ihn wie<strong>der</strong> empfängt.<br />
In regelmäßigen Abständen sendet <strong>der</strong> aktive Monitor e<strong>in</strong>en “Active Monitor Present<br />
Frame” an alle Stationen im R<strong>in</strong>g. Gleichzeitig wird dadurch e<strong>in</strong>e Prozedur <strong>in</strong> Gang gesetzt,
3.3. TOKENRING 25<br />
die allen Stationen die Adresse des jeweiligen Vorgängers im R<strong>in</strong>g liefert (NAUN = Nearest<br />
Active Upstream Neighbour) - e<strong>in</strong>e Information, die nur im Fehlerfall wichtig ist. <strong>E<strong>in</strong></strong> Fehler<br />
auf Empfangsseite bedeutet, dass <strong>der</strong> eigene Empfänger o<strong>der</strong> <strong>der</strong> Sen<strong>der</strong> des NAUN defekt<br />
ist. Die Auswahl des aktiven Monitors geschieht per “Claim-Token Process” durch:<br />
• den <strong>der</strong>zeit aktiven Monitor, wenn dieser Probleme bei <strong>der</strong> Durchführung se<strong>in</strong>er Aufgaben<br />
hat,<br />
• e<strong>in</strong>en passiven Monitor, wenn <strong>der</strong> aktive Monitor nicht korrekt arbeitet (z.B. Timeout<br />
auftritt).<br />
• e<strong>in</strong>e neu e<strong>in</strong>geglie<strong>der</strong>te Station, wenn diese das Fehlen des aktiven Monitors feststellt.<br />
Token-R<strong>in</strong>g-Netze werden normalerweise als Stern-R<strong>in</strong>g-Verb<strong>in</strong>dungen mit passiven R<strong>in</strong>gleitungsverteilern<br />
aufgebaut. In den R<strong>in</strong>gleitungsverteilern bef<strong>in</strong>den sich Relais (die von den<br />
Stationen gesteuert werden); sie dienen <strong>der</strong> <strong>E<strong>in</strong></strong>glie<strong>der</strong>ung von Stationen und <strong>der</strong> Schaltung<br />
von Ersatzr<strong>in</strong>gen bei Defekten.<br />
Die <strong>E<strong>in</strong></strong>glie<strong>der</strong>ung e<strong>in</strong>er Station erfolgt <strong>in</strong> fünf Schritten:<br />
1. Ist e<strong>in</strong> Adapter vom R<strong>in</strong>g getrennt, s<strong>in</strong>d gleichzeitig <strong>E<strong>in</strong></strong>gangs- und Ausgangsleitung<br />
kurzgeschlossen. Es erfolgt zunächst e<strong>in</strong> Adaptertest. Nach dem Test versorgt <strong>der</strong><br />
Adapter die Relais mit Strom und wird <strong>in</strong> den R<strong>in</strong>g e<strong>in</strong>geglie<strong>der</strong>t.<br />
2. Die Station hört nun den R<strong>in</strong>g ab. Wenn sie <strong>in</strong>nerhalb e<strong>in</strong>er festgelegten Zeit ke<strong>in</strong>e<br />
Aktivität des aktiven Monitors wahrnimmt, startet sie den Prozeß zur Auswahl des<br />
aktiven Monitors.<br />
3. Durch Aussenden e<strong>in</strong>es ”Duplicate Address Test Frame” prüft die Station die <strong>E<strong>in</strong></strong>deutigkeit<br />
ihrer Adresse. Ist sie nicht e<strong>in</strong>deutig, koppelt sich die Station wie<strong>der</strong> ab.<br />
4. Durch den NAUN-Prozeß erfährt die Station die Adresse ihres Vorgängers und ist<br />
nun <strong>in</strong>s Netz e<strong>in</strong>geglie<strong>der</strong>t.<br />
5. Von den Vore<strong>in</strong>stellungen abweichende Parameter können nun bei e<strong>in</strong>er Server-Station<br />
abgefragt werden, sofern dies nötig ist.<br />
Die Funktionen von Monitor und von den e<strong>in</strong>geglie<strong>der</strong>ten Stationen müssen nicht nur<br />
e<strong>in</strong>malig <strong>in</strong>itiiert, son<strong>der</strong>n auch ständig überwacht werden. In vielen Fällen s<strong>in</strong>d dies zahlreiche<br />
Aktionen, die auch viele Blöcke auf dem Netz zur Folge haben und <strong>in</strong> <strong>der</strong>en Verlauf<br />
auch Fehler- und Ausnahmebed<strong>in</strong>gungen auftreten können. Der Nachteil von Token-R<strong>in</strong>g<br />
liegt dar<strong>in</strong>, dass beim Ausfall e<strong>in</strong>er Station o<strong>der</strong> bei Kabeldefekten das Netz unterbrochen<br />
wird. Wird die defekte Station h<strong>in</strong>gegen abgeschaltet, so schalten die Relais im R<strong>in</strong>gleitungsverteiler<br />
die Leitung durch. Token R<strong>in</strong>g ist genormt nach IEEE 802.5.<br />
Jede Station empfängt, liest und sendet die auf dem R<strong>in</strong>g zirkulierenden Daten. Dabei<br />
gibt sie im allgeme<strong>in</strong>en nach dem Lesen die jeweilige Nachricht an die Nachbarstation<br />
weiter. Jedes Paket enthält die Adresse des Sen<strong>der</strong>s (SA) und die Zieladresse (DA). Wenn<br />
die Zieladresse mit <strong>der</strong> eigenen Adresse übere<strong>in</strong>stimmt, wird die Nachricht <strong>in</strong> den lokalen<br />
Speicher kopiert. Dies wird <strong>der</strong> lokalen LLC-Komponenete (Logical L<strong>in</strong>k Control) gemeldet,<br />
und es wird e<strong>in</strong> Quittierungsfeld- o<strong>der</strong> Fehlerfeld entsprechend verän<strong>der</strong>t. Anschließend<br />
wird diese Nachricht an die Nachbarstation weiter gesendet. Die sendende Station entfernt<br />
die von ihr gesendete Nachricht und <strong>in</strong>terpretiert die Quittierungsfel<strong>der</strong>. Um Sen<strong>der</strong>echt<br />
zu erhalten, muß jede Station das Token erhalten. Dies kann von je<strong>der</strong> Station mit e<strong>in</strong>er<br />
entsprechenden Priorität vorab reserviert werden:
26 KAPITEL 3. LAN HARDWARE<br />
Priorität Anwendung<br />
0 frei verfügbar, von den meisten Anwendungen verwendet<br />
1-3 frei verfügbar<br />
4 von Bridges verwendet<br />
5,6 reserviert, jedoch nicht verwendet<br />
7 für die Adm<strong>in</strong>istration des R<strong>in</strong>ges verwendet<br />
Tabelle 3.1: Prioritätslevel bei TokenR<strong>in</strong>g<br />
Nur die Station mit <strong>der</strong> höchsten reservierten Priorität erhält somit das Sen<strong>der</strong>echt.<br />
Diese Prioritäten, zusammen mit <strong>der</strong> festgelegten maximalen Umlaufzeit e<strong>in</strong>es Paketes,<br />
ermöglichen e<strong>in</strong>e garantierte Datenübertragung kont<strong>in</strong>uierlicher Medientypen.<br />
3.4 <strong>Netzwerk</strong>-Interfaces von L<strong>in</strong>ux<br />
Auf irgende<strong>in</strong>e Weise müssen <strong>Netzwerk</strong>datenpakete <strong>in</strong> e<strong>in</strong>e L<strong>in</strong>uxmasch<strong>in</strong>e h<strong>in</strong>e<strong>in</strong>kommen<br />
o<strong>der</strong> diese verlassen können. Dies geschieht über sogenannte <strong>Netzwerk</strong>-Interfaces. Durch<br />
den Namen des Interfaces wird meistens die Art <strong>der</strong> Verb<strong>in</strong>dung o<strong>der</strong> <strong>der</strong> verwendeten<br />
<strong>Netzwerk</strong>hardware spezifiziert. An<strong>der</strong>s als bei an<strong>der</strong>en <strong>Unix</strong>es verwendet L<strong>in</strong>ux für alle<br />
Ethernet-Interfaces die Bezeichnung ethN. Das ”N” ist e<strong>in</strong>e natürliche Zahl zwischen ”0”<br />
für das erste Interface und ”n-1” für die letzte <strong>Netzwerk</strong>karte, die <strong>in</strong> e<strong>in</strong>e Masch<strong>in</strong>e e<strong>in</strong>gebaut<br />
ist. <strong>E<strong>in</strong></strong> Rechner kann durchaus über etliche Interfaces auch von verschiedenen Typen<br />
verfügen. Die Verfügbarkeit e<strong>in</strong>es bestimmten Interfaces hängt meistens von e<strong>in</strong>em Kerneltreiber<br />
ab. Mit dem Laden des entsprechenden Moduls für e<strong>in</strong>en TokenR<strong>in</strong>g, Ethernet o<strong>der</strong><br />
ähnliche Adapter steht sodann das entsprechende Interface zur Verfügung. Dabei hängt die<br />
Reihenfolge <strong>der</strong> Nummerierung von <strong>der</strong> Reihenfolge des Modul-Ladens o<strong>der</strong> <strong>der</strong> automatischen<br />
Erkennung des L<strong>in</strong>ux-Kernels ab.<br />
TokenR<strong>in</strong>g-Adapter stellen nach dem Laden <strong>der</strong> entsprechenden Kernelmodule e<strong>in</strong> <strong>Netzwerk</strong><strong>in</strong>terface<br />
vom Typ tr0 und folgende für weitere Adapter dieser Art bereit. Ähnliches<br />
geschieht bei den entsprechenden Modulen für ATM, FDDI und an<strong>der</strong>e <strong>Netzwerk</strong>hardware.<br />
<strong>E<strong>in</strong></strong>e Beson<strong>der</strong>heit ist das Loopback-Interface, welches mit dem <strong>E<strong>in</strong></strong>schalten <strong>der</strong> TCP/IP<br />
Unterstützung, im Kernel automatisch zur Verfügung steht. Es wird mit lo bezeichnet und<br />
existiert nur <strong>in</strong> e<strong>in</strong>facher Ausführung. Weiterh<strong>in</strong> gibt es e<strong>in</strong>e Reihe von Software-Interfaces,<br />
wie ppp0 für PPP-Verb<strong>in</strong>dungen verschiedener Art, slip0 für Serial-L<strong>in</strong>e-IP, dummy0 für<br />
Testzwecke, ipsec0 für IPsec-Verb<strong>in</strong>dungen und weitere.<br />
dirk@l<strong>in</strong>ux:~/kurs> /sb<strong>in</strong>/ifconfig<br />
cipcb0 L<strong>in</strong>k encap:IPIP Tunnel HWaddr<br />
<strong>in</strong>et addr:192.168.2.2 P-t-P:192.168.2.1 Mask:255.255.255.255<br />
UP POINTOPOINT RUNNING NOARP MTU:1442 Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:100<br />
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)<br />
eth0 L<strong>in</strong>k encap:Ethernet HWaddr 00:02:B3:87:53:43<br />
<strong>in</strong>et addr:132.230.9.124 Bcast:132.230.9.255 Mask:255.255.255.0<br />
<strong>in</strong>et6 addr: fe80::202:b3ff:fe87:5343/10 Scope:L<strong>in</strong>k<br />
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />
RX packets:5323418 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:6567650 errors:0 dropped:0 overruns:1 carrier:0<br />
collisions:0 txqueuelen:100
3.5. AUFGABEN 27<br />
RX bytes:795523375 (758.6 Mb) TX bytes:2554637681 (2436.2 Mb)<br />
Interrupt:10 Base address:0xec00 Memory:dffff000-dffff038<br />
lo L<strong>in</strong>k encap:Local Loopback<br />
<strong>in</strong>et addr:127.0.0.1 Mask:255.0.0.0<br />
<strong>in</strong>et6 addr: ::1/128 Scope:Host<br />
UP LOOPBACK RUNNING MTU:16436 Metric:1<br />
RX packets:8401120 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:8401120 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:0<br />
RX bytes:802796349 (765.6 Mb) TX bytes:802796349 (765.6 Mb)<br />
vmnet8 L<strong>in</strong>k encap:Ethernet HWaddr 00:50:56:C0:00:08<br />
<strong>in</strong>et addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0<br />
<strong>in</strong>et6 addr: fe80::250:56ff:fec0:8/10 Scope:L<strong>in</strong>k<br />
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:4297 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:100<br />
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)<br />
Mit dem Kommando ifconfig erhält man z.B. obige Ausgabe, welche e<strong>in</strong> Interface für CIPE<br />
(cipcb0), e<strong>in</strong> klassisches Ethernet-Interface (eth0), das Loopback-Interface (lo) und e<strong>in</strong> virtuelles<br />
Ethernet-Interface für die Software VMware (vmnet8) als konfiguriert anzeigt. Die<br />
angezeigten Zusatz<strong>in</strong>formationen variieren <strong>in</strong> Abhängigkeit vom Interface-Typ. Die Maximum<br />
Transfer Unit (MTU) hängt von <strong>der</strong> darunterliegenden <strong>Netzwerk</strong>hardware ab und<br />
liegt, z.B. im Ethernet bei 1500 Byte. Das Loopback-Interface, welches nur <strong>in</strong> Software auf<br />
<strong>der</strong> Masch<strong>in</strong>e selbst stattf<strong>in</strong>det, kann <strong>in</strong> e<strong>in</strong>er <strong>E<strong>in</strong></strong>heit bis zu 16 kByte übertragen. Hardwaredaten,<br />
wie verwendeter Interrupt und Speicherbereiche f<strong>in</strong>det man natürlich nur bei<br />
Interfaces, die direkt mit e<strong>in</strong>er Hardware zu identifizieren s<strong>in</strong>d.<br />
3.5 Aufgaben<br />
3.5.1 Ethernet<br />
1. Welche Medien verwenden die Ethernet-Standards 10Base2, 100BaseTX und 10Base5?<br />
2. Was versteht man unter ”promiscuous mode”? Was heisst dieses speziell <strong>in</strong> Ethernets?
28 KAPITEL 3. LAN HARDWARE
Kapitel 4<br />
WAN Hardware<br />
4.1 <strong>E<strong>in</strong></strong>leitung<br />
Der Begriff Internet hat heute e<strong>in</strong>en festen Platz <strong>in</strong> fast je<strong>der</strong>manns Wortschatz. Die Entdeckung<br />
des Internets bee<strong>in</strong>flusst das Leben aller Generationen. Kommunikation (Chatt,<br />
E-Mail, ), <strong>E<strong>in</strong></strong>kaufen, Überweisungen (Onl<strong>in</strong>e-Bank<strong>in</strong>g), Recherchieren - um nur e<strong>in</strong>ige zu<br />
nennen - s<strong>in</strong>d Bereiche, <strong>in</strong> die das Internet auf selbstverständliche Art und Weise <strong>E<strong>in</strong></strong>zug<br />
gehalten hat. Das Internet ist heutzutage aus fast ke<strong>in</strong>em Lebensbereich mehr wegzudenken.<br />
Das Internet Protokoll selbst def<strong>in</strong>iert jedoch ke<strong>in</strong>e Hardware, die zur Bitübertragung<br />
e<strong>in</strong>gesetzt werden kann.<br />
Die folgenden Abschnitte wollen deshalb versuchen, dem Leser e<strong>in</strong>em Blick h<strong>in</strong>ter die<br />
Kulissen <strong>der</strong> physikalischen Datenübertragung zu verschaffen. Dabei wird <strong>in</strong>sbeson<strong>der</strong>e auf<br />
die e<strong>in</strong>gesetzten Technologien und Methoden <strong>der</strong> Datenübertragung e<strong>in</strong>gegangen.<br />
Wie aus dem Namen bereits ersichtlich, bilden Computernetzwerke e<strong>in</strong>en Verbund von<br />
mehreren Computern. Dabei können diese Computer sich alle <strong>in</strong> e<strong>in</strong>em Raum bef<strong>in</strong>den und<br />
über sogenannte <strong>Netzwerk</strong>kabel direkt mite<strong>in</strong>an<strong>der</strong> verbunden se<strong>in</strong> o<strong>der</strong> sich <strong>in</strong> unterschiedlichen<br />
Teilen <strong>der</strong> Welt aufgestellt se<strong>in</strong> und über <strong>Netzwerk</strong>kabel und Funknetze mite<strong>in</strong>an<strong>der</strong><br />
kommunizieren. Sobald <strong>in</strong> irgende<strong>in</strong>er Form m<strong>in</strong>destens zwei physikalisch getrennte Computer<br />
mite<strong>in</strong>an<strong>der</strong> verbunden s<strong>in</strong>d, spricht man von e<strong>in</strong>em Computernetzwerk.<br />
Im Fachjargon bezeichnet man alle Computer, die im <strong>Netzwerk</strong> registriert s<strong>in</strong>d, als Hosts<br />
o<strong>der</strong> Endsysteme. In diesen Unterlagen werden zumeist die Begriffe Host o<strong>der</strong> <strong>Netzwerk</strong>rechner<br />
verwendet werden. In <strong>der</strong> heutigen Zeit existieren unzählige Computernetzwerke (kurz:<br />
<strong>Netzwerk</strong>e). <strong>E<strong>in</strong></strong> <strong>Netzwerk</strong> liegt bereits vor, wenn <strong>in</strong> e<strong>in</strong>em kle<strong>in</strong>en Haushalt die Computer<br />
aller Familienmitglie<strong>der</strong> über e<strong>in</strong> lokales Netz (LAN) mite<strong>in</strong>an<strong>der</strong> verbunden s<strong>in</strong>d. Umfangreichre<br />
<strong>Netzwerk</strong>e s<strong>in</strong>d beispielsweise Unternehmensnetzwerke, Firmennetzwerke o<strong>der</strong> Universitätsnetzwerke.<br />
Das berühmteste <strong>Netzwerk</strong> ist aber sicherlich das öffentliche Internet,<br />
welches Millionen von Computern mite<strong>in</strong>an<strong>der</strong> verb<strong>in</strong>det und so als e<strong>in</strong> Zusammenschluss<br />
von verschiedenen <strong>Netzwerk</strong>en <strong>in</strong>terpretiert werden kann.<br />
Da - wie oben bereits erwähnt - die Hosts sich <strong>in</strong> den verschiedensten Teilen <strong>der</strong> Welt<br />
bef<strong>in</strong>den können und <strong>in</strong> jedem Land unter Umständen an<strong>der</strong>e Standards bezüglich <strong>der</strong> e<strong>in</strong>gesetzten<br />
Computertechnologien existieren, beschäftigte man sich schon <strong>in</strong> den früheren<br />
Jahren <strong>der</strong> <strong>Netzwerk</strong>e<strong>in</strong>führung mit <strong>der</strong> Frage des reibungslosen Ablaufes <strong>der</strong> Kommunikationen<br />
zwischen den verschiedenen Hosts.<br />
29
30 KAPITEL 4. WAN HARDWARE<br />
4.2 Leistung und Kosten <strong>der</strong> e<strong>in</strong>zelnen Technologien<br />
4.2.1 Leistung / Datendurchsatz<br />
In Tabelle 3.1. s<strong>in</strong>d die häufig verwendeten Verb<strong>in</strong>dungsprotokolle aufgeführt. ATM, ISDN<br />
und Modem werden eher dem WAN-Bereich, <strong>der</strong> Rest dem LAN zugeordnet. Aus <strong>der</strong> Tabelle<br />
geht die max. Reichweite, die Anzahl <strong>der</strong> Knoten und <strong>der</strong> Datendurchsatz hervor.<br />
4.2.2 Kosten<br />
Die Kosten für die verschiedenen <strong>Netzwerk</strong>typen s<strong>in</strong>d <strong>in</strong> Tabelle 3.2. aufgelistet. Sie lassen<br />
sich hier natürlich nur grob angeben. Bei Fest<strong>in</strong>stallationen wird man noch die Aufwendungen<br />
für Anschlussdosen (10 - 20 EUR/Stück), die Unterverteiler (Patchpanel (100 -<br />
300 EUR), Datenschränke (200 - 600 EUR), Patchkabel (TP 2.5 EUR/m, LWL 12 EUR/m<br />
...) mit e<strong>in</strong>planen müssen. Wenn Lichtwellenleiter zum <strong>E<strong>in</strong></strong>satz kommt, s<strong>in</strong>d die Aufwendungen<br />
noch etwas höher anzusetzen, da für den Anschluss (das Spleissen) <strong>in</strong> den meisten<br />
Fällen e<strong>in</strong>e Firma beauftragt werden muss. Bei e<strong>in</strong>er Funkvernetzung entfallen die Kosten<br />
für e<strong>in</strong>e Fest<strong>in</strong>stallation, jedoch s<strong>in</strong>d die weitaus höheren Aufwendungen für die <strong>Netzwerk</strong>karten<br />
und die Access-Po<strong>in</strong>ts zu berücksichtigen.<br />
Medium Reichweite Knoten Durchsatz<br />
Funk-LAN e<strong>in</strong>ige 100m ca. 20 - 50 2 - 11 Mbits<br />
ADSL mehrere km - 0.5 - 7.6 Mbit<br />
ATM mehrere km ???? 2 - 622 Mbits<br />
Ethernet (TP) 100 m 2 - ... 10 - 1000 Mbits<br />
Ethernet (BNC) 185 m ca. 35 10 Mbits<br />
ISDN - - ¿ 64 Kbits<br />
loopback 0 1 ¿ 100 Mbits<br />
Modem - 2 0.3 - 56 Kbits<br />
GPRS/HSCSD mehrere km - 0.3 - 56 KBit<br />
UMTS mehrere km - 128 - 386 KBit<br />
Serieller Port 30 m 2 300 - 112000 Bits<br />
Tokenr<strong>in</strong>g 100 m 8 4, 16 Mbits<br />
Tabelle 4.1: Leistung und Datendurchsatz e<strong>in</strong>iger <strong>Netzwerk</strong>e<br />
<strong>E<strong>in</strong></strong>ige <strong>Netzwerk</strong>-Technologien wird man nur noch <strong>in</strong> bestehenden Installationen o<strong>der</strong><br />
Computer-Flohmärkten antreffen. Hierzu gehören sicherlich BNC-Ethernet, TokenR<strong>in</strong>g o<strong>der</strong><br />
auch Parallelport-Verb<strong>in</strong><strong>der</strong>.<br />
4.3 Telefonnetze<br />
Telefonnetze gehören zu den ältesten Weitverkehrsnetzen überhaupt. Die ersten Zweidraht-<br />
Kupfer-Telefonnetze wurden bereits Ende des 19. Jahrhun<strong>der</strong>ts e<strong>in</strong>gerichtet. Die Versorgung<br />
mit Telefonanschlüssen liegt <strong>in</strong> Deutschland <strong>in</strong>zwischen bei nahe 100 Prozent. Datennetze<br />
kamen deutlich später. Deshalb wurden die ersten Datenleitungen über Telefonnetze<br />
geschaltet. Die meisten Internet-Benutzer verwenden <strong>in</strong> irgende<strong>in</strong>er Form Telefonleitungen<br />
für die Verb<strong>in</strong>dung. Dabei geht <strong>der</strong> Trend jedoch e<strong>in</strong>deutig weg von den alten ”analogen” Telefonanschlüssen<br />
über ISDN h<strong>in</strong> zu DSL. Jedoch bleibt <strong>der</strong> Anbieter <strong>der</strong> Zweidraht-Leitung
4.3. TELEFONNETZE 31<br />
Medium Adapter Kabel Gebühren (ca. EUR)<br />
ATM 300 - 600 EUR 4/m (LWL) Grosskunde<br />
Parallelport 5 - 10 10 -<br />
Ethernet (TP 1000) 15 - 100 EUR 0.70/m -<br />
Ethernet (TP 100) 4 - 40 EUR 0.70/m -<br />
Ethernet (TP 10) – 0.70/m -<br />
Ethernet (BNC 10) – 0.20/m -<br />
Funk-LAN (2/11 Mbit) 100 - 200 EUR 500/AccessPo<strong>in</strong>t -<br />
ISDN 100 - Telefongebühren<br />
Modem 80 - 200 - Telefongebühren<br />
GPRS 40 - 300 EUR - saftige Volumengebühr<br />
HSCSD 40 - 200 EUR - saftige Zeitgebühr<br />
UMTS 80 - 300 EUR - saftige Volumengebühr<br />
Serieller Port – 5 0<br />
TokenR<strong>in</strong>g – 0.70/m -<br />
Tabelle 4.2: Kosten e<strong>in</strong>iger <strong>Netzwerk</strong>e<br />
<strong>in</strong> den meisten Fällen identisch.<br />
Die Zeit <strong>der</strong> analogen Telefonnetze <strong>in</strong> Deutschland ist Mitte <strong>der</strong> 90er Jahre abgelaufen.<br />
Wenn auch die meisten Endgeräte <strong>in</strong> den Haushalten nach den Pr<strong>in</strong>zipien <strong>der</strong> Telefone von<br />
vor 70 Jahren arbeiten, so f<strong>in</strong>det die Gesprächsvermittlung und Übertragung im H<strong>in</strong>tergrund<br />
meistens nur noch digital statt.<br />
4.3.1 Das klassische Telefonnetz<br />
Das klassische Telefonnetz nutzt e<strong>in</strong>e Kupfer-Zweidraht-Leitung von <strong>der</strong> Vermittlungsstelle<br />
bis <strong>in</strong> die Haushalte. Diese Art Telefonsystem wird von <strong>Netzwerk</strong>ern oft als ”pla<strong>in</strong> old<br />
telephone system” - POTS bezeichnet.<br />
Übertragungs- Datenrate Datenrate Reichweite Verfügbarkeit<br />
methoden Upstream Downstream <strong>in</strong> Meter <strong>in</strong> Deutschland<br />
Analoge Modems 33.6 kbps 56 kbps etliche km verfügbar<br />
IDSN 128 kbps 128 kbps etliche km verfügbar<br />
Symmetrisches DSL 2048 kbps 2048 kbps 4000 verfügbar<br />
ADSL (DMT) 768 kbps 8 Mbps 6000 verfügbar<br />
ADSL (CAP) 64 kbps 1,54 Mbps 6000 verfügbar<br />
640 kbps 6,14 Mbps 4000 Testphase<br />
VDSL 640 kbps 13 Mbps 1500 Testphase<br />
1,6 bis 2,3 Mbps 52 Mbps 300 Testphase<br />
Kabelmodems 768 kbps 30 Mbps je nach Kabel Testphase<br />
Tabelle 4.3: Protokolle auf 2-draht Kupferleitungen im Überblick<br />
4.3.2 Digitale Telefonnetze - ISDN<br />
Meistens wird ISDN für e<strong>in</strong>en Zugang zum Internet verwendet; es ist für <strong>in</strong>terne Vernetzungen<br />
fast nur im Bereich <strong>der</strong> WAN’s (Wide Area Networks) anzutreffen. ISDN wird üblicherweise<br />
von Telefongesellschaften zur Sprachkommunikation angeboten und f<strong>in</strong>det sich auch
32 KAPITEL 4. WAN HARDWARE<br />
im Umfeld grösserer Firmentelefonanlagen. Die Primärbandbreite beträgt 64 kbit, welches<br />
von <strong>der</strong> digitalen Sprachvermittlung herrührt. Verwendet wird PCM (Pulse Code Modulation),<br />
welche 8000 Samples von 8 bit Grösse pro Sekunde erzeugt.<br />
Oft f<strong>in</strong>det man passive ISDN-Karten im Computer, die nur e<strong>in</strong>en e<strong>in</strong>fachen Wandler<br />
des digitalen Datenstroms <strong>der</strong> ISDN-Verb<strong>in</strong>dung zum Rechnerbus vornehmen. Für den<br />
jeweiligen Adapter muss e<strong>in</strong>e Treiberunterstützung im L<strong>in</strong>ux-Kernel vorhanden se<strong>in</strong>, damit<br />
er benutzt werden kann. Zur Ansprache als <strong>Netzwerk</strong>-Interface stehen bei erfolgreicher<br />
Konfiguration die Po<strong>in</strong>t-to-Po<strong>in</strong>t (PPP) Interfaces ippp0 und folgende zur Verfügung. Diese<br />
können sodann mit den klassischen <strong>Netzwerk</strong>tools e<strong>in</strong>gerichtet und gesteuert werden.<br />
4.3.3 Mobilfunknetze nach dem GSM-Standard<br />
GSM - <strong>der</strong> Global Standard for Mobile Communication def<strong>in</strong>iert e<strong>in</strong> digitales Mobilfunknetz,<br />
was <strong>in</strong> <strong>der</strong> überwiegenden Zahl <strong>der</strong> Län<strong>der</strong> weltweit e<strong>in</strong>gesetzt wird. Über dieses<br />
Telefonnetz ist es ebenfalls möglich Daten zu übertragen. Dabei gibt es zwei Ausprägungen:<br />
CSD benutzt direkt GSM-Technik und benötigt ke<strong>in</strong>e zusätzliche Infrastruktur. GPRS ist<br />
e<strong>in</strong>e Erweiterung des GSM Standards und benötigt zusätzliche Komponenten. Inzwischen<br />
s<strong>in</strong>d jedoch die meisten GSM-Netze auch GPRS-fähig.<br />
4.3.4 GPRS<br />
Der General Packet Radio Service (GPRS) benötigt ke<strong>in</strong>e eigene Infrastruktur, son<strong>der</strong>n<br />
ist lediglich e<strong>in</strong>e Erweiterung <strong>der</strong> bestehenden GSM-Netze. GPRS-Handys stellen für den<br />
schnellen Austausch <strong>der</strong> Datenpakete e<strong>in</strong>e dauerhafte Verb<strong>in</strong>dung zu e<strong>in</strong>em <strong>E<strong>in</strong></strong>wahlpunkt1 <strong>in</strong>s Netz her. Für die Datenkommunikation wird es Endgeräten erlaubt mehrere GSM-<br />
Kanäle zusammenzufassen und für die Kommunikation zu reservieren. Bandbreiten <strong>in</strong> Funknetzen<br />
haben immer e<strong>in</strong> Problem: Alle Nutzer e<strong>in</strong>er Zelle teilen sich e<strong>in</strong> geme<strong>in</strong>sames<br />
Medium. Wollen alle geme<strong>in</strong>sam zugreifen, s<strong>in</strong>kt für jeden e<strong>in</strong>zelnen die erreichbare Datenrate.<br />
Üblicherweise haben Sprachverb<strong>in</strong>dungen Vorrang, so dass die verfügbare Bandbreite<br />
je nach Auslastung e<strong>in</strong>er GSM-Zelle unterschiedlich ausfällt. Auch können verschiedene<br />
GPRS-Geräte, wie PCMCIA, Cardbus-Adapter o<strong>der</strong> Mobiltelefone mit entsprechen<strong>der</strong> Erweiterung<br />
unterschiedlich viele Kanäle gleichzeitig nutzen. In <strong>der</strong> <strong>E<strong>in</strong></strong>führungsphase von<br />
GPRS wurde netzseitig e<strong>in</strong>e Bandbreite von 53,6 kbit/s (4 Kanäle à 13,4 kbit/s) pro Funkzelle<br />
vorgesehen. Stehen alle acht Kanäle für GPRS zur Verfügung, würde die Bandbreite auf<br />
107,2 kbit/s steigen. Weitere Steigerungen durch bessere Fehlerprotokolle erlaubten theoretische<br />
171,2 kbit/s (8 Kanäle a 21,4 kbit/s). Handys arbeiten momentan mit 13,4 kbit/s<br />
pro Kanal. Sie können je nach Gerät zwei bis drei Kanäle zusammenfassen.<br />
Aktuelle Geräte unterstützen auch vier Kanäle und können damit auf e<strong>in</strong>e Bandbreite<br />
von 53,6 kbit/s kommen. Die Angaben beziehen sich jedoch meistens nur auf den Download-<br />
Kanal. Im Upload können Mobiltelefone oft nur e<strong>in</strong>en o<strong>der</strong> zwei Kanäle benutzen. Oft<br />
f<strong>in</strong>det man e<strong>in</strong>e Klassifizierung: So bedeutet Class 10, dass das Gerät vier Down- und zwei<br />
Upstreamkanäle nutzen kann. Class 8 deutet auf vier Down- aber nur e<strong>in</strong>en Upstream h<strong>in</strong>.<br />
GPRS selbst arbeitet schon mit starker Datenkompression. Deshalb kann <strong>der</strong> Endanwen<strong>der</strong><br />
auf e<strong>in</strong>e Kompression auf höheren Protokollschichten verzichten. GPRS verwendet zur<br />
Paketvermittlung gleich das Internet-Protokoll. Üblicherweise stellen die Mobilfunkanbieter<br />
ihren Datenkunden dabei e<strong>in</strong>e private <strong>Netzwerk</strong>adresse zur Verfügung. Die Aushandlung <strong>der</strong><br />
IP-Parameter übernimmt das von an<strong>der</strong>en Diensten wohlbekannte Po<strong>in</strong>t-to-Po<strong>in</strong>t-Protokoll<br />
1 APN = Acces Po<strong>in</strong>t Name
4.3. TELEFONNETZE 33<br />
(PPP). Jedes Datenpaket besitzt somit e<strong>in</strong>e e<strong>in</strong>deutige Empfängeradresse im Funknetz, um<br />
zu dem Endgerät zu gelangen. Hierfür ist es unerheblich, über welchen <strong>der</strong> Funkkanäle es<br />
übertragen wird.<br />
Wie beim GSM auch halten alle e<strong>in</strong>gebuchten GPRS-Teilnehmer permanent über Signalisierungskanäle<br />
Kontakt mit dem Netz. Der Teilnehmer ist über den Zeitraum <strong>der</strong> <strong>E<strong>in</strong></strong>buchung<br />
immer onl<strong>in</strong>e. Hierfür müssen die Kanäle nicht aufgebaut se<strong>in</strong>. Die notwendigen<br />
Kanäle werden erst zugeschaltet, wenn tatsächlich Daten abgerufen werden.<br />
Die <strong>E<strong>in</strong></strong>führung von GPRS erfolgte <strong>in</strong> Deutschland schrittweise ab dem Jahr 2000. GPRS<br />
wurde dabei technisch gesehen über das bestehende GSM-Netz gelegt. Wesentliche Teile <strong>der</strong><br />
GSM-Infrastruktur kommen auch für das GPRS-Netz zum <strong>E<strong>in</strong></strong>satz.<br />
4.3.5 HSCSD<br />
CSD (Circuit Switched Data) existiert seit Beg<strong>in</strong>n <strong>der</strong> GSM-Netze. Die Nutzdatenrate beschränkte<br />
sich auf maximal 9,6 kBit/s. In <strong>der</strong> GSM-Phase-2 wurde die Geschw<strong>in</strong>digkeit <strong>der</strong><br />
Datenübertragung auf 14,4 kBit/s erhöht, <strong>in</strong> <strong>der</strong> GSM-Phase-2+ die Bündelung mehrerer<br />
Kanäle ermöglicht.<br />
GPRS war nicht <strong>der</strong> e<strong>in</strong>zige Ansatz zur Erhöhung <strong>der</strong> möglichen Datenrate. HSCSD<br />
(High Speed Circuit Switched Data), <strong>der</strong> Nachfolger von CSD, erreicht e<strong>in</strong>e maximale Datentransferrate<br />
von 57,6 kbit/s. Der Unterschied zwischen den beiden Systemen liegt <strong>in</strong><br />
den verwendeten Protokollen und <strong>der</strong> Übertragungstechnik. Wie bei e<strong>in</strong>er Telefonleitung<br />
steht bei HSCSD jedem User e<strong>in</strong> dedizierter Nutzkanal exklusiv zur Verfügung. Das macht<br />
sich im Abrechnungsmodell bemerkbar: HSCSD-Anbieter offerieren dem Teilnehmer e<strong>in</strong>en<br />
zeitabhängigen Tarif, <strong>der</strong> unabhängig vom Datenvolumen ist. Die Zahl <strong>der</strong> gleichzeitig aktiven<br />
Teilnehmern ist nicht relevant und durch die maximale Zellkapazität beschränkt.<br />
E-Plus und Vodafone bieten <strong>in</strong> Deutschland HSCSD an. Die Preisgestaltung legt jedoch die<br />
Nutzung von GPRS für die gewohnte Internet-Nutzung nahe. HSCSD lohnt sich nur bei<br />
permanenten gleichmäßig hohen Datenraten.<br />
4.3.6 Mobilfunknetze <strong>der</strong> dritten Generation - UMTS<br />
H<strong>in</strong>ter <strong>der</strong> Abkürzung UTMS (Universal Mobile Telecommunications System) steckt <strong>der</strong><br />
1998 von <strong>der</strong> ETSI (Abkürzung für European Telecommunications Standard Institute) vorgestellte<br />
Breitband-Mobilfunkstandard <strong>der</strong> dritten Generation (G3). Die Weiterentwicklung<br />
und Pflege des Standards unterliegt <strong>in</strong>zwischen dem 3GPP (3rd Generation Partnership<br />
Project). Zu den wesentlichen Leistungsmerkmale von UMTS zählt die Übertragung von<br />
Sprache und Audiodaten, die Übermittlung von multimedialen Inhalten sowie <strong>der</strong> schnelle<br />
Zugriff auf das Internet. UMTS ermöglicht Datenübertragungsraten von 364 kbit/s bis zu<br />
2 Mbit/s, womit Stream<strong>in</strong>g Video und Audio Übertragung, sowie Bildtelefonie ermöglicht<br />
werden sollen.<br />
Diese Übertragungsraten erreicht UMTS durch den asynchronen Transfermodus kurz<br />
ATM-Verfahren im sogenannten Codemultiplexverfahren. Als Funk-Technologie kommt Wideband<br />
CDMA (WCDMA) im Frequenzbereich um die 2GHz zum <strong>E<strong>in</strong></strong>satz. UMTS-Hotspots<br />
existieren bereits <strong>in</strong> Ballungszentren und Großstädten. Ob e<strong>in</strong>e flächendeckende <strong>E<strong>in</strong></strong>führung<br />
stattf<strong>in</strong>det, muss abgewartet werden. Nicht mehr alle Bieter um die Lizenzen im Jahr 2000<br />
s<strong>in</strong>d am Start und die Aktivitäten <strong>der</strong> verbliebenen s<strong>in</strong>d von Zurückhaltung gekennzeichnet.
34 KAPITEL 4. WAN HARDWARE<br />
4.4 ISDN<br />
Meistens wird ISDN für e<strong>in</strong>en Zugang zum Internet verwendet; es ist für <strong>in</strong>terne Vernetzungen<br />
fast nur im Bereich <strong>der</strong> WAN’s (Wide Area Networks) anzutreffen. ISDN wird üblicherweise<br />
von Telefongesellschaften zur Sprachkommunikation angeboten und f<strong>in</strong>det sich auch<br />
im Umfeld grösserer Firmentelefonanlagen. Die Primärbandbreite beträgt 64 kbit, welches<br />
von <strong>der</strong> digitalen Sprachvermittlung herrührt. Verwendet wird PCM (Pulse Code Modulation),<br />
welche 8000 Samples von 8 bit Grösse pro Sekunde erzeugt.<br />
Oft f<strong>in</strong>det man passive ISDN-Karten im Computer, die nur e<strong>in</strong>en e<strong>in</strong>fachen Wandler<br />
des digitalen Datenstroms <strong>der</strong> ISDN-Verb<strong>in</strong>dung zum Rechnerbus vornehmen. Für den<br />
jeweiligen Adapter muss e<strong>in</strong>e Treiberunterstützung im L<strong>in</strong>ux-Kernel vorhanden se<strong>in</strong>, damit<br />
er benutzt werden kann. Zur Ansprache als <strong>Netzwerk</strong>-Interface stehen bei erfolgreicher<br />
Konfiguration die Po<strong>in</strong>t-to-Po<strong>in</strong>t (PPP) Interfaces ippp0 und folgende zur Verfügung. Diese<br />
können sodann mit den klassischen <strong>Netzwerk</strong>tools e<strong>in</strong>gerichtet und gesteuert werden.<br />
4.5 Modem<br />
<strong>E<strong>in</strong></strong> ”Modem” empfängt Daten von <strong>der</strong> seriellen Schnittstelle und verschickt sie über die<br />
Telefonleitung o<strong>der</strong> Zweidraht-Standleitung. Externe Modems werden zwischen seriellero<strong>der</strong><br />
USB-Schnittstelle und Telefon geschaltet. Interne Modems (PC-<strong>E<strong>in</strong></strong>schubkarte) besitzen<br />
eigene serielle Schnittstellen. Die Datenrate ist durch die Eigenschaften <strong>der</strong> analogen<br />
Telefonleitung beschränkt und liegt zur Zeit höchstens bei 56 kbit.<br />
Modems waren sehr lange Zeit traditionell über die serielle Schnittstelle an Computer<br />
o<strong>der</strong> entsprechende Geräte angeschlossen. Unter L<strong>in</strong>ux erfolgt <strong>der</strong> Zugriff auf diese Schnittstellen<br />
über Device-Dateien vom Type Character-Device im Verzeichnis /dev. Die Schnittstellen<br />
werden dabei durchnummeriert mit ttyS0 bis ttySn. Das <strong>Netzwerk</strong><strong>in</strong>terface ist dabei<br />
nicht mit <strong>der</strong> Device-Datei gleichzusetzen, son<strong>der</strong>n hängt von <strong>der</strong> Art <strong>der</strong> Verb<strong>in</strong>dung ab:<br />
Bei PPP-Verb<strong>in</strong>dungen handelt es sich dann um e<strong>in</strong> Interface mit <strong>der</strong> Bezeichnung ppp0<br />
o<strong>der</strong> folgende, welches mit den Standardwerkzeugen für <strong>Netzwerk</strong><strong>in</strong>terfaces aufgesetzt und<br />
ausgelesen werden kann.<br />
Handelt es sich um e<strong>in</strong> USB-Modem, wird es nicht mehr über e<strong>in</strong>e Device-Datei vom<br />
Typ ttySn, son<strong>der</strong>n über e<strong>in</strong>e entsprechende USB-Device-Datei angesprochen. Auch hier<br />
sieht man den typischen schichtenweisen Aufbau von Protokollen: Die Geräte auf unterster<br />
Ebene können sich unterscheiden, das <strong>Netzwerk</strong>-Interface bleibt weiterh<strong>in</strong> identisch: ppp0<br />
und entsprechende.<br />
4.6 ADSL<br />
Die Grenzen <strong>der</strong> Übertragungskapazität <strong>der</strong> analogen Telefonleitungen s<strong>in</strong>d durch das Nyquistund<br />
das Shannon-Theorem beschrieben. Das Nyquist-Theorem besagt, dass die Schrittgeschw<strong>in</strong>digkeit<br />
bei <strong>der</strong> verzerrungsfreien Übertragung von Impulsen maximal doppelt so groß<br />
se<strong>in</strong> darf wie die Bandbreite des benutzten<br />
Übertragungskanals. Das Shannon-Theorem<br />
zeigt Zusammenhänge zwischen <strong>der</strong> verfügbaren Bandbreite - dem Verhältnis zwischen<br />
Signal- und Rauschpegel - und <strong>der</strong> maximal möglichen Anzahl übertragbarer Bits pro Sekunde.<br />
Beim <strong>der</strong>zeitigen analogen Telefonnetz ist die Bandbreite auf 4kHz beschränkt und<br />
das Signal-/Rauschverhältnis liegt bei 30 bis 35 dB. Daraus resultiert e<strong>in</strong>e Übertragungsrate<br />
von maximal 35 kBit/s (für Modems!)
4.6. ADSL 35<br />
4.6.1 Designüberlegungen<br />
Allerd<strong>in</strong>gs ist das Erreichen <strong>der</strong> maximalen Übertragungsgeschw<strong>in</strong>digkeit von verschiedenen<br />
Faktoren abhängig: Insbeson<strong>der</strong>e die Länge und <strong>der</strong> Querschnitt des Kupferkabels, sowie<br />
die Dämpfung begrenzen die theoretisch möglichen Transferraten. In <strong>der</strong> <strong>Praxis</strong> bedeutet<br />
das für Anwen<strong>der</strong>, <strong>der</strong>en Hausanschluß weit von <strong>der</strong> nächsten Vermittlungsstelle entfernt<br />
liegt, Tranferraten im unteren Bereich.<br />
ADSL basiert technisch auf <strong>der</strong> Trennung des nutzbaren Frequenzspektrums <strong>in</strong> drei<br />
Kanäle. Hierbei f<strong>in</strong>den zwei unterschiedliche Verfahren Verwendung: Frequency Division<br />
Multiplex<strong>in</strong>g o<strong>der</strong> Echo Cancellation (EC). EC spielt jedoch e<strong>in</strong>e eher untergeordnete Rolle.<br />
Grund dafür ist, dass im Gegensatz zu FDM die Kanäle für Up- und Downstream nicht<br />
komplett getrennt, son<strong>der</strong>n überlagert werden. Dies erhöht den technischen Aufwand zur<br />
Signaltrennung wesentlich und verteuert die Endgeräte.<br />
FDM h<strong>in</strong>gegen erzeugt e<strong>in</strong>en schmalbandigen Frequenzbereich, <strong>der</strong> direkt oberhalb <strong>der</strong><br />
Sprachfrequenzen angesiedelt ist. Der breitbandige Downstream-Bereich schließt direkt an<br />
den Upstream-Bereich an. Frequency Division Multiplex<strong>in</strong>g beziehungsweise Echo Cancellation<br />
sorgen lediglich für die Trennung des Frequenzspektrums <strong>in</strong> entsprechende Kanäle,<br />
schaffen also nur die Grundlage für den eigentlichen Datentransfer. Dieser kann wie<strong>der</strong>um<br />
durch verschiedene Übertragungsmethoden realisiert werden. Auch hier läßt die ADSL-<br />
Spezifikation - die <strong>in</strong> Händen von ANSI (American National Standards Institute) und ETSI<br />
(European Telecommunications Standards Institute) liegt - verschiedene Methoden zu. Daher<br />
kommen <strong>der</strong>zeit <strong>in</strong> <strong>der</strong> <strong>Praxis</strong> drei Modulationsverfahren zum <strong>E<strong>in</strong></strong>satz, die zue<strong>in</strong>an<strong>der</strong><br />
<strong>in</strong>kompatibel s<strong>in</strong>d. Ähnlich wie anfangs bei <strong>der</strong> 56 k-Technik kann es also dem Anwen<strong>der</strong><br />
passieren, dass e<strong>in</strong>e Kommunikation trotz gleicher Basistechnologie scheitert. Im folgeden<br />
Kapitel werden verschiedene Übertragungsverfahren beschrieben.<br />
4.6.2 Übertragungsmethoden<br />
4.6.2.1 QAM<br />
Quadrature Amplitude Modulation versetzt die Signale e<strong>in</strong>fach <strong>in</strong> e<strong>in</strong>en höheren Frequenzbereich<br />
versetzt. Dies wird durch Modulation e<strong>in</strong>es Basisbandsignals mit e<strong>in</strong>em Trägersignal<br />
erreicht, wobei die Amplitude moduliert wird.<br />
QAM ist e<strong>in</strong> sogenanntes <strong>E<strong>in</strong></strong>träger-Bandpaßübertragungsverfahren, das e<strong>in</strong> Trägersignal<br />
mit e<strong>in</strong>em Symbolstrom moduliert. Bei diesem Verfahren wird <strong>der</strong> Datenstrom <strong>in</strong><br />
zwei e<strong>in</strong>zelne Ströme mit halber Übertragungsrate aufgespaltet und anschließend mit e<strong>in</strong>em<br />
Trägerpaar aufmoduliert. Bei den orthogonalen Trägern handelt es sich um e<strong>in</strong>e S<strong>in</strong>usund<br />
e<strong>in</strong>e Kos<strong>in</strong>usfunktion.<br />
Der Sen<strong>der</strong> be<strong>in</strong>haltet e<strong>in</strong>en Scrambler (Chiffrierer), e<strong>in</strong>en Leitungskodierer, e<strong>in</strong>en Sendefilter,<br />
e<strong>in</strong>en Modulator und e<strong>in</strong>en D/A- Wandler. Das Signal wird <strong>in</strong> e<strong>in</strong>em Demultiplexer<br />
<strong>in</strong> zwei Teilsignale aufgeteilt. Diese Teilsignale durchlaufen anschließend die Leitungscodierer,<br />
die e<strong>in</strong>e Bit-nach-Symbol-Kodierung ähnlich wie bei <strong>der</strong> 56 kbit-Technologie vornehmen.<br />
Anschließend werden die kodierten Signale im Modulator mit e<strong>in</strong>er def<strong>in</strong>ierten Frequenz<br />
(f0) multipliziert. Das e<strong>in</strong>e Signal wird mit e<strong>in</strong>em Kos<strong>in</strong>us, das an<strong>der</strong>e mit e<strong>in</strong>em S<strong>in</strong>us<br />
moduliert. Anschließend erfolgt die Addition sowie e<strong>in</strong>e D/A-Wandlung. <strong>E<strong>in</strong></strong> Sendefilter<br />
schließlich br<strong>in</strong>gt das Signal auf die Leitung.<br />
Auf <strong>der</strong> Empfängerseite passiert ähnliches: Das Signal wird zunächst <strong>in</strong> e<strong>in</strong>em Empfangsfilter<br />
bandbegrenzt und nach e<strong>in</strong>er A/D-Wandlung mit e<strong>in</strong>em Kos<strong>in</strong>us- beziehungsweise<br />
S<strong>in</strong>usträger gleicher Frequenz wie beim Sen<strong>der</strong> multipliziert. <strong>E<strong>in</strong></strong> nachfolgen<strong>der</strong> Entzerrer<br />
macht eventuell bei <strong>der</strong> Übertragung aufgetretene Verzerrungen des Leiterpaares
36 KAPITEL 4. WAN HARDWARE<br />
rückgängig und filtert die Frequenzanteile (f0) heraus. Danach liegt wie<strong>der</strong> das ursprüngliche<br />
Basisbandsignal vor. Dieses wird für das jeweilige Signal getrennt dekodiert, um die<br />
Teilsignale schließlich <strong>in</strong> e<strong>in</strong>em Multiplexer (zur Serialisierung <strong>der</strong> Signale) zusammenzufassen.<br />
4.6.2.2 CAP<br />
(Carrierless Amplitude/Phase Modulation) Grundlage von CAP ist e<strong>in</strong>e trägerlose Amplituden/<br />
Phasenmodulation. <strong>E<strong>in</strong></strong> e<strong>in</strong>ziges Trägersignal dient als Transportmittel, das selbst<br />
we<strong>der</strong> übertragen wird, noch eigene Informationen be<strong>in</strong>haltet.<br />
Auch CAP zählt zu den <strong>E<strong>in</strong></strong>träger-Bandpaßübertragungsverfahren. Schon die Bezeichnung<br />
des Modulationsverfahren deutet se<strong>in</strong>e Beson<strong>der</strong>heit an: Es wird e<strong>in</strong>e trägerlose Amplituden/<br />
Phasenmodulation durchgeführt, wobei e<strong>in</strong> technischer Kniff die Übertragung <strong>der</strong><br />
Trägerfrequenz verh<strong>in</strong><strong>der</strong>t. Zusätzlicher Unterschied zu QAM: Modulation und Demodulation<br />
erfolgen beim Sen<strong>der</strong> und Empfänger über digitale Filter.<br />
Die Grafik verdeutlicht die Arbeitsweise <strong>der</strong> CAP. An die Stelle <strong>der</strong> orthogonalen Trägerfunktionen<br />
von QAM treten digitale Filter, um die Teilströme zu modulieren. Das zu übertragende<br />
Signal wird e<strong>in</strong>fach durch Addition <strong>der</strong> beiden Filterausgaben gebildet.<br />
Nachdem das Signal e<strong>in</strong>e D/A-Wandlung erfahren hat und den Sendefilter passiert hat,<br />
wird es auf die Leitung gelegt.<br />
4.6.2.3 DTM<br />
(Discrete Multi-Tone Modulation) beschreibt e<strong>in</strong> Verfahren, bei dem mehrere Trägersignale<br />
für die Übermittlung e<strong>in</strong>gesetzt werden. Die übermittelten Daten verteilen sich also auf e<strong>in</strong>e<br />
Vielzahl von Trägern, die alle e<strong>in</strong>e Form <strong>der</strong> Quadrature Amplitude Modulation (QAM)<br />
e<strong>in</strong>setzen. DMT basiert auf <strong>der</strong> Discrete-Fast-Fourier-Transformation, die aus <strong>der</strong> digitalen<br />
Technik stammt.<br />
Im Unterschied zu CAP und QAM zählt Discrete-Multi-Tone-Modulation zu den sogenannten<br />
Mehrträger-Bandpaßübertragungsverfahren. Dieses Verfahren f<strong>in</strong>det bei den Herstellern<br />
<strong>der</strong>zeit breite Unterstützung. Zur Umsetzung wird <strong>der</strong> gesamte Übertragungskanal<br />
<strong>in</strong> mehrere Teilkanäle unterteilt, die - theoretisch - die gleiche Bandbreite aufweisen. Im<br />
e<strong>in</strong>fachsten Fall f<strong>in</strong>det bei jedem dieser Teilkanäle das gleiche Modulationsschema Verwendung.<br />
Die Übertragungsrate ist daher identisch. Allerd<strong>in</strong>gs hat dies e<strong>in</strong>en entscheidenden<br />
Nachteil gegenüber den zuvor beschriebenen Modulationsmethoden: Wenn Teilkanäle <strong>in</strong><br />
hohen Frequenzbereichen liegen, so schlagen sich die schlechten Übertragungseigenschaften<br />
von Kupfer auf den Datentransfer nie<strong>der</strong>. Daher legen die Hersteller die Bitrate des jeweiligen<br />
Teilkanals entsprechend se<strong>in</strong>er Störanfälligkeit fest. Nur so ist e<strong>in</strong>e optimale Nutzung<br />
des Übertragungsmediums Kupfer möglich.<br />
DMT läßt sich im Pr<strong>in</strong>zip als e<strong>in</strong>e Reihe von parallel arbeitenden QAM-Systemen verstehen.<br />
Dabei verwendet jedes QAM-System die zu e<strong>in</strong>em DMT-Teilkanal korrespondierende<br />
Trägerfrequenz. Der Transmitter moduliert Daten, <strong>in</strong>dem er Töne bestimmter Frequenzen<br />
erzeugt, diese zusammenfaßt und schließlich über die Leitung schickt.<br />
4.6.3 Vorteile <strong>der</strong> neuen Technik<br />
Bei h<strong>in</strong>reichend kle<strong>in</strong>er Teilkanalbandbreite ist die Dämpfung für jeden e<strong>in</strong>zelnen Teilkanal<br />
nahezu konstant. <strong>E<strong>in</strong></strong> weiterer Vorzug dieser Technik: Beim Empfänger entfällt <strong>der</strong> Entzerrer.<br />
Es reicht e<strong>in</strong> e<strong>in</strong>facher Kanalverstärker, da <strong>der</strong> <strong>E<strong>in</strong></strong>fluß <strong>der</strong> nichtl<strong>in</strong>earen Phase des
4.7. ATM 37<br />
Kabels auf das übertragene Signal <strong>in</strong> e<strong>in</strong>em Teilkanal vernachlässigbar ist. Damit ist die<br />
Herstellung <strong>der</strong>artiger ADSL-Modems relativ preiswert.<br />
Allerd<strong>in</strong>gs setzt e<strong>in</strong> Mehrträger-Modulationsverfahren Orthogonalität zwischen den verschiedenen<br />
Teilkanälen voraus. Dies kann man beispielsweise durch die Verwendung von<br />
Fast-Fourier-Transformation-Methoden erreichen. Der Aufbau e<strong>in</strong>es DMT-ADSL-Transceivers<br />
entspricht im wesentlichen dem e<strong>in</strong>es CAP-ADSL-Gerätes.<br />
Wie bereits erwähnt, kann die Anzahl <strong>der</strong> Bits, die über e<strong>in</strong>en Teilkanal gesendet werden,<br />
bei DMT variieren. Daraus ergibt sich e<strong>in</strong>e verbesserte Performance, da störanfällige Frequenzen<br />
außen vor bleiben. Die mögliche Übertragungsrate beim Upstream-Kanal erhöht<br />
sich dabei auf 256 kBit/s.<br />
4.6.4 Benutzung unter L<strong>in</strong>ux<br />
Klassischerweise verfügen ADSL-Geräte beim Endnutzer über Ethernet- o<strong>der</strong> ATM-Schnittstellen,<br />
wobei üblicherweise nur erstere benutzt werden (können). ADSL stellt die Grundlage<br />
für das Tunneln von Ethernetframes bereit. Damit e<strong>in</strong>e benutzerbasierte Authentifizierung<br />
erfolgen kann - die Ethernet selbst nicht bereitstellt - wird e<strong>in</strong> spezielles Protokoll, das<br />
PPPoE 2 , e<strong>in</strong>gesetzt.<br />
L<strong>in</strong>ux kommuniziert auf dem unteren, dem Ethernet-Layer, klassischerweise über die<br />
e<strong>in</strong>gebaute Ethernet-<strong>Netzwerk</strong>karte. Diese sollte vom Kernel treiberseitig unterstützt se<strong>in</strong>,<br />
womit e<strong>in</strong> <strong>Netzwerk</strong>-Interface vom Typ eth0 und folgende (für weitere <strong>Netzwerk</strong>karten)<br />
zur Verfügung steht. Darüberh<strong>in</strong>aus wird e<strong>in</strong> Software-Treiber benötigt, <strong>der</strong> das PPPoE-<br />
Protokoll zur Verfügung stellt. Als <strong>Netzwerk</strong>-Interface steht anschließend e<strong>in</strong>es vom Typ<br />
ppp0 (und weitere) zur Verfügung. Damit wird über das broadcastfähige Medium “Ethernet”<br />
e<strong>in</strong>e Punkt-zu-Punkt-Verb<strong>in</strong>dung zwischen zwei Rechnern aufgebaut.<br />
4.7 ATM<br />
Unter <strong>der</strong> Zielsetzung, die Grundlagen für e<strong>in</strong>e weltweit e<strong>in</strong>heitliche Netz-Architektur zu<br />
schaffen, veröffentlichte die ITU 1984 die erste Empfehlung zum Schmalband-ISDN, kurz<br />
ISDN. Nachdem als Implementierungsversuch des Breitband-ISDN (B-ISDN) zu dieser Zeit<br />
auch STM <strong>in</strong> Erwägung gezogen wurde, entschied sich die ITU 1987 für den Asynchronous<br />
Transfer Mode (ATM). Die ersten Empfehlungen hierzu wurden <strong>in</strong> den Jahren 1990/91<br />
veröffentlicht.<br />
Neben <strong>der</strong> ITU kam es im September 1991 zur Gründung e<strong>in</strong>es weiteren Gremiums,<br />
welches sich ausschließlich mit <strong>der</strong> Standardisierung von ATM befaßt, dem ATM-Forum.<br />
Gegründet von CISCO-Systems, NET/adaptive, Northern Telekom und US-Spr<strong>in</strong>t, gehören<br />
dem ATM-Forum <strong>in</strong>zwischen mehrere hun<strong>der</strong>t Mitglie<strong>der</strong> an.<br />
Ziel des ATM-Forums ist e<strong>in</strong> zügiges Voranbr<strong>in</strong>gen des Standards ATM <strong>in</strong> enger Zusammenarbeit<br />
mit <strong>der</strong> ITU und <strong>der</strong> Industrie. Bei <strong>der</strong> Normierung früherer Standards war<br />
es aufgrund des langwierigen Normierungsprozesses oft zu e<strong>in</strong>em Ause<strong>in</strong>an<strong>der</strong>driften von<br />
ITU-Norm und von <strong>der</strong> Industrie entwickelten Quasistandards gekommen.<br />
Wie auch an<strong>der</strong>e Übertragungsverfahren basiert ATM grundsätzlich auf e<strong>in</strong>er Paketübertragungstechnik.<br />
Hierbei s<strong>in</strong>d jedoch folgende wesentliche Än<strong>der</strong>ungen bzw. Ergänzungen<br />
zu bisherigen Paketvermittlungsverfahren festzuhalten:<br />
2 PPP über Ethernet: PPP-Pakete werden als Ethernetframes geschickt, welche selbst wie<strong>der</strong>um über<br />
den ADSL-Layer laufen. Damit erfolgt <strong>in</strong> den beiden unteren Schichten des OSI-Modells nochmals e<strong>in</strong>e<br />
Unterglie<strong>der</strong>ung.
38 KAPITEL 4. WAN HARDWARE<br />
• Feste Paketlänge: ATM nutzt zur Übertragung ausschließlich Pakete mit e<strong>in</strong>er festen<br />
Länge von 53 Bytes. Diese kle<strong>in</strong>ste unteilbare Übertragungse<strong>in</strong>heit wird daher ATM-<br />
Zelle genannt.<br />
• Qualitätsparameter <strong>der</strong> Verb<strong>in</strong>dung: ATM unterstützt QoS. Die hierzu notwendigen<br />
Parameter und Betriebsmittel werden beim Aufbau e<strong>in</strong>er Verb<strong>in</strong>dung festgelegt bzw.<br />
zugewiesen.<br />
• Verb<strong>in</strong>dungsorientierte Betriebsweise: ATM agiert grundsätzlich verb<strong>in</strong>dungsorientiert.<br />
Die Umsetzung verb<strong>in</strong>dungsloser Dienste höherer Schichten ist vorgesehen.<br />
• Verzicht auf e<strong>in</strong>e abschnittsweise Fehlersicherung: Die sehr ger<strong>in</strong>gen Bitfehlerwahrsche<strong>in</strong>lichkeiten<br />
heutiger Lichtwellenleiter ermöglichen den Verzicht auf e<strong>in</strong>e abschnittsweise<br />
Fehlersicherung zugunsten e<strong>in</strong>er höheren Übertragungsrate.<br />
• Verzicht auf e<strong>in</strong>e abschnittsweise Flußsteuerung: Aufgrund <strong>der</strong> hohen Übertragungsund<br />
Verarbeitungsgeschw<strong>in</strong>digkeiten ist e<strong>in</strong>e abschnittsweise Flußsteuerung nicht möglich.<br />
• Außenband-Signalisierung: Wie im Schmalband-ISDN wird die Signalisierung durch<br />
Nutzung separater Signalisierungskanäle vom Nutzdatenstrom entkoppelt.<br />
4.7.1 Die ATM-Zelle<br />
Die ATM-Zelle ist e<strong>in</strong>e starre <strong>E<strong>in</strong></strong>heit von 53 Bytes. Sie besteht aus e<strong>in</strong>en 5Bytes langen<br />
Hea<strong>der</strong> sowie 48 Bytes Nutz<strong>in</strong>formation (Payload). Es wird zwischen zwei Arten von<br />
ATM-Zellen unterschieden, die sich <strong>in</strong> <strong>der</strong> Belegung <strong>der</strong> Bits 5-8 des ersten Hea<strong>der</strong>bytes<br />
unterscheiden:<br />
0 1 2 3 4 5 6 7 8 Bit<br />
Flow Control (GFC)<br />
Channel Identifier<br />
Channel Identifier (VCI)<br />
Path Identifier (VPI)<br />
Path Identifier PT CLP<br />
HEADER CHECKSUM (CRC)<br />
Hea<strong>der</strong> e<strong>in</strong>er User Network Interface Zelle<br />
Abbildung 4.1: User-Network-Interface Zelle<br />
UNI-Zellen Die User-Network-Interface-Zellen dienen zur Kommunikation zwischen<br />
Nutzer- und Benutzer-<strong>Netzwerk</strong>-Schnittstelle (User-Network-Interface, UNI). Der Hea<strong>der</strong><br />
<strong>der</strong> UNI-Zelle unterteilt sich <strong>in</strong> sechs Elemente, die <strong>in</strong> <strong>der</strong> Abbildung dargestellt s<strong>in</strong>d. Das<br />
Feld GFC (Generic Flow Control) dient <strong>der</strong> direkten Zugriffssteuerung auf e<strong>in</strong> Übertragungsmedium.<br />
Es ist daher nur im Bereich lokaler ATM-Netze von Relevanz und wird von ATM-<br />
Vermittlungsstellen und Cross-Connects am NNI-Interface überschrieben. <strong>E<strong>in</strong></strong>e Standardisierung<br />
zur Nutzung des GFC Feldes steht bislang aus.
4.7. ATM 39<br />
Zur Adressierung stehen die Fel<strong>der</strong> VPI (Virtual Path Identifier) und VCI (Virtual<br />
Channel Identifier) zur Verfügung. Sie werden im Abschnitt weiter betrachtet.<br />
Anhand des Feldes PT (Payload Type) wird zwischen Benutzerzellen und OAM-Zellen<br />
(Operation and Ma<strong>in</strong>tenance) unterschieden. Der Standardwert ist 000. Die Funktion <strong>der</strong><br />
OAM-Zellen liegt <strong>in</strong> <strong>der</strong> Überwachung des Systems. Sie ermöglichen die Aufdeckung und<br />
Behebung von Fehlfunktionen auf allen ATM-Ebenen.<br />
PT-Feld Bedeutung<br />
000 Benutzerzelle, ke<strong>in</strong>e Überlast festgestellt, SDU-Type=0<br />
001 Benutzerzelle, ke<strong>in</strong>e Überlast festgestellt, SDU-Type=1<br />
010 Benutzerzelle, Überlast festgestellt, SDU-Type=0<br />
011 Benutzerzelle, Überlast festgestellt, SDU-Type=1<br />
100 Segment-OAM-F5-Zelle<br />
101 End-to-End-OAM-F5-Zelle<br />
110 Reserviert für zukünftiges Lastmanagement<br />
111 Reserviert für zukünftigen Gebrauch<br />
Tabelle 4.4: Mögliche Nutzlasttypen von ATM<br />
Das Feld CLP (Cell Loss Priority) def<strong>in</strong>iert die Priorität e<strong>in</strong>er Zelle. Bei auftreten<strong>der</strong><br />
Überlast an <strong>Netzwerk</strong>schnittstellen werden Zellen mit niedriger Priorität (CLP=1) zuerst<br />
verworfen. <strong>E<strong>in</strong></strong>e Priorisierung bzw. Markierung von Zellen erfolgt, wenn die sie erzeugende<br />
Anwendung Resourcen <strong>in</strong> höherem Maße belegt, als ihr zugeordnet wurde. Verworfen werden<br />
also erst die Zellen, die außerhalb ihrer QoS-Parameter generiert wurden, bzw. Zellen <strong>der</strong>en<br />
Priorität bereits bei ihrer Generierung auf 1 gesetzt wurde.<br />
Die letzten 8 Bits werden durch das Feld CRC (Cyclic Redundancy Checksum) belegt.<br />
Bei <strong>der</strong> Bildung <strong>der</strong> Prüfsumme werden dabei nur die 32 Bits des Zellhea<strong>der</strong>s (ohne CRC-<br />
Feld) berücksichtigt. Die Bildung e<strong>in</strong>er Hea<strong>der</strong>prüfsumme ist s<strong>in</strong>nvoll, da sich die Informationen<br />
des Hea<strong>der</strong>s an jedem NNI, den die Zelle passiert, än<strong>der</strong>n kann, die Nutz<strong>in</strong>formation<br />
jedoch erhalten bleibt.<br />
NNI-Zellen Die Network-Node-Interface-Zellen werden entsprechend zur Kommunikation<br />
zwischen den e<strong>in</strong>zelnen Knoten des ATM-<strong>Netzwerk</strong>s genutzt (Network-Node-Interface,<br />
NNI).<br />
0 1 2 3 4 5 6 7 8 Bit<br />
Channel Identifier (VCI)<br />
Channel Identifier Path Identifier<br />
Path Identifier (VPI)<br />
Path Identifier PT CLP<br />
HEADER CHECKSUM (CRC)<br />
Hea<strong>der</strong> e<strong>in</strong>er Network Node Interface Zelle<br />
Abbildung 4.2: Network-Node-Interface Zelle
40 KAPITEL 4. WAN HARDWARE<br />
Im Vergleich mit dem UNI-Hea<strong>der</strong> ist das VPI-Feld des NNI-Hea<strong>der</strong>s um 4 Bit verlängert.<br />
Dies trägt <strong>der</strong> pfadorientierten Wegelenkung (Rout<strong>in</strong>g) <strong>in</strong> ATM-Weitverkehrsnetzen Rechnung,<br />
sowie <strong>der</strong> Tatsache, daß hier e<strong>in</strong>e direkte Zugriffskontrolle auf das Übertragungsmedium<br />
nicht benötigt wird.<br />
4.8 FDDI<br />
Für Backboneverb<strong>in</strong>dungen <strong>in</strong> grossen LAN’s kam bis zum Ende <strong>der</strong> 90er Jahre üblicherweise<br />
FDDI (Fiber Distributed Data Interface) zum <strong>E<strong>in</strong></strong>satz. FDDI erlaubt maximale Kabellängen<br />
von bis zu 200km, die maximale Geschw<strong>in</strong>digkeit von 100 Mbit ist jedoch <strong>der</strong><br />
Grund, weshalb FDDI nicht mehr e<strong>in</strong>gesetzt wird.<br />
FDDI verwendet e<strong>in</strong>en an<strong>der</strong>en Ansatz bei <strong>der</strong> Datenübertragung, bei dem e<strong>in</strong>e Reihe<br />
sogenannter Tokens ausgesandt werden. <strong>E<strong>in</strong></strong>e Station darf nur dann e<strong>in</strong> Paket übertragen,<br />
wenn sie e<strong>in</strong>es dieser Tokens auffangen konnte. Somit entfällt wie bei TokenR<strong>in</strong>g das Problem<br />
<strong>der</strong> Paketkollisionen.<br />
4.9 Mobilfunknetze<br />
Das Interesse an “Internet überall” hat mit <strong>der</strong> Vielzahl mobiler Endgeräte deutlich zugenommen.<br />
Laptops und PDAs s<strong>in</strong>d ke<strong>in</strong>e Seltenheit mehr, son<strong>der</strong>n <strong>in</strong>zwischen die Grundausstattung<br />
<strong>der</strong> verschiedenen Datennomaden. Die Nahfunktechniken nach dem 802.11 Standard<br />
beherrschen dabei das Feld. Daher s<strong>in</strong>d die meisten Geräte dafür schon werksseitig<br />
mit e<strong>in</strong>em entsprechenden <strong>Netzwerk</strong>adapter ausgestattet. Diese schöne neue Welt dieser<br />
Netze weist jedoch noch gravierende Löcher <strong>in</strong> <strong>der</strong> Abdeckung auf, so dass schnell nicht<br />
mehr von e<strong>in</strong>em wirklich mobilen Internetzugang gesprochen werden kann. Es gibt zwar<br />
e<strong>in</strong>e wachsende Zahl von Hotspots, lei<strong>der</strong> jedoch auch e<strong>in</strong>e wachsende Anzahl durchaus<br />
unterschiedlicher Zugangsproce<strong>der</strong>es. Wenn auch an vielen Stellen noch offene WLANs zu<br />
f<strong>in</strong>den s<strong>in</strong>d, so ist die Benutzung e<strong>in</strong>es solchen Zugangs ohne <strong>E<strong>in</strong></strong>verständnis des Betreibers<br />
nicht unbed<strong>in</strong>gt legal.<br />
Obwohl schon seit e<strong>in</strong>igen Jahren am Start erhielten die Datendienste über die Mobilfunknetze<br />
erst mit <strong>der</strong> <strong>E<strong>in</strong></strong>führung von UMTS wie<strong>der</strong> größere Aufmerksamkeit. Mobilfunknetze<br />
decken zu fast 100% das Land ab und erlauben damit fast überall und je<strong>der</strong>zeit onl<strong>in</strong>e zu<br />
gehen.<br />
4.9.1 GSM, HSCSD, GPRS und UMTS<br />
Es gibt <strong>in</strong>zwischen e<strong>in</strong>e ganze Reihe von Methoden Daten <strong>in</strong> Mobilfunknetzen zu transportieren.<br />
GPRS (General Packet Radio Service ist sicherlich das <strong>in</strong>zwischen verbreiteste<br />
Verfahren und wird von allen Mobilfunkbetreibern fast überall angeboten. Es arbeitet mit<br />
zeitunabhängigen Volumentarifen. GPRS kommt nicht nur beim Internet-Zugriff via PC<br />
zum <strong>E<strong>in</strong></strong>satz, son<strong>der</strong>n versendet auch MMS (Multimedia Message und wird zum Transport<br />
von WAP-Inhalten e<strong>in</strong>gesetzt.<br />
Darüberh<strong>in</strong>aus gibt es HSCSD. Dieses belegt für die Onl<strong>in</strong>e-Zeit e<strong>in</strong>en GSM-Mobilfunkkanal<br />
und wird daher zeitbezogen abgerechnet. HSCSD ist bei weitem nicht so verbreitet<br />
wie <strong>in</strong>zwischen GPRS. Die Zukunft liegt sicherlich erstmal <strong>in</strong> UMTS. Wenn auch die Anbieter<br />
immer noch nach e<strong>in</strong>er ”Killerapplikation” suchen, um von den Kunden das Geld<br />
für die Lizenz wie<strong>der</strong> e<strong>in</strong>zusammeln, so ist jetzt schon für den Internet-Zugriff e<strong>in</strong>e ernstzunehmende<br />
Alternative. Die erreichbaren Geschw<strong>in</strong>digkeiten, so e<strong>in</strong>e Zelle verfügbar und
4.10. NETZWERKADAPTER FÜR MOBILFUNKNETZE 41<br />
nicht ausgelastet ist, liegen bei 384 kbit/s. Das ist deutlich mehr als die ca. 55 kbit/s mittels<br />
GPRS o<strong>der</strong> HSCSD. Da UMTS bei weitem nicht die Abdeckung von GSM erreicht,<br />
ist e<strong>in</strong> Fallback auf GPRS vorgesehen. Daraus resultieren oft identische Volumentarife für<br />
GPRS und UMTS. Die entsprechenden <strong>Netzwerk</strong>adapter für UMTS beherrschen daher beide<br />
Übertragungsverfahren.<br />
4.10 <strong>Netzwerk</strong>adapter für Mobilfunknetze<br />
Wie für jedes an<strong>der</strong>e <strong>Netzwerk</strong> auch, benötigt man e<strong>in</strong>en passenden <strong>Netzwerk</strong>adapter. Der<br />
Adapter für Mobilfunknetze kommt üblicherweise als PCMCIA- o<strong>der</strong> Cardbus-Karte daher.<br />
Alle neueren Mobiltelefone br<strong>in</strong>gen GPRS-Unterstützung mit und kommen ebenfalls als<br />
Zugangshardware <strong>in</strong> Frage. Vielfach wird dieser Adapter auch als ”Modem” bezeichnet,<br />
da es sich um e<strong>in</strong>en <strong>Netzwerk</strong>zugang per Telefonnetz handelt. Das Mobilfunknetz arbeitet<br />
jedoch von sich aus schon digital. Deshalb ist e<strong>in</strong>e (De)Modulation gar nicht mehr nötig.<br />
Trotzdem f<strong>in</strong>det man e<strong>in</strong>ige Anleihen aus <strong>der</strong> Modem-Welt wie<strong>der</strong>.<br />
Die meisten Mobiltelefone unterstützen GPRS. <strong>E<strong>in</strong></strong>e gewisse Schwierigkeit stellt die<br />
Verb<strong>in</strong>dung zwischen Rechner und Handy dar. Hier gibt es je nach Ausstattung <strong>der</strong> Geräte<br />
drei Möglichkeiten. Die Verb<strong>in</strong>dung mittels Bluetooth ist sicherlich die mo<strong>der</strong>nste Variante.<br />
Hierzu müssen selbstredend beide Seiten mit dieser Art des Drahtlosfunks ausgestattet se<strong>in</strong>.<br />
Das Fehlen an Laptop o<strong>der</strong> PC ist ke<strong>in</strong> Problem, da man Bluetooth per USB-Dongle o<strong>der</strong><br />
PCMCIA-Steckkarte nachrüsten kann. Die drahtlose Verb<strong>in</strong>dung zwischen den Geräten hat<br />
den Vorteil, dass sich das Telefon für optimalen Empfang leicht positionieren lässt. Jedoch<br />
sorgt Bluetooth gerade auf <strong>der</strong> Seite des Mobiltelefons dafür, dass sich dessen Akkulaufzeit<br />
oft deutlich reduziert.<br />
Ebenfalls sollte man die Datensicherheit im Blick. Unter Umständen ist e<strong>in</strong> Mobiltelefon<br />
<strong>in</strong> e<strong>in</strong>em weiten Umkreis sichtbar. Wenn dann auch noch die Firmware e<strong>in</strong>ige gravierende<br />
Sicherheitslücken aufweist, eröffnet man an<strong>der</strong>en vielleicht tiefere <strong>E<strong>in</strong></strong>blicke <strong>in</strong> das Telefon<br />
als e<strong>in</strong>em lieb ist.<br />
Unter Sicherheitsaspekten deutlich unproblematischer ist e<strong>in</strong>e Verb<strong>in</strong>dung mit optischem<br />
Drahtlos-Funk. Viele Mobiltelefone, e<strong>in</strong>e große Zahl von tragbaren Computern und<br />
PDAs haben Infrarot e<strong>in</strong>gebaut. Die Reichweite von IrDA ist mit üblicherweise e<strong>in</strong>em halben<br />
Meter beschränkt. <strong>E<strong>in</strong></strong> weiterer Vorteil: Steckt das Mobiltelefon irgendwo <strong>in</strong> <strong>der</strong> Tasche, ist<br />
es für an<strong>der</strong>e per IrDA nicht mehr sichtbar. Die Ausrichtung <strong>der</strong> beiden kommunizierenden<br />
Geräte zue<strong>in</strong>an<strong>der</strong> ist nun entscheidend: Viel mehr als 30 Grad von <strong>der</strong> Hauptstrahlrichtung<br />
sollte <strong>der</strong> W<strong>in</strong>kel nicht betragen.<br />
Unter Energie- und Sicherheitsgesichtspunkten schneidet sicherlich die drahtgebundene<br />
Verb<strong>in</strong>dung zwischen Mobiltelefon und Rechner ab. Ältere Mobiltelefone beherrschen nur<br />
die serielle, neuere Geräte auch USB-Verb<strong>in</strong>dungen. Die entsprechenden PC-Gegenstücke<br />
s<strong>in</strong>d eigentlich immer vorhanden. Lei<strong>der</strong> gibt es jedoch kaum Telefone bei denen das Kabel<br />
schon beiliegt.
42 KAPITEL 4. WAN HARDWARE
Kapitel 5<br />
TCP-IP<br />
5.1 Schaffung von ”Inter-Nets”<br />
In den bisherigen Abschnitten erfolgte die <strong>E<strong>in</strong></strong>führung <strong>in</strong> das Thema <strong>Netzwerk</strong>e, <strong>in</strong> die Konzepte<br />
<strong>der</strong> paketorientierten Datenübertragung, <strong>der</strong> Signalisierung und <strong>der</strong> Kodierung. Als<br />
Protokolle <strong>der</strong> Hardwareebene wurden Ethernet und sehr kurz aus historischen Gründen<br />
TokenR<strong>in</strong>g besprochen. Diese <strong>Netzwerk</strong>hardware wird überlicherweise für Local Area Networks<br />
verwendet, da die überbrückbaren Entfernungen nur wenige e<strong>in</strong>hun<strong>der</strong>t Meter und<br />
mit optischen Medien nur wenige Kilometer betragen.<br />
ATM over<br />
ADSL<br />
Router n<br />
TokenR<strong>in</strong>g<br />
172.16.1.0/24<br />
Internet<br />
Ethernet<br />
1000Base-X<br />
ATM over<br />
ADSL<br />
#1<br />
192.168.1.0/24<br />
192.168.2.0/22<br />
#3<br />
Router 1<br />
#2<br />
Ethernet 803.11a<br />
10Base-T<br />
#2<br />
#1<br />
Router 2<br />
Ethernet<br />
100Base-T<br />
Abbildung 5.1: IP als Universalservice<br />
192.168.6.0/24<br />
#1<br />
FDDI Router 3<br />
192.168.10.0/24<br />
Für Weitverkehrsnetze greift man auf überall verbreitete Telefonnetze <strong>in</strong> ihrer analogen<br />
o<strong>der</strong> digitalen Ausprägung zurück. Dann kommt entwe<strong>der</strong> e<strong>in</strong> Modem o<strong>der</strong> e<strong>in</strong> ISDN-<br />
Adapter als <strong>Netzwerk</strong>anschluss zum <strong>E<strong>in</strong></strong>satz. Auf diese Weise lassen sich verschiedene Hardwareausprägungen<br />
für die Paketübertragung nutzen. Jedoch besteht dadurch auch e<strong>in</strong> Problem:<br />
Ethernet ist zwar für fast alle Medientypen implementiert 1 aber z.B. nicht für Zwei-<br />
Draht-Verb<strong>in</strong>dungen für weite Entfernungen. Die WAN-Techniken, wie z.B. ISDN und analoges<br />
Modem eignen sich kaum für die Vernetzung vieler Masch<strong>in</strong>en bzw. Komponenten.<br />
ISDN und Modem können weite Entfernungen realisieren, bieten aber nur Punkt-zu-<br />
Punkt-Verb<strong>in</strong>dungen zwischen jeweils zwei dedizierten Interfaces 2 . Verschiedene physikali-<br />
1 Es existieren jeweils Standards für Koaxialkabel (10Base5 ThickEthernet/Yellow-Cable bzw. 10Base2<br />
für Cheapternet), TwistedPair-Kabel (4bzw. 8adrig), Lichtwellenleiter, Funkwellen im 2.4 GHz-Bereich<br />
2 In den typischen <strong>E<strong>in</strong></strong>wahlsituationen von Internet-Provi<strong>der</strong>n handelt es sich dabei um spezielle Hardware,<br />
welche e<strong>in</strong>e große Anzahl von <strong>Netzwerk</strong><strong>in</strong>terfaces <strong>in</strong> e<strong>in</strong>er Masch<strong>in</strong>e vere<strong>in</strong>t.<br />
43<br />
#2
44 KAPITEL 5. TCP-IP<br />
sche Netze s<strong>in</strong>d unumgänglich, da ke<strong>in</strong>e Technologie sich für alle <strong>E<strong>in</strong></strong>satzszenarios eignet.<br />
Weiterh<strong>in</strong> s<strong>in</strong>d Trennungen an bestimmten ”Grenzen”, wie abgeschlossene Firmen- o<strong>der</strong><br />
Abteilungsnetze durchaus gewünscht und aus Sicherheitsgründen notwendig.<br />
Deshalb wird e<strong>in</strong> ”Universaldienst” geschaffen, welcher Verb<strong>in</strong>dungen zwischen beliebigen<br />
Rechnern erlaubt. Dabei soll die Kommunikation über unterschiedliche Entfernungen,<br />
durch unterschiedliche Netze (LAN o<strong>der</strong> WAN) und über verschiedene Medien realisierbar<br />
se<strong>in</strong>. Virtuell soll jede Verb<strong>in</strong>dung für die kommunizierenden Masch<strong>in</strong>en ”gleich” aussehen,<br />
d.h. es sollen ke<strong>in</strong>e an<strong>der</strong>en Applikationen o<strong>der</strong> Protokolle <strong>in</strong> Abhängigkeit davon verwendet<br />
werden müssen, ob sich die Masch<strong>in</strong>en im gleichen LAN bef<strong>in</strong>den o<strong>der</strong> über Kont<strong>in</strong>ente<br />
h<strong>in</strong>weg Daten austauschen.<br />
Dabei soll ke<strong>in</strong>e Entscheidung für e<strong>in</strong>e bestimmte Technologie 3 getroffen werden, son<strong>der</strong>n<br />
e<strong>in</strong> Universalnetz über mehrere heterogene Netze h<strong>in</strong>weg geschaffen werden. <strong>E<strong>in</strong></strong> solcher<br />
Universaldienst wird als ”Inter-Net” bezeichnet.<br />
5.2 Überblick über TCP/IP<br />
Im vorhergehenden Abschnitt wurde das OSI-Referenzmodell vorgestellt. In den nun folgenden<br />
Abschnitten soll nun das Referenzmodell für die TCP/IP-Architektur vorgestellt<br />
werden. Das TCP/IP-Referenzmodell - benannt nach den beiden primären Protokollen<br />
TCP und IP <strong>der</strong> Netzarchitektur beruht auf den Vorschlägen, die bei <strong>der</strong> Fortentwicklung<br />
des ARPANETs gemacht wurden. Das TCP/IP-Modell ist zeitlich vor dem OSI-<br />
Referenzmodell entstanden, deshalb s<strong>in</strong>d auch die Erfahrungen des TCP/IP-Modells mit <strong>in</strong><br />
die OSI-Standardisierung e<strong>in</strong>geflossen. Als Ziele <strong>der</strong> Architektur wurden bei <strong>der</strong> Entwicklung<br />
def<strong>in</strong>iert:<br />
• Unabhängigkeit von <strong>der</strong> Architektur <strong>der</strong> Hostrechner.<br />
• Universelle Verb<strong>in</strong>dungsmöglichkeiten im gesamten <strong>Netzwerk</strong>.<br />
• Ende-zu-Ende-Quittungen.<br />
• Standardisierte Anwendungsprotokolle.<br />
• Unabhängigkeit von <strong>der</strong> verwendeten <strong>Netzwerk</strong>-Technologie.<br />
Das TCP/IP-Referenzmodell besteht im Gegensatz zum OSI-Modell aus nur vier Schichten:<br />
Application Layer, Transport Layer, Internet Layer, Network Layer.<br />
Applikationssschicht (application layer): Die Applikationsschicht (auch Verarbeitungsschicht<br />
genannt) umfaßt alle höherschichtigen Protokolle des TCP/IP-Modells. Zu den ersten<br />
Protokollen <strong>der</strong> Verarbeitungsschicht zählen SSH (für virtuelle Term<strong>in</strong>als), FTP (Dateitransfer),<br />
SMTP (zur Übertragung von E-Mail), DNS (Doma<strong>in</strong> Name Service), HTTP<br />
(Hypertext Transfer Protocol) etc.<br />
Transportschicht (transport layer): Wie im OSI-Modell ermöglicht die Transportschicht<br />
die Kommunikation zwischen den Quell- und Zielhosts. Im TCP/IP-Referenzmodell wurden<br />
auf dieser Schicht zwei Ende-zu-Ende-Protokolle def<strong>in</strong>iert: das Transmission Control<br />
Protocol (TCP) und das User Datagram Protocol (UDP). TCP ist e<strong>in</strong> zuverlässiges verb<strong>in</strong>dungsorientiertes<br />
Protokoll, durch das e<strong>in</strong> Bytestrom fehlerfrei zu e<strong>in</strong>em an<strong>der</strong>en Rechner im<br />
3 <strong>Netzwerk</strong>hardware mit bestimmten darauf laufenden hardwarenahen Protokollen
5.2.<br />
ÜBERBLICK ÜBER TCP/IP 45<br />
Internet übermittelt werden kann. UDP ist e<strong>in</strong> unzuverlässiges verb<strong>in</strong>dungsloses Protokoll,<br />
das vorwiegend für Abfragen und Anwendungen <strong>in</strong> Client/Server- Umgebungen verwendet<br />
wird, <strong>in</strong> denen es <strong>in</strong> erster L<strong>in</strong>ie nicht um e<strong>in</strong>e sehr genaue, son<strong>der</strong>n schnelle Datenübermittlung<br />
geht (z.B. Übertragung von Sprache und Bildsignalen). Diese Protokolle werden<br />
gleich noch ausführlicher behandelt.<br />
Internetschicht (<strong>in</strong>ternet layer): Die Internetschicht im TCP/IP-Modell def<strong>in</strong>iert nur<br />
e<strong>in</strong> Protokoll namens IP (Internet Protocol), das alle am <strong>Netzwerk</strong> beteiligten Rechner<br />
verstehen können. Die Internetschicht hat die Aufgabe IP-Pakete richtig zuzustellen. Dabei<br />
spielt das Rout<strong>in</strong>g <strong>der</strong> Pakete e<strong>in</strong>e wichtige Rolle. Das Internet Control Message Protocol<br />
(ICMP) ist fester Bestandteil je<strong>der</strong> IP-Implementierung und dient zur Übertragung von<br />
Diagnose- und Fehler<strong>in</strong>formationen für das Internet Protocol.<br />
<strong>Netzwerk</strong>schicht (network layer): Unterhalb <strong>der</strong> Internetschicht bef<strong>in</strong>det sich im<br />
TCP/IP-Modell e<strong>in</strong>e große Def<strong>in</strong>itionslücke. Das Referenzmodell sagt auf dieser Ebene nicht<br />
viel darüber aus, was hier passieren soll. Festgelegt ist lediglich, daß zur Übermittlung von<br />
IP-Paketen e<strong>in</strong> Host über e<strong>in</strong> bestimmtes Protokoll an e<strong>in</strong> Netz angeschlossen werden muß.<br />
Dieses Protokoll ist im TCP/IP-Modell nicht weiter def<strong>in</strong>iert und weicht von Netz zu Netz<br />
und Host zu Host ab. Das TCP/IP-Modell macht an dieser Stelle vielmehr Gebrauch von<br />
bereits vorhandenen Protokollen, wie z.B. Ethernet (IEEE 802.3), PPP, etc.<br />
SSH FTP HTTP DNS DHCP<br />
Transmission<br />
Control P. (TCP)<br />
Internet Protocol (IP)<br />
ICMP / ARP<br />
User Datagram<br />
Protocol (UDP)<br />
Ethernet ATM FDDI Modem ISDN<br />
Abbildung 5.2: Der TCP/IP-Protokoll-Stapel<br />
Application<br />
Layer<br />
Transport<br />
Layer<br />
Internet<br />
Layer<br />
Network<br />
Layer<br />
Um Datenpakete im großen Umfang und möglichst schnell an verschiedenste Empfänger<br />
schicken zu können, muß das Format <strong>der</strong> Adressen beson<strong>der</strong>s gut von Computern o<strong>der</strong> speziellen<br />
elektronischen Schaltkreisen zu verarbeiten se<strong>in</strong>. Daher steckt das Konzept zur Verarbeitung<br />
<strong>der</strong> IP-Adressen im B<strong>in</strong>ärformat (denn Host- und Domänennamen zu analysieren<br />
kostete zuviel Zeit!) Masch<strong>in</strong>en-<strong>in</strong>tern entsprechen dem üblichen, dezimalen Format <strong>der</strong> IP-<br />
Adressen (a.b.c.d) pro Zahl 8-bits. IP-Adressen s<strong>in</strong>d also <strong>in</strong>sgesamt 32-bit lang, wobei die<br />
Unterteilung <strong>in</strong> 8 bit Blöcke nur <strong>der</strong> Lesbarkeit halber e<strong>in</strong>geführt wurde. Dieses Format wird<br />
auch Dotted Quad Notation genannt:<br />
192.168.22.3 entspricht 11000000.10101000.00010110.00000011<br />
In dieser simplen Form kann die Adresse von sehr primitiven und enorm schnellen Logik-<br />
Bauste<strong>in</strong>en analysiert werden und sehr schnell mit Netzmasken und Broadcastadressen zum<br />
Rout<strong>in</strong>g berechnet werden.
46 KAPITEL 5. TCP-IP<br />
5.3 Design<br />
Für das Verständnis und die Behandlung des Internet-Protokolls s<strong>in</strong>d e<strong>in</strong>ige Vere<strong>in</strong>barungen<br />
s<strong>in</strong>nvoll: <strong>E<strong>in</strong></strong> Host(-rechner): Me<strong>in</strong>t e<strong>in</strong> beliebiges Computersystem, das an e<strong>in</strong> Internet<br />
angeschlossen ist und auf dem Anwendungen laufen. Dabei spielt die Rechnerhardware,<br />
Typ und Geschw<strong>in</strong>digkeit des <strong>Netzwerk</strong>es ke<strong>in</strong>e Rolle. Alle Hosts können ungeachtet <strong>der</strong><br />
Hardwareunterschiede (und Betriebssysteme) mite<strong>in</strong>an<strong>der</strong> kommunizieren. <strong>E<strong>in</strong></strong> Router ist<br />
e<strong>in</strong> Host mit mehrern Interfaces.<br />
<strong>E<strong>in</strong></strong>e (global) e<strong>in</strong>heitliche Adressierung e<strong>in</strong>es Hosts muss sichergestellt se<strong>in</strong>, damit e<strong>in</strong><br />
übergreifendes Inter-Net s<strong>in</strong>nvoll funktionieren kann. Das Internet-Protokoll (IP) ist Abstraktion<br />
<strong>der</strong> Konzepte se<strong>in</strong>er Entwickler. Es ist unabhängig von e<strong>in</strong>er speziellen physikalischen<br />
Hardware angelegt. Die Implementierung f<strong>in</strong>det ausschliesslich <strong>in</strong> Software statt. Damit<br />
kann es Bestandteil des Betriebssystems e<strong>in</strong>es Rechners werden o<strong>der</strong> als eigenständige<br />
Applikation, die unter e<strong>in</strong>em Betriebssystem ausgeführt wird, laufen. Das Adressierungsschema<br />
bildet dabei die zentrale Komponente <strong>der</strong> Abstraktion. Zum e<strong>in</strong>en können die physikalischen<br />
Adressen nicht ausreichen, 4 zum an<strong>der</strong>en können sie sehr unterschiedliche Schemata<br />
5 verwenden.<br />
Die Zustellung von IP-Paketen erfolgt analog zur Zustellung von Frames auf Hardwareebene.<br />
Die Adressierung <strong>der</strong> virtuellen Ebene läßt sich gut mit <strong>der</strong> physikalischen Adressierung<br />
vergleichen. Der Host trägt die Zieladresse <strong>in</strong> den Hea<strong>der</strong> 6 des zu verschickenden<br />
Datenpaketes e<strong>in</strong> und vermerkt se<strong>in</strong>e eigene Adresse als Absen<strong>der</strong>kennung. Das Zielsystem,<br />
welches durchaus e<strong>in</strong> Zwischenziel <strong>in</strong> Form e<strong>in</strong>es Routers auf dem Weg e<strong>in</strong>es Datenpaketes<br />
se<strong>in</strong> kann, überprüft die Adresse auf Übere<strong>in</strong>stimmung mit <strong>der</strong> eigenen. Anhand dieser wird<br />
das Paket behandelt: Im Falle e<strong>in</strong>es Routers erfolgt die Weiterleitung <strong>in</strong> e<strong>in</strong> angeschlossenes<br />
Netz, soweit e<strong>in</strong> geeignetes vorhanden ist. Erreicht das Paket den adressierten Host, kann<br />
dieser die Absendeadresse als Ziel für das Verschicken e<strong>in</strong>er Antwort verwenden. An je<strong>der</strong><br />
Stelle auf dem Weg e<strong>in</strong>es Paketes ist die entsprechende Protokollsoftware mit <strong>der</strong> Zustellung<br />
beschäftigt.<br />
5.4 Internet Protocol (IP)<br />
<strong>Netzwerk</strong>e sollen unabhängig von <strong>der</strong> verwendeten Hardware e<strong>in</strong> e<strong>in</strong>heitliches Adressschema<br />
verwenden. Die Beschränkung auf Ethernet verbietet sich alle<strong>in</strong> schon wegen <strong>der</strong> begrenzten<br />
Kabellängen im LAN. Der Hauptvorteil von IP besteht also dar<strong>in</strong>, daß es physikalisch verschiedene<br />
<strong>Netzwerk</strong>e zu e<strong>in</strong>em sche<strong>in</strong>bar homogenen <strong>Netzwerk</strong> zusammenfaßt. Die Zusammenarbeit<br />
verschiedener Netze wird als ”Internetwork<strong>in</strong>g” bezeichnet, die Kommunikation<br />
verläuft über das Internet-Protokoll (IP).<br />
Es gibt nicht DAS Internet, son<strong>der</strong>n das Internet ist e<strong>in</strong>e Sammlung von Teilnetzen,<br />
die mite<strong>in</strong>an<strong>der</strong> verbunden s<strong>in</strong>d. Es gibt ke<strong>in</strong>e echte Struktur des Netzes, son<strong>der</strong>n mehrere<br />
größere Backbones, die quasi das Rückgrat (wie <strong>der</strong> Name Backbone ja schon sagt)<br />
des Internet bilden. Die Backbones werden aus Leitungen mit sehr hoher Bandbreite und<br />
schnellen Routern gebildet. An die Backbones s<strong>in</strong>d wie<strong>der</strong>um größere regionale Netze an-<br />
4 48<br />
Obwohl das MAC-Adressierungsschema des Ethernets z.B. mit 2 mehr Adressen umfaßt als das<br />
Internet-Protokoll <strong>der</strong> Version 4. Hier besteht jedoch die Schwierigkeit, dass die Adressen fest mit e<strong>in</strong>em<br />
<strong>Netzwerk</strong>adapter verknüpft s<strong>in</strong>d, d.h. e<strong>in</strong>e beliebige Abstraktion nicht möglich ist.<br />
5<br />
Die Zuordnung von Modem- o<strong>der</strong> ISDN-Leitungen könnte z.B. anhand <strong>der</strong> Telefonnummer erfolgen,<br />
TokenR<strong>in</strong>g und Ethernet verwenden MAC-Adressen.<br />
6<br />
speziell gekennzeichneter Kopf e<strong>in</strong>es Datenpaketes, welcher ke<strong>in</strong>e Nutzdaten enhält, son<strong>der</strong>n Zustellver-<br />
merke speichert
5.4. INTERNET PROTOCOL (IP) 47<br />
geschlossen, die LANs von Universitäten, Behörden, Unternehmen und Service-Provi<strong>der</strong>n<br />
verb<strong>in</strong>den.<br />
IP stellt die Basisdienste für die Übermittlung von Daten <strong>in</strong> TCP/IP-Netzen bereit.<br />
Hauptaufgaben des Internet Protokolls s<strong>in</strong>d die Adressierung von Hosts und das Fragmentieren<br />
von Paketen. Diese Pakete werden von IP nach bestem Bemühen (”best effort”) von<br />
<strong>der</strong> Quelle zum Ziel beför<strong>der</strong>t, unabhängig davon, ob sich die Hosts im gleichen Netz bef<strong>in</strong>den<br />
o<strong>der</strong> an<strong>der</strong>e Netze dazwischen liegen. Garantiert ist die Zustellung allerd<strong>in</strong>gs nicht.<br />
Das Internet Protokoll enthält ke<strong>in</strong>e Funktionen für die Ende-zu-Ende-Sicherung o<strong>der</strong> für<br />
die Flußkontrolle.<br />
Das Internet-Protokoll muss e<strong>in</strong>e Reihe von Aufgaben erfüllen, um e<strong>in</strong>e End-zu-End-<br />
Zustellung von Datenpaketen zu gewährleisten. Dazu zählt die Def<strong>in</strong>ition von Datagrammen,<br />
welche die Basise<strong>in</strong>heiten zur Datenübermittlung <strong>in</strong> Internets bilden. Weiterh<strong>in</strong> wird das<br />
bereits angesprochene Adressierungsschema benötigt. <strong>E<strong>in</strong></strong>e weitere Aufgabe besteht <strong>in</strong> <strong>der</strong><br />
Übermittlung <strong>der</strong> Daten von <strong>der</strong> Transportschicht zur <strong>Netzwerk</strong>schicht. 7<br />
Die Datagramme müssen geeignet durch das Netz geschleust werden, dieser Vorgang<br />
wird als ”Rout<strong>in</strong>g” bezeichnet. Da auf diesem Wege durchaus unterschiedliche Arten von<br />
<strong>Netzwerk</strong>hardware passiert werden kann, muss die optimale Framegröße nicht unbed<strong>in</strong>gt<br />
auf allen Teilstrecken identisch se<strong>in</strong>. Da die Framegröße nur anhand <strong>der</strong> Daten des ersten<br />
Teilnetzes, <strong>in</strong> dem <strong>der</strong> sendende Host Mitglied ist, bestimmt wird, müssen Mechanismen<br />
zur Verfügung stehen, mit eventuell kle<strong>in</strong>er werdenden Frame-Größen umzugehen. Daher<br />
erlaubt das IP die Fragmentierung <strong>der</strong> Datagramme auf ihrem Weg durch das Netz und<br />
das Zusammensetzen von diesen auf <strong>der</strong> Zielmasch<strong>in</strong>e.<br />
Die Funktionen von IP umfassen:<br />
• Die Def<strong>in</strong>ition von Datagrammen, welche die Basise<strong>in</strong>heiten für die Übermittlung von<br />
Daten im Internet bilden.<br />
• Def<strong>in</strong>ition des Adressierungsschemas.<br />
•<br />
Übermittlung <strong>der</strong> Daten von <strong>der</strong> Transportebene zur <strong>Netzwerk</strong>schicht.<br />
• Rout<strong>in</strong>g von Datagrammen durch das Netz.<br />
• Fagmentierung und Zusammensetzen von Datagrammen.<br />
IP benötigt deshalb e<strong>in</strong> hardwareunabhängiges Adressierungsschema; jedem Host (teilnehmen<strong>der</strong><br />
Rechner im ”Internet” wird e<strong>in</strong>e e<strong>in</strong>deutige 32-Bit-Zahl zugewiesen, die sogenannte<br />
IP-Adresse. Die Dargestellung von IP-Adressen erfolgt üblicherweise durch vier<br />
Dezimalzahlen, e<strong>in</strong>e für jeden 8-Bit-Anteil, die durch Punkte vone<strong>in</strong>an<strong>der</strong> getrennt s<strong>in</strong>d.<br />
IP ist e<strong>in</strong> verb<strong>in</strong>dungsloses Protokoll, d.h. zur Datenübertragung wird ke<strong>in</strong>e Ende-zu-<br />
Ende-Verb<strong>in</strong>dung <strong>der</strong> Kommunikationspartner etabliert. Ferner ist IP e<strong>in</strong> unzuverlässiges<br />
Protokoll, da es über ke<strong>in</strong>e Mechanismen zur Fehlererkennung und -behebung verfügt. Unzuverlässig<br />
bedeutet aber ke<strong>in</strong>esfalls, daß man sich auf das IP Protokoll nicht verlassen<br />
kann. Unzuverlässig bedeutet <strong>in</strong> diesem Zusammenhang lediglich, daß IP die Zustellung<br />
<strong>der</strong> Daten nicht garantieren kann. S<strong>in</strong>d die Daten aber beim Zielhost angelangt, s<strong>in</strong>d diese<br />
Daten auch korrekt.<br />
7 Das zugehörige OSI-Schichtenmodell ist Thema e<strong>in</strong>es eigenen Kapitels
48 KAPITEL 5. TCP-IP<br />
5.5 Spezifikation<br />
5.5.1 IPv4-Standard<br />
Mit den erfolgten Designüberlegungen und def<strong>in</strong>ierten Aufgaben des Internet-Protokolls<br />
s<strong>in</strong>d die wesentlichen Grundlagen gelegt. Nun kann die Spezifikation, d.h. die Festlegung<br />
e<strong>in</strong>zuhalten<strong>der</strong> Standards, des Protokolls erfolgen. Wie schon mehrfach implizit erwähnt<br />
wurde, ist IP e<strong>in</strong> paketorientiertes Protokoll.<br />
Die IP-Adresse ist e<strong>in</strong>e 32 bit große B<strong>in</strong>ärzahl, die jedem Host <strong>in</strong> e<strong>in</strong>em Internet zugewiesen<br />
wird und für die gesamte Kommunikation mit jedem an<strong>der</strong>en Host <strong>in</strong> diesem Internet<br />
verwendet wird. Dabei wird die Adresse virtuell <strong>in</strong> zwei Teile aufgespalten <strong>in</strong> e<strong>in</strong> Präfix und<br />
e<strong>in</strong> Suffix, wobei die Aufteilung nicht statisch ist. Das Präfix e<strong>in</strong>er IP-Adresse identifiziert<br />
das Netz, <strong>in</strong> welchem sich <strong>der</strong> jeweilige Host mit se<strong>in</strong>er Adresse bef<strong>in</strong>det.<br />
Das Adress-Suffix identifiziert den Host <strong>in</strong> dem durch das Präfix bestimmten Netz. Jedes<br />
Netz verfügt damit über e<strong>in</strong>e e<strong>in</strong>deutige Kennung, die Netznummer. Jede Netznummer<br />
bzw. Network Number tritt nur e<strong>in</strong>mal auf. Suffixes können <strong>in</strong> jedem Netz, dh. mehrfach,<br />
verwendet werden. Durch diese Festlegung soll das Rout<strong>in</strong>g effizient gestaltet werden<br />
können.<br />
Durch diese Festlegungen wird das wesentliches Designpr<strong>in</strong>zip beschrieben: Je<strong>der</strong> Host<br />
erhält e<strong>in</strong>e e<strong>in</strong>heitliche Adresse, diese Adresse kann jeweils nur von e<strong>in</strong>er Masch<strong>in</strong>e verwendet<br />
werden. Es erfolgt e<strong>in</strong>e globale Koord<strong>in</strong>ation bei <strong>der</strong> Zuteilung von Netznummern,<br />
jedoch e<strong>in</strong>e lokale Verteilung <strong>der</strong> Suffixes <strong>in</strong> den jeweiligen Teilnetzen. Es wird e<strong>in</strong>e Delegationshierarchie<br />
geschaffen, die e<strong>in</strong>e leichte <strong>E<strong>in</strong></strong>ordnung von Computern ermöglicht: Verschiedene<br />
Präfixes bedeutet verschiedene Netze; Gleiches Präfix heisst gleiches Netz. Das<br />
erzw<strong>in</strong>gt dann verschiedene Suffixes.<br />
Das Internet Control Message Protocol (ICMP) ist e<strong>in</strong>e Erweiterung des IP und wird<br />
dazu verwendet, um Fehlermeldungen und ähnliches an an<strong>der</strong>e Hosts weiterzugeben bzw.<br />
die Erreichbarkeit von Hosts zu überprüfen. Neben <strong>der</strong> Erreichbarkeit von Rechnern gibt es<br />
e<strong>in</strong>e weitere Funktion für die Weitergabe bestimmter Rout<strong>in</strong>g<strong>in</strong>formationen, die Redirect<br />
Messages. Diese wird vom Rout<strong>in</strong>g-Modul erzeugt, wenn es erkennt, daß es von e<strong>in</strong>em<br />
an<strong>der</strong>en Host als Gateway verwendet wird, obwohl es e<strong>in</strong>en wesentlich kürzeren Weg gibt.<br />
Weil dieses aber stark <strong>in</strong> die Funktionen des Hosts e<strong>in</strong>greift, ist das Ganze mit Vorsicht zu<br />
geniessen. In e<strong>in</strong>igen Fällen wird ICMP komplett abgeschaltet. <strong>E<strong>in</strong></strong> weiteres Hilfprotokoll<br />
stellt das Address Resolution Protocol dar. Es dient <strong>der</strong> Zuordnung von Hardwareadressen<br />
zu IP-Nummern. Beide Protokolle werden später <strong>in</strong> eigenen Abschnitten behandelt.<br />
5.5.2 Notation<br />
Für die Protokollsoftware ist die B<strong>in</strong>ärdarstellung entscheidend, nur <strong>in</strong> dieser kann e<strong>in</strong>e<br />
effiziente Analyse <strong>der</strong> Adressen erfolgen. Jedoch besitzt diese auch Nachteile: Für Menschen,<br />
die diese Adressen <strong>in</strong> ihren Applikationen verwenden, ist die B<strong>in</strong>ärnotation schwer lesbar<br />
und Verwechselungen leicht möglich.<br />
Deshalb führt man die sogenannte Dotted-Quad-Notation e<strong>in</strong>. Die IP-Adresse wird<br />
<strong>in</strong> vier Byte-Blöcke aufgeteilt, z.B. 11000000.10101000.00011001.11111110. Die Punkt-<br />
Dezimal-Notierung liefert dann e<strong>in</strong>e für das menschliche Auge leicht erfassbare, Darstellung.<br />
Im Beispiel bleibend schreibt sich die genannte IP-Adresse nun: 192.168.25.254. Je<strong>der</strong> Block<br />
besteht dabei aus e<strong>in</strong>em vorzeichenlosen Ganzzahlwert im Bereich 0 - 255.
5.5. SPEZIFIKATION 49<br />
5.5.3 Adressbereiche<br />
Der gesamte IP-Adressbereich erstreckt sich damit von Adresse 0.0.0.0 bis 255.255.255.255.<br />
In <strong>der</strong> B<strong>in</strong>ärdarstellung bedeutet dieses die Spannbreite von allen 32 Stellen ”Null” gesetzt<br />
bis zu allen Stellen ”<strong>E<strong>in</strong></strong>s” gesetzt. Die zuteilende Stelle für IP-Adressen bzw. -Bereiche<br />
muss für jeden Adressanteil die Zahl <strong>der</strong> Bits festlegen, welche für das Präfix bzw. das<br />
Suffix reserviert werden.<br />
Class<br />
A 0<br />
B<br />
C<br />
D<br />
E<br />
1 0<br />
1 1 0<br />
11 1 0<br />
11 11<br />
8 bits 8 bits 8 bits 8 bits<br />
network<br />
net<br />
work<br />
net<br />
work<br />
host host host<br />
network<br />
network network<br />
host host<br />
host<br />
multicast multicast multicast<br />
experi<br />
mental<br />
experi<br />
mental<br />
Abbildung 5.3: Adressbereiche des IPv4<br />
experi<br />
mental<br />
Die Zuordnung von e<strong>in</strong>er größeren Zahl von Bits <strong>in</strong> e<strong>in</strong>em Bereich bedeutet automatisch<br />
die Verfügbarkeit von weniger Bits im an<strong>der</strong>en Teil. D.h. die Verlängerung des Präfixes<br />
liefert mehr def<strong>in</strong>ierbare Netznummern, aber weniger Hosts im jeweiligen Netz. Die Vergrößerung<br />
<strong>der</strong> Zahl <strong>der</strong> Hosts pro Netz geht zulasten <strong>der</strong> def<strong>in</strong>ierbaren Anzahl von Netzen.<br />
<strong>E<strong>in</strong></strong>e übergreifend e<strong>in</strong>heitliche Festlegung ist jedoch kaum s<strong>in</strong>nvoll, da sehr unterschiedliche<br />
Netze und Anfor<strong>der</strong>ungen existieren.<br />
Das Internet-Protokoll ist aus Sicht <strong>der</strong> Computer- und <strong>Netzwerk</strong>evolution e<strong>in</strong> recht altes<br />
Protokoll, d.h. nicht alle Entwicklungen konnten vorausgesehen werden. Der ursprünglich<br />
festgelegte Adressraum erschien gross genug um alle damaligen Anfor<strong>der</strong>ungen abdecken zu<br />
können 8 . Weiterh<strong>in</strong> sollten IP-Adressen selbstbezeichnend se<strong>in</strong>, d.h. ohne weitere Angaben<br />
sollte die Netzgröße, d.h. die Anzahl maximal enthaltener Hosts als Information bereits<br />
be<strong>in</strong>haltet se<strong>in</strong>.<br />
Die frühe IP-Software <strong>in</strong>terpretierte zur Ermittlung e<strong>in</strong>er Adressklasse, die <strong>E<strong>in</strong></strong>teilungsvorschrift<br />
des IP-Adressraumes, die ersten vier Bits. Diese wurden <strong>in</strong> e<strong>in</strong>er Tabelle zur<br />
schnelleren Bearbeitung verwaltet. Mit dieser Festlegung wurde e<strong>in</strong>e Aufteilung des gesamten<br />
Adressraumes getroffen:<br />
Die Aufteilung geschieht über die Internet Assigned Number Authority (IANA).<br />
8 Es gab bei <strong>der</strong> Entwicklung von IP nur e<strong>in</strong>e w<strong>in</strong>zige Anzahl zu vernetzen<strong>der</strong> Rechner und man schätzte<br />
die Weiterentwicklung bei weitem nicht so stürmisch e<strong>in</strong>, wie sie später erfolgen sollte.
50 KAPITEL 5. TCP-IP<br />
Bezeichnung Präfix Suffix Netze Hosts pro Netz<br />
Class A 7 bit 24 bit 128 16.777.216<br />
Class B 14 bit 16 bit 16.38 65.536<br />
Class C 21 bit 8bit 2.097.152 256<br />
5.5.4 Spezielle IP-Adressen<br />
Tabelle 5.1: Aufteilung <strong>der</strong> IP-Adressklassen<br />
Beson<strong>der</strong>e Adressierungen sollen im geme<strong>in</strong>samen Adressraum abgebildet werden. Deshalb<br />
wurde e<strong>in</strong>e Reihe von Spezialadressen def<strong>in</strong>iert. Dazu zählen die <strong>Netzwerk</strong>adressen: Um den<br />
Netzen e<strong>in</strong>en ”Namen” zu geben, d.h. um sie direkt ansprechen zu können, erhalten diese<br />
Adressen im Prefix die <strong>Netzwerk</strong>-Nummer und im Suffix Nullen.<br />
Für den direkter Broadcast, d.h. um alle Rechner <strong>in</strong> e<strong>in</strong>em geme<strong>in</strong>samen physikalischen<br />
Netz e<strong>in</strong>e Nachricht schicken zu können, wird das <strong>Netzwerk</strong>prefix verwendet und im Suffix<br />
b<strong>in</strong>äre ”<strong>E<strong>in</strong></strong>sen” e<strong>in</strong>getragen. Der limitierte Broadcast erlaubt es, allen Rechnern im physikalischen<br />
Netz (<strong>in</strong> dem sich die Masch<strong>in</strong>e gerade bef<strong>in</strong>det) e<strong>in</strong>e Nachricht zu schicken. Im<br />
<strong>Netzwerk</strong>prefix und im Suffix werden ausschließlich ”<strong>E<strong>in</strong></strong>sen” e<strong>in</strong>getragen.<br />
”This Computer” stellt auch e<strong>in</strong>e spezielle Anfor<strong>der</strong>ung dar: Wenn e<strong>in</strong> Rechner bootet<br />
und dynamisch e<strong>in</strong>e IP-Adresse erhalten soll, benötigt er e<strong>in</strong>e Adresse zur IP-Kommunikation:<br />
Im Präfix und Suffix ausschließlich Nullen. Diese Situation tritt z.B. bei festplattenlosen<br />
Masch<strong>in</strong>en auf, die ke<strong>in</strong>e Möglichkeit haben, die Adresse irgendwo abzulegen. Dieses gilt<br />
auch für mobile Masch<strong>in</strong>en, die zwischen verschiedenen Netzen wechseln.<br />
Die ”Loopback Address” bietet e<strong>in</strong>e auf je<strong>der</strong> Masch<strong>in</strong>e e<strong>in</strong>heitliche Adresse. Viele Programme<br />
verwenden zur Kommunikation TCP/IP, selbst wenn die Masch<strong>in</strong>e nicht an e<strong>in</strong><br />
<strong>Netzwerk</strong> angeschlossen ist. Zur schnellen IP-Kommunikation <strong>in</strong>nerhalb <strong>der</strong> Masch<strong>in</strong>e ist<br />
als höchstes das Class-A <strong>Netzwerk</strong> 9 def<strong>in</strong>iert. Dieses ersche<strong>in</strong>t aus heutiger Sicht durchaus<br />
als Verschwendung, da <strong>in</strong> e<strong>in</strong>em solchen Netz mehrere Millionen Rechner Platz f<strong>in</strong>den.<br />
Router erhalten auch IP-Adressen obwohl sie selten Applikationen zur Host-zu-Host-<br />
Kommunikation ausführen. Sie haben Verb<strong>in</strong>dung <strong>in</strong> verschiedene physikalische Netze und<br />
müssen <strong>in</strong> jedem dieser Netze adressierbar se<strong>in</strong>. Jede dieser IP-Adressen e<strong>in</strong>es Routers bezeichnet<br />
mit ihrem Prefix das physikalische Netz. Dabei wird folgendes Pr<strong>in</strong>zip angewandt:<br />
IP-Adressen bezeichnen nicht direkt den Host, son<strong>der</strong>n die Verb<strong>in</strong>dung e<strong>in</strong>es Rechners zu<br />
e<strong>in</strong>em <strong>Netzwerk</strong>.<br />
Zur Abgrenzung von Routern bezeichnet man Rechner mit mehreren IP-Adressen ohne<br />
Rout<strong>in</strong>gfunktionalität als Multi-Homed-Hosts.<br />
Beim Rout<strong>in</strong>g spielen e<strong>in</strong>ige IP-Adressen mit beson<strong>der</strong>er Bedeutung e<strong>in</strong>e Rolle, die im<br />
folgenden kurz vorgestellt:<br />
<strong>Netzwerk</strong>adresse ist def<strong>in</strong>iert durch e<strong>in</strong> Präfix. Der Teil, welcher den e<strong>in</strong>zelnen Host<br />
bezeichnet, wird mit Nullen am Ende aufgefüllt. So beschreibt die spezielle IP-Nummer,<br />
z.B. 192.168.20.0 e<strong>in</strong> Klasse-C-<strong>Netzwerk</strong> mit max. 254 Teilnehmern.<br />
Broadcastadresse für e<strong>in</strong>en direkten Broadcast, d.h. e<strong>in</strong> Datenpaket an alle Teilnehmer<br />
e<strong>in</strong>es Teilnetzes, besteht aus dem Präfix mit <strong>E<strong>in</strong></strong>sen am Ende, die den Hostteil auffüllen.<br />
Im o.g. Beispiel wäre dieses die spezielle IP-Nummer 192.168.20.255.<br />
9 127.0.0.0
5.5. SPEZIFIKATION 51<br />
Defaultrouter heißt <strong>der</strong> Standardübergang zu an<strong>der</strong>en Netzen. Dieses ist e<strong>in</strong>e Masch<strong>in</strong>e,<br />
die den ”Weg” zum restlichen Internet kennt. Der Defaultrouter ist e<strong>in</strong>e Konvention, damit<br />
nicht je<strong>der</strong> Router im Netz alle Routen zu allen existierenden <strong>Netzwerk</strong>en listen und verarbeiten<br />
muss. Diese Masch<strong>in</strong>e muss aber zw<strong>in</strong>gend Mitglied im jeweilgen Teilnetz se<strong>in</strong>. Im<br />
Beispielnetz könnte dieses z.B. die IP-Adresse 192.168.20.254 se<strong>in</strong>. Dieses ist im Gegensatz<br />
zu <strong>Netzwerk</strong>adresse und Broadcastadresse nicht standardisiert.<br />
<strong>Netzwerk</strong>maske wird durch die spezielle IP-Adresse beschrieben, welche mit b<strong>in</strong>ären<br />
<strong>E<strong>in</strong></strong>sen beg<strong>in</strong>nt und mit b<strong>in</strong>ären Nullen endet. Der Übergang bezeichnet die Grenze zwischen<br />
Prä- und Suffix und sollte e<strong>in</strong>deutig se<strong>in</strong>. Für das Beispielnetz lautet diese 255.255.255.0<br />
und ist damit Netzmaske e<strong>in</strong>es Klasse C-Netzes. B<strong>in</strong>är lautet sie: 1111 1111.1111 1111.1111<br />
1111.0000 0000 <strong>E<strong>in</strong></strong>e <strong>Netzwerk</strong>maske für Netze mit nur e<strong>in</strong>em Rechner besteht ausschliesslich<br />
aus ”<strong>E<strong>in</strong></strong>sen”, die <strong>Netzwerk</strong>maske für das gesamte Internet nur aus ”Nullen”. 0.0.0.0<br />
bezeichnet deshalb die Defaultroute.<br />
Weiterh<strong>in</strong> lautet die <strong>Netzwerk</strong>maske z.B. für e<strong>in</strong> Klasse B Netz 255.255.0.0 und <strong>in</strong> <strong>der</strong><br />
B<strong>in</strong>ärschreibweise 1111 1111.1111 1111.0000 0000.0000 0000. Häufig wird jedoch die sehr<br />
lange und umständliche Darstellung mit <strong>der</strong> Angabe <strong>der</strong> Anzahl <strong>der</strong> ”<strong>E<strong>in</strong></strong>sen” <strong>in</strong> ihrer<br />
jeweiligen Darstellung abgekürzt.<br />
Klasse Beispiel Anzahl <strong>der</strong> <strong>E<strong>in</strong></strong>sen<br />
Class A 10.0.0.0 8<br />
Class B 132.230.0.0 16<br />
Class C 192.168.20.0 24<br />
Tabelle 5.2: Kurzdarstellung für Netze<br />
Wenn man classless Rout<strong>in</strong>g e<strong>in</strong>führt, dann haben Netze wie<strong>der</strong> Netzmasken von 0 bis<br />
32. Deshalb sollten als ”Endungen” von Netzmasken nur die dezimalen Zahlen 255, 254,<br />
252, 248, 240, 224, 192, 128, 0 auftreten. Man könnte natürlich versucht se<strong>in</strong>, kompliziertere<br />
Muster von Netzmasken zu bauen und statt e<strong>in</strong> Klasse C-Netz <strong>in</strong> <strong>der</strong> Mitte zu teilen,<br />
entlang <strong>der</strong> geraden und ungeraden IP-Nummern spalten. Dieses trägt jedoch extrem dazu<br />
bei, Rout<strong>in</strong>gtabellen nicht mehr durchschauen zu können und sei daher nur dem erfahrenen<br />
<strong>Netzwerk</strong>adm<strong>in</strong>istrator als Option genannt. Weiterh<strong>in</strong> wird man sich nicht immer darauf<br />
verlassen können, dass jede TCP/IP-Implementation sauber mit dieser Art von Netzmasken<br />
umgehen kann.<br />
5.5.5 Private IP-Adressen<br />
Der gesamte Adressbereich 127.b.c.d ist dem Loopback-Netz 10 zugeordnet, dabei handelt<br />
es sich um e<strong>in</strong> per Software simuliertes Netz. <strong>E<strong>in</strong></strong>zige Masch<strong>in</strong>e auf diesem loopback-Netz<br />
ist die eigene; evtl. mit verschiedenen Namen. Die Adresse 127.0.0.1 bezieht sich stets<br />
auf die eigene Masch<strong>in</strong>e; sie kann zu ke<strong>in</strong>en an<strong>der</strong>en Zwecken gebracht werden, als zur<br />
Def<strong>in</strong>ition des ”das s<strong>in</strong>d wir selbst”. Die Adresse a.b.c.0 ist für das lokale Netz (Netz”name”)<br />
reserviert. Die Adresse a.b.c.255 ist für Nachrichten ”an alle” (Broadcast) reserviert 11 .<br />
Folgende Adreßbereiche s<strong>in</strong>d zum Aufbau privater, nicht mit dem Internet verbundener<br />
<strong>Netzwerk</strong>e freigegeben:<br />
• 10.0.0.0 - 10.255.255.255<br />
10 siehe hierzu die Anmerkungen im vorherigen Abschnitt<br />
11 Das Beispiel bezieht sich auf e<strong>in</strong> Class-C <strong>Netzwerk</strong>, bei e<strong>in</strong>em Class-B sähe die <strong>der</strong> Netzname wie a.b.0.0<br />
und die Broadcastadresse wie a.b.255.255 aus.
52 KAPITEL 5. TCP-IP<br />
• 172.16.0.0 - 172.31.255.255<br />
• 192.168.0.0 - 192.168.255.255<br />
Diese Adressen werden im Internet nicht geroutet (d.h. die Pakete werden spätestens<br />
am Router des eigenen LAN zum Internet wegegeworfen).<br />
5.6 Der IP-Hea<strong>der</strong><br />
IP hat mehrere Aufgaben, dafür werden e<strong>in</strong>ige Informationen benötigt: Die Quell- und<br />
Zieladresse; Informationen zum Weiterreichen an die höhere <strong>Netzwerk</strong>schicht; Fragmentierung<br />
12 ; ”Verfallsdatum” 13 ; Länge des Pakets und die Prüfsumme.<br />
VERS.<br />
IPHL<br />
IDENTIFICATION<br />
TYPE OF SERV. TOTAL LENGTH<br />
D<br />
F<br />
M<br />
F<br />
SOURCE ADDRESS<br />
DESTINATION ADDRESS<br />
FRAGMENT OFFSET<br />
TIME TO LIVE PROTOCOL HEADER CHECKSUM<br />
Die e<strong>in</strong>zelnen Hea<strong>der</strong>-Bestandteile:<br />
32 bit<br />
OPTIONS (ZERO OR MORE WORDS)<br />
Abbildung 5.4: IP Paket-Hea<strong>der</strong><br />
• Version (4 bit) - Die Versionsnummer steht für die zu verwendende IP-Protokollversion.<br />
Derzeit üblicherweise verwendet wird IPv4.<br />
• H-Länge (4 bit): Die Hea<strong>der</strong>-Länge gibt an, wie viele 32 bit-Zeilen <strong>der</strong> gesamte IP-<br />
Hea<strong>der</strong> besitzt. Dadurch, dass das Optionen-Feld unterschiedlich lang werden kann,<br />
ist es s<strong>in</strong>nvoll zu wissen, ab wo das Protokoll <strong>der</strong> nächst höheren Schicht beg<strong>in</strong>nt.<br />
• Service-Type (8 bit): Das TOS-Feld (Type of Service) bestimmt, um welche Art von<br />
Daten es sich bei diesem Datagramm handelt. Diese Information ist hauptsächlich zu<br />
Zeiten von überlastetem <strong>Netzwerk</strong>verkehr nützlich. Hier macht es S<strong>in</strong>n die Anwendungsart<br />
(HTTP-Typ, FTP-Typ,...) <strong>der</strong> Daten zu wissen, um entsprechende Prioritäten<br />
beim Transport <strong>der</strong> Datagramme über e<strong>in</strong>e Verb<strong>in</strong>dungsleitung zu setzen.<br />
Wirklich verwendet wird dieses Feld jedoch nicht.<br />
• Länge (16 bit): Dieses Feld gibt an, wie viele Bytes das gesamte Datagramm überhaupt<br />
enthält.<br />
• Fragment-ID (16 bit): Gibt an um welches Paket es sich handelt. Das spielt eigentlich<br />
nur e<strong>in</strong>e Rolle, wenn fragmentiert werden muss. Da je<strong>der</strong> Sen<strong>der</strong> e<strong>in</strong>e ID <strong>in</strong> dieses<br />
Feld e<strong>in</strong>trägt, ist es Dritten durchaus möglich verschiedene Masch<strong>in</strong>en h<strong>in</strong>ter e<strong>in</strong>em<br />
Masquerad<strong>in</strong>g-Router zu identifizieren.<br />
12 nicht alle darunterliegenden physikalischen o<strong>der</strong> logischen Netze haben die gleichen Eigenschaften<br />
13 Unzustellbare Pakete müssen irgendwann das Netz wie<strong>der</strong> verlassen - also entsorgt werden
5.7. IP-ROUTING 53<br />
• Flags (3 bit): Flags werden für die Fragmentierung benutzt, auf die im nächsten Abschnitt<br />
genauer e<strong>in</strong>gegangen werden soll.<br />
• Fragment-Offset (13 bit): Gibt an, an welcher Stelle das Fragment e<strong>in</strong>gefügt werden<br />
muss.<br />
• TTL (8-Bits): Das Time-To-Live gibt an, wie viele verschiedene Netze (Hops) das<br />
Datagramm auf se<strong>in</strong>er Reise noch benutzen darf. Somit wird verh<strong>in</strong><strong>der</strong>t, dass Datagramme<br />
endlos im <strong>Netzwerk</strong> herumirren.<br />
• Höheres Protokoll (8 bit): Hiermit wir angegeben, um welches Protokoll es sich <strong>in</strong> <strong>der</strong><br />
nächsthöheren Schicht, also <strong>der</strong> Transportschicht, handelt. <strong>E<strong>in</strong></strong> Wert von 6 bedeutet,<br />
dass das TCP-Segment über den entsprechenden Port an das TCP weiter verabreicht<br />
werden soll. <strong>E<strong>in</strong></strong> Wert von 5 deutet h<strong>in</strong>gegen auf das UDP <strong>in</strong> <strong>der</strong> Transportschicht<br />
h<strong>in</strong>. Die Protokollnummer wird im IP-Jargon als <strong>der</strong> ”Klebstoff” bezeichnet, welcher<br />
die <strong>Netzwerk</strong>schicht mit <strong>der</strong> Transportschicht verb<strong>in</strong>det. Die Zuordnungen von<br />
Protokollen und Nummern f<strong>in</strong>det man <strong>in</strong> <strong>der</strong> Datei /etc/protocols.<br />
• Prüfsumme (16 bit): Dieses Feld besitzt dieselbe Funktion wie das Prüfsummen-Feld<br />
im TCP/UDP. Sie dient <strong>der</strong> Detektion von Bit-Fehlern <strong>in</strong> e<strong>in</strong>em empfangenen Datagramm.<br />
Es stellt sich an dieser Stelle nun die Frage, warum sowohl auf <strong>der</strong> Transportschicht<br />
als auch auf <strong>der</strong> Vermittlungsschicht e<strong>in</strong>e Prüfsumme berechnet wird. <strong>E<strong>in</strong></strong><br />
offensichtlicher Grund dafür ist, dass sowohl auf <strong>der</strong> Vermittlungsschicht als auch auf<br />
<strong>der</strong> Transportschicht an<strong>der</strong>e, wenn auch nicht häufig verwendete Protokolle existieren,<br />
die ke<strong>in</strong>e Prüfsummenberechnung durchführen, so dass es s<strong>in</strong>nvoll se<strong>in</strong> kann, die<br />
Überprüfung <strong>der</strong> Korrektheit mittels <strong>der</strong> Prüfsummenberechnung auf beiden Schichten<br />
durchzuführen.<br />
• Quell-IP-Adresse (32 bit): Gibt an, von welcher IP-Adresse das Datagramm ursprünglich<br />
kommt.<br />
• Ziel-IP-Adress (32 bit): Gibt an, zu welcher IP-Adresse das Datagramm verschickt<br />
werden soll.<br />
• Optionen (je 32 bit): Diese Fel<strong>der</strong> dienen <strong>der</strong> Erweiterung des IP-Hea<strong>der</strong>s.<br />
5.6.1 Fragmentierung<br />
Manche Teilstrecken im <strong>Netzwerk</strong> können nicht mit beliebigen Datagrammgrößen hantieren.<br />
Jedes <strong>Netzwerk</strong>teilstück besitzt deshalb e<strong>in</strong>e maximale Datagrammgröße MTU (Maximal<br />
Transmission Unit). Die Router, die Datagramme zu diesen Routern senden, müssen also<br />
stets überprüfen, ob die Größe <strong>der</strong> zu sendenden Datagramme die MTU <strong>der</strong> empfangenden<br />
Router nicht übertreffen. Sollte dies <strong>der</strong> Fall se<strong>in</strong>, so werden die jeweiligen Datagramme<br />
fragmentiert. Wenn e<strong>in</strong> Datagramm fragmentiert wird, so werden mehrere kle<strong>in</strong>ere Datagramme<br />
erstellt, die dieselbe ID haben, jedoch e<strong>in</strong> gesetztes Fragment-Flag enthalten.<br />
Durch das Fragment-Offset wird zudem angegeben, an welcher Stelle das Fragment <strong>in</strong> das<br />
Datagramm e<strong>in</strong>gefügt werden muss. Beim letzten Fragment ist das Fragment-Flag gelöscht,<br />
um anzuzeigen, dass ke<strong>in</strong>e weiteren Fragmente mehr folgen.<br />
5.7 IP-Rout<strong>in</strong>g<br />
<strong>E<strong>in</strong></strong>e entscheidende Aufgabe des Internet-Protkolls ist die Verb<strong>in</strong>dung verschiedener Teilnetze<br />
untere<strong>in</strong>e<strong>in</strong><strong>der</strong>. Hierzu muss es e<strong>in</strong>e geeignete Paketweiterleitung implementieren. Diese
54 KAPITEL 5. TCP-IP<br />
wird als Rout<strong>in</strong>g bezeichnet. Zur <strong>E<strong>in</strong></strong>ordnung sei wie<strong>der</strong>holt, dass IP e<strong>in</strong> verb<strong>in</strong>dungsloses<br />
paketorientiertes Protokoll ist, welches def<strong>in</strong>iert wurde, um die exklusive Belegung e<strong>in</strong>es<br />
Datenkanals zu verh<strong>in</strong><strong>der</strong>n. Erst auf darüberligenden Schichten kann <strong>der</strong> Nutzer entscheiden,<br />
ob er verb<strong>in</strong>dungsorientierte o<strong>der</strong> -lose Kommunikation wünscht. TCP arbeitet verb<strong>in</strong>dungsorientiert,<br />
UDP schafft e<strong>in</strong>en e<strong>in</strong>fachen Datagrammrahmen, <strong>der</strong> direkt auf IP aufsetzt.<br />
Die Weiterleitungsentscheidung erfolgt beim Internet-Protokoll für jedes e<strong>in</strong>zelne Paket<br />
neu. Damit das Rout<strong>in</strong>g möglichst effizient erfolgen konnte, sollten IP-Adressen selbsterklärend<br />
se<strong>in</strong>, d.h. sie besitzen e<strong>in</strong> Präfix zur <strong>Netzwerk</strong>kennung. Mit dem Suffix wird <strong>der</strong><br />
Host im Teilnetz identifiziert. Deshalb erfolgte ursprünglich e<strong>in</strong>e Klassene<strong>in</strong>teilung des gesamten<br />
IP-Adressraumes <strong>in</strong> Klassen. Die Klassen A bis C def<strong>in</strong>ierten dabei gültige Adressen<br />
mit fest vorgegebenen Prä- und Suffixlängen. Spezielle Adressen werden für die <strong>Netzwerk</strong>kennung<br />
e<strong>in</strong>geführt. So s<strong>in</strong>d <strong>Netzwerk</strong>e neben an<strong>der</strong>en IP-Spezialadressen <strong>in</strong>nerhalb des<br />
Namesraumes zu kennzeichnen. Mit dieser Festlegung ist e<strong>in</strong>e gewisse Hierarchisierung <strong>der</strong><br />
Verteilung von IP-Adressen möglich.<br />
5.7.1 Pr<strong>in</strong>zip <strong>der</strong> IP-Netze<br />
Bei <strong>der</strong> Planung e<strong>in</strong>es lokalen Netzes gibt es zwei Zielsetzungen:<br />
Direkter Datenverkehr zwischen allen lokalen Masch<strong>in</strong>en ohne Umweg über den Router<br />
(sonst unnötige Belastung und Verzögerung)<br />
Begrenzung <strong>der</strong> ”Reichweite” <strong>der</strong> Datenpakete auf das kle<strong>in</strong>st-mögliche Teil-Netz<br />
(aus Sicherheitsgründen und zum Schutz an<strong>der</strong>er Teil-Netze vor unnötiger Belastung)<br />
Die <strong>E<strong>in</strong></strong>stellungen zum Umsetzen dieser Ziele s<strong>in</strong>d:<br />
Bezeichnung Beschreibung<br />
networkaddress<br />
Adresse des eigenen Teil-Netzes, Vergleich mit IP-<br />
Adresse gibt an, ob e<strong>in</strong> Datenpaket zum lokalen Netz<br />
gehört o<strong>der</strong> nicht<br />
subnet-mask Bitmaske zum Herausstanzen <strong>der</strong> <strong>Netzwerk</strong>- Adresse<br />
aus <strong>der</strong> IP-Adresse e<strong>in</strong>er Masch<strong>in</strong>e<br />
ip-address Eigene Adresse <strong>der</strong> Masch<strong>in</strong>e<br />
Tabelle 5.3: Abgrenzung <strong>der</strong> ”Reichweite” des lokalen Netzes<br />
address 192.168.25.3 11000000.10101000.00011001.00000011<br />
netmask 255.255.255.0 11111111.11111111.11111111.00000000<br />
network 192.168.25.0 11000000.10101000.00011001.00000000<br />
In diesem Beispiel bilden alle 254 Masch<strong>in</strong>en mit <strong>der</strong> Adresse 192.168.25.N e<strong>in</strong> geme<strong>in</strong>sames<br />
<strong>Netzwerk</strong>. Darüberh<strong>in</strong>aus gibt es noch die ”broadcast-address”, die e<strong>in</strong>e Adresse<br />
für Nachrichten ”an alle” <strong>in</strong> diesem Teil-Netz ist. Rechnet man die Netzadresse 14 und die<br />
Broadcast-Adresse 15 h<strong>in</strong>zu, kommt man für e<strong>in</strong> Class-C-Netz, wie hier dargestellt, auf 256<br />
IP-Adressen (= 2 8 ).<br />
14 die kle<strong>in</strong>ste Adresse im Teilnetz, dieses ist e<strong>in</strong>e nicht vergebbare IP!<br />
15 die grösste Adresse im Teilnetz, auch diese IP sollte nicht für Rechner vergeben werden!
5.7. IP-ROUTING 55<br />
5.7.2 Rout<strong>in</strong>g (Die Wege im Netz)<br />
Der Datenverkehr f<strong>in</strong>det zwischen den <strong>Netzwerk</strong>schnittstellen <strong>der</strong> Internet-Rechner statt.<br />
<strong>E<strong>in</strong></strong> L<strong>in</strong>ux-PC kann mehrere <strong>Netzwerk</strong>schnittstellen besitzen und als Vermittlungsstelle zwischen<br />
verschiedenen Netzen (Router) dienen. Dann kann es jedoch notwendig se<strong>in</strong>, die<br />
Rout<strong>in</strong>g-(d.h. Paketforward<strong>in</strong>g-)Fähigkeit des Kernels e<strong>in</strong>zuschalten. Dieses kann für jedes<br />
Interface e<strong>in</strong>zeln def<strong>in</strong>iert werden. Der Name e<strong>in</strong>er <strong>Netzwerk</strong>schnittstelle hängt von <strong>der</strong> verwendeten<br />
<strong>Netzwerk</strong>technik ab (nicht etwa vom Hersteller <strong>der</strong> <strong>E<strong>in</strong></strong>steckkarte, wie bei an<strong>der</strong>en<br />
Systemen).<br />
Der Befehl route zeigt an, wie <strong>der</strong> Betriebssystemkern Datenpakete an die verschiedenen<br />
Empfänger verschickt:<br />
shuttle:~/ > /sb<strong>in</strong>/route -n<br />
Kernel IP rout<strong>in</strong>g table<br />
Dest<strong>in</strong>ation Gateway Genmask Flags Metric Ref Use Iface<br />
10.1.1.11 10.2.13.254 255.255.255.255 UGH 0 0 0 wlan0<br />
10.8.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0<br />
10.2.13.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0<br />
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo<br />
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 tun0<br />
Alle gerade aktuellen Routen im <strong>E<strong>in</strong></strong>zelnen kann man sich mit route -C anzeigen lassen.<br />
Diese Liste wird aber <strong>in</strong> grösseren Netzen bzw. auf Gatewayrechnern sehr schnell sehr lang<br />
werden. Informationen zum Rout<strong>in</strong>g können auch mit den Kommandos ip route o<strong>der</strong><br />
netstat -r erhalten werden. Jedes dieser Programme greift dabei auf das Kernel-Proc-<br />
Interface zu.<br />
<strong>E<strong>in</strong></strong>e klassische Konfiguration sieht wie angezeigt aus: Es ist das lokale Ethernet def<strong>in</strong>iert,<br />
<strong>in</strong> dem alle teilnehmenden Systeme ohne Router/Gateway erreicht werden können.<br />
Alles was <strong>in</strong> diesem Bereich nicht zugestellt werden kann, wird dem Defaultrouter zur weiteren<br />
Zustellung überlassen. ”default” hat die IP 0.0.0.0 und me<strong>in</strong>t das ganze Internet,<br />
also den verbleibenden Rest, wenn die erste Route nicht angewendet werden konnte. Der<br />
Defaultrouter (bzw. Defautlgateway) muss bereits <strong>in</strong> e<strong>in</strong>em darüber def<strong>in</strong>ierten Rout<strong>in</strong>ge<strong>in</strong>trag<br />
bekannt gemacht worden se<strong>in</strong> (Mitglied im entsprechenden Subnetz se<strong>in</strong>), da es sonst<br />
nicht erreicht werden kann! So genügt es zum Transport von IP-Paketen, dass je<strong>der</strong> Rechner<br />
im Internet entsprechend se<strong>in</strong>es Horizontes Systeme kennt, die wie<strong>der</strong> die weiteren Wege im<br />
Netz kennen. Bei den Flags deutet ”G” an, dass es sich um e<strong>in</strong>e Gatewayroute handelt, also<br />
die Pakete nicht im lokalen Subnetz zugestellt werden. ”H” deutet e<strong>in</strong>e Hostroute an, dieses<br />
ist e<strong>in</strong>e spezielle Form e<strong>in</strong>es Sub-Netzes, da hier Po<strong>in</strong>t-to-Po<strong>in</strong>t- Verb<strong>in</strong>dungen def<strong>in</strong>iert<br />
werden.<br />
traceroute dient zur Verfolgung des kompletten Weges, den Datenpakete zu e<strong>in</strong>em<br />
bestimmten Empfänger e<strong>in</strong>schlagen, z.B. zu traceroute www.heise.de:<br />
shuttle:~ # traceroute www.heise.de<br />
traceroute to www.heise.de (193.99.144.85), 30 hops max, 40 byte packets<br />
1 10.1.1.11 4.992 ms 4.318 ms 6.315 ms<br />
2 132.230.120.142 8.262 ms 10.373 ms *<br />
3 nsc-rz-gwn.fun.uni-freiburg.de (132.230.0.141) 7.938 ms 7.307 ms \<br />
7.639 ms<br />
4 Freiburg1.Belwue.DE (129.143.15.141) 7.641 ms 9.846 ms 10.699 ms<br />
5 Stuttgart1.BelWue.DE (129.143.1.7) 17.109 ms 17.503 ms 17.258 ms<br />
6 Frankfurt1.belwue.de (129.143.1.26) 20.153 ms 20.314 ms 21.000 ms<br />
7 de-cix.ffm.plusl<strong>in</strong>e.net (80.81.192.132) 20.998 ms 20.211 ms \<br />
20.627 ms<br />
8 heise2.f.de.plusl<strong>in</strong>e.net (213.83.57.57) 14.674 ms * 13.516 ms
56 KAPITEL 5. TCP-IP<br />
9 * heise2.f.de.plusl<strong>in</strong>e.net (213.83.57.57) 13.433 ms 13.599 ms<br />
10 * * heise2.f.de.plusl<strong>in</strong>e.net (213.83.57.57)(N!) 13.537 ms<br />
<strong>E<strong>in</strong></strong> weiteres Tool, auch zur grafischen Visualisierung, ist mtr, ”My Traceroute”.<br />
”Router” leiten Datenpakete an entfernte Masch<strong>in</strong>en und sorgen für den Datenaustausch<br />
zwischen Teilnetzen. U.U. müssen die Pakete bis zum Ziel über mehrere Router<br />
geleitet werden; darauf hat man aber ke<strong>in</strong>en <strong>E<strong>in</strong></strong>fluß. ”Router” o<strong>der</strong> ”Gateway” wird meist<br />
synonym verwendet, wobei e<strong>in</strong> ”Gateway” eigentlich grundverschiedene Netze (Protokolle)<br />
mite<strong>in</strong>an<strong>der</strong> verb<strong>in</strong>det.<br />
Der Rout<strong>in</strong>ge<strong>in</strong>trag, <strong>der</strong> zu e<strong>in</strong>em bestimmten Interface gehört (im obigen Beispiel <strong>der</strong><br />
erste <strong>E<strong>in</strong></strong>trag) erfolgt ab dem Kernel Version 2.2 automatisch, wenn <strong>der</strong> Systemadm<strong>in</strong>istrator<br />
das Interface konfiguriert. Alle weiteren Rout<strong>in</strong>ge<strong>in</strong>träge müssen manuell über das<br />
Kommando route erfolgen, was für den obigen Fall (ungekürzt) so aussehen würde:<br />
shuttle:~/ # route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.156.1<br />
Da man diesen Vorgang nicht jedesmal beim Neustart des <strong>Netzwerk</strong>es o<strong>der</strong> des ganzen<br />
Rechners wie<strong>der</strong>holen möchte, können die weiteren Rout<strong>in</strong>ge<strong>in</strong>träge ublicherweise <strong>in</strong> <strong>der</strong><br />
<strong>Netzwerk</strong>konfiguration h<strong>in</strong>terlegt werden. 16<br />
5.7.3 <strong>E<strong>in</strong></strong>faches Hostrout<strong>in</strong>g<br />
Wie werden Pakete bei e<strong>in</strong>fachen Hosts, d.h. Masch<strong>in</strong>en mit e<strong>in</strong>er e<strong>in</strong>zigen <strong>Netzwerk</strong>verb<strong>in</strong>dung<br />
zugestellt? Jede Masch<strong>in</strong>e benötigt e<strong>in</strong>e eigene IP-Nummer, z.B. 192.168.20.2. Dieses<br />
ist e<strong>in</strong>e gültige Adresse aus dem Bereich des genannten Beispielnetzes von 192.168.20.1<br />
- 192.168.20.254. Insgesamt können also 254 IP-Nummern vergeben werden, da von den<br />
256 Möglichkeiten die <strong>Netzwerk</strong>nummer und die Broadcastadresse abzuziehen s<strong>in</strong>d. Die<br />
Verwaltung des <strong>Netzwerk</strong>es erfolgt auf den Routern und durch geeignete IP-Vergabe an<br />
die Hosts. Alle <strong>E<strong>in</strong></strong>tragungen erfolgen manuell. Jedoch sollte man beachten, dass IP nicht<br />
überprüft, ob bestimmte Adressen bereits vergeben wurden. Für die dynamische Zuweisung<br />
von IP-Adressen an Hosts hat sich das Dynamic Host Configuration Protocol als Standard<br />
herausgebildet. Dieses wird <strong>in</strong> e<strong>in</strong>em weiteren Abschnitt näher beleuchtet.<br />
Je<strong>der</strong> Host des Beispielnetzes enthält Rout<strong>in</strong>gtabelle. Diese fällt je nach Zahl <strong>der</strong> Interfaces<br />
und angeschlossenen <strong>Netzwerk</strong>e unterschiedlich komplex aus.<br />
<strong>Netzwerk</strong> Netzmaske Router-IP Interface<br />
192.168.20.0 255.255.255.0 - Ethernet, TokenR<strong>in</strong>g, ...<br />
127.0.0.1 255.0.0.0 - Loopback-Interface<br />
0.0.0.0 0.0.0.0 192.168.20.254 Defaultroute<br />
Tabelle 5.4: Rout<strong>in</strong>gtabelle e<strong>in</strong>es Hosts<br />
Die Defaultroute dient für alle an<strong>der</strong>en Adressen, die im eigenen Netz nicht zustellbar<br />
s<strong>in</strong>d. Deshalb wurde die Bezeichnung Defaultroute gewählt. Damit Pakete weitergeleitet<br />
werden können, muss jedoch m<strong>in</strong>destens e<strong>in</strong> Router Mitglied des jeweiligen Teilnetzes se<strong>in</strong>.<br />
5.7.4 Rout<strong>in</strong>gentscheidung<br />
Rout<strong>in</strong>gentscheidungen erfolgen meistens entlang komplexerer Tabellen, als den <strong>in</strong> Hosts<br />
verwendeten. Viele Pakete an Knotenroutern mit vielen Interfaces und hohen Bandbreiten<br />
legen e<strong>in</strong>e hardwarenahe Implementierung nahe. Durch die Bildung e<strong>in</strong>es “logischen UND”<br />
16 Die Konzepte unterscheiden sich dabei von Distribution zu Distribution durchaus erheblich.
5.7. IP-ROUTING 57<br />
aus Ziel-IP und Netzmaske wird durch den Vergleich mit den Netzadressen ermittelt, ob<br />
e<strong>in</strong>e Route verwendet wird o<strong>der</strong> nicht.<br />
Z.B. für das Ziel: 192.168.20.5 & 255.255.255.0 ergibt 192.168.20.0. Dieses wird mit<br />
<strong>der</strong> Netzadresse verglichen. Wenn es passt, schicke auf diese. An<strong>der</strong>nfalls probiere nächste,<br />
z.B. bei 24.46.192.77 & 255.255.255.0 ergibt 24.46.192.0 ungleich, also nächster Versuch<br />
24.46.192.77 & 0.0.0.0 errechnet sich zu 0.0.0.0 - passt immer auf die Defaultroute.<br />
Dabei startet man bei <strong>der</strong> kle<strong>in</strong>sten Netzmaske, also dem Netz mit den wenigsten Hosts.<br />
Dann arbeitet man sich sukzessive bis zur größten Netzmaske 17 alle e<strong>in</strong>getragenen Routen<br />
ab. Die Defaultroute ist dabei e<strong>in</strong>e Konvention zur Vere<strong>in</strong>fachung <strong>der</strong> Rout<strong>in</strong>gtabellen.<br />
Ke<strong>in</strong> Router kennt alle die Wege zu allen Internet-Adressen direkt, da fast je<strong>der</strong> Router nur<br />
e<strong>in</strong>en Bruchteil des Adressbereiches verwaltet. Je<strong>der</strong> dieser Router hat e<strong>in</strong>e Route für alle<br />
restlichen Bereiche. Auch e<strong>in</strong> e<strong>in</strong>facher Host kann mehrere Routen für verschiedene Netze<br />
kennen, falls mehrere Router <strong>in</strong> se<strong>in</strong>em Teilnetz vorhanden s<strong>in</strong>d.<br />
<strong>E<strong>in</strong></strong>e Entscheidungstabelle e<strong>in</strong>es Routers könnte wie im nachstehend gezeigten Beispiel<br />
aussehen. Die Netzmaske entscheidet über Reihenfolge <strong>der</strong> <strong>E<strong>in</strong></strong>träge <strong>in</strong> <strong>der</strong> Rout<strong>in</strong>gtabelle.<br />
Im Extremfall kann es also passieren, dass e<strong>in</strong> Paket gegen jede Regel geprüft wird.<br />
Netz Netzmaske Gateway/Router Interface<br />
192.168.20.128 255.255.255.128 192.2.2.2 #1<br />
192.168.20.0 256.255.255.128 193.2.2.3 #1<br />
10.10.2.0 255.255.255.0 10.10.255.254 #2<br />
10.10.0.0 255.255.0.0 10.10.0.254 #3<br />
10.4.0.0 255.252.0.0 10.10.0.254 #4<br />
10.0.0.0 255.0.0.0 192.168.2.5 #1<br />
0.0.0.0 0.0.0.0 10.10.0.254 #3<br />
Tabelle 5.5: Beispiel e<strong>in</strong>er möglichen Rout<strong>in</strong>gtabelle<br />
<strong>E<strong>in</strong></strong>e Verwaltung von Rout<strong>in</strong>g<strong>in</strong>formationen <strong>in</strong> größeren <strong>Netzwerk</strong>en wird sehr schnell<br />
recht aufwändig. Deshalb wurden Protkolle entwickelt, um e<strong>in</strong>ige Aspekte automatisieren<br />
zu können.<br />
Dynamisches Rout<strong>in</strong>g soll Ausfälle erkennen und Alternativrouten f<strong>in</strong>den und e<strong>in</strong>tragen.<br />
Hierzu s<strong>in</strong>d verschiedene Strategien möglich:<br />
Hop-Count: Wieviele Router liegen auf dem Weg von A nach B (was ist jedoch, wenn<br />
<strong>der</strong> Weg über e<strong>in</strong>e langsame ISDN-Leitung viel kürzer ist, als <strong>der</strong> ”Umweg” über e<strong>in</strong> viel<br />
schnelleres LAN)<br />
Open Shortest Path First: Rout<strong>in</strong>gmetrik nimmt weitere Kennzahlen e<strong>in</strong>er Route auf<br />
BGP: Bor<strong>der</strong>-Gateway-Protokolle für Router an den Grenzen großer <strong>Netzwerk</strong>e<br />
Obwohl Adressen zentral vergeben werden, erreicht man kaum e<strong>in</strong>e nähere geografische<br />
Zuordnung 18 als auf Län<strong>der</strong> o<strong>der</strong> Kont<strong>in</strong>entebene. Lokal nahe beie<strong>in</strong>an<strong>der</strong> liegende Firmen<br />
o<strong>der</strong> Organisationen können durchaus netzwerktopologisch gewaltige Entfernungen besitzen,<br />
wenn sie über verschiedene Provi<strong>der</strong> angeschlossen s<strong>in</strong>d. IP-Netze s<strong>in</strong>d eher daher eher<br />
als ”provi<strong>der</strong>-based” zu bezeichnen.<br />
17 0.0.0.0 das gesamte Internet<br />
18 Auch wenn es Firmen gibt, die zu je<strong>der</strong> IP-Adresse e<strong>in</strong>e ungefähre bis genaue geografische Koord<strong>in</strong>ate<br />
liefern können.
58 KAPITEL 5. TCP-IP<br />
5.7.5 Subnett<strong>in</strong>g und Supernett<strong>in</strong>g<br />
Frühe Router <strong>in</strong>terpretierten zur Ermittlung <strong>der</strong> Adressklasse die ersten vier Bits und verwalteten<br />
diese <strong>in</strong> e<strong>in</strong>er Tabelle zur schnelleren Bearbeitung. Dieses Konzept ist nicht mehr<br />
wirklich praktikabel, denn z.B. Uni-Freiburg hat mit Netzadresse 132.230.0.0 und Netzmaske<br />
255.255.0.0 e<strong>in</strong> Klasse-B-Netz. Aber: Nicht alle Rechner können <strong>in</strong> e<strong>in</strong>em Ethernet<br />
o.ä. zusammengefaßt werden, damit ist e<strong>in</strong> Rout<strong>in</strong>g wie im Beispiel kaum s<strong>in</strong>nvoll. Noch<br />
extremer: Besitzer von Klasse-A-Netzen können nicht mehrere Millionen Rechner direkt<br />
verwalten. In diesen Netzen wird üblicherweise e<strong>in</strong> Subnett<strong>in</strong>g zur besseren Abtrennung<br />
verschiedener Netze untere<strong>in</strong>an<strong>der</strong> betrieben. Damit reduziert sich die Broadcast-Doma<strong>in</strong><br />
und es wird e<strong>in</strong>e Strukturierung des Netzes erreicht. Mit <strong>der</strong> Knappheit <strong>der</strong> IP-Adressen im<br />
Netzmaske Bitmuster <strong>der</strong> Netzmaske Teilnetze Anzahl IP’s<br />
255.255.0.0 11111111.11111111.00000000.00000000 1 65.536<br />
255.255.128.0 11111111.11111111.10000000.00000000 2 32.768<br />
255.255.192.0 11111111.11111111.11000000.00000000 4 16.384<br />
255.255.224.0 11111111.11111111.11100000.00000000 8 8.192<br />
255.255.240.0 11111111.11111111.11110000.00000000 16 4.096<br />
255.255.248.0 11111111.11111111.11111000.00000000 32 2.048<br />
255.255.252.0 11111111.11111111.11111100.00000000 64 1.024<br />
255.255.254.0 11111111.11111111.11111110.00000000 128 512<br />
255.255.255.0 11111111.11111111.11111111.00000000 256 256<br />
Tabelle 5.6: Subnett<strong>in</strong>g <strong>in</strong> ”Klasse-B-<strong>Netzwerk</strong>en”<br />
<strong>der</strong>zeitigen IPv4-Adressraum von 2 32 (weniger etlicher Spezialadressen, siehe dazu bisherige<br />
Ausführungen) gab es e<strong>in</strong>e Reihe von Ansätzen das ”Ende” von IPv4 herauszuzögern. <strong>E<strong>in</strong></strong><br />
Ansatz ist das ”classless rout<strong>in</strong>g” und das ”subnett<strong>in</strong>g”. Netze können nun im Bereich <strong>der</strong><br />
Adressen 1.0.0.0 - 223.255.255.255 beliebig zusammengefasst und geteilt werden. Für die<br />
Rout<strong>in</strong>g<strong>in</strong>formationen wird nun jedoch immer die Subnetzmaske mit zu übermitteln se<strong>in</strong>,<br />
da sich diese nicht mehr aus <strong>der</strong> ersten Bitfolge <strong>der</strong> IP ergibt.<br />
Damit: <strong>E<strong>in</strong></strong> flexibleres Schema ist notwendig. Klassen dürfen beliebig <strong>in</strong> Subklassen<br />
aufgeteilt werden, z.B. kann das RZ <strong>der</strong> Uni-Freiburg e<strong>in</strong>zelnen Bereichen sog. Subnetze<br />
zuweisen. Aus <strong>der</strong> Aufteilung <strong>der</strong> höheren Klassen entstehen aus e<strong>in</strong>em Klasse B Netz mit<br />
65.535 Rechnern werden dann 256 Klasse C Netze mit 254 Rechnern pro Netz. Trotzdem<br />
müssen sich Router weltweit weiterh<strong>in</strong> nur 132.230.0.0 als Netzadresse merken, da Netze<br />
mittels Supernett<strong>in</strong>g zusammengefaßt werden können.<br />
Supernett<strong>in</strong>g kann z.B. zwei Klasse C Netze, wie 192.168.2.0 und 192.168.3.0, zu e<strong>in</strong>em<br />
Netz zusammenfassen und für dieses dann die Maske 255.255.254.0 verwenden. Supernett<strong>in</strong>g<br />
kann damit ”Adressverschwendung” verh<strong>in</strong><strong>der</strong>n: Ausgabe e<strong>in</strong>es Klasse B Netzes für<br />
e<strong>in</strong>e Organisation mit 500 Rechnern. Dann: IP-Adresse ist nicht mehr wie ursprünglich<br />
selbsterklärend deklariert, denn nun muss die Netzmaske zw<strong>in</strong>gend mit übermittelt werden.<br />
Die Netzmaske liefert aus ihrer Folge von ”1” und ”0” die Aufteilung zwischen <strong>Netzwerk</strong>teil<br />
<strong>der</strong> IP-Adresse und dem Hostteil. Diese Unterteilung bestimmt, welche Adressen<br />
<strong>in</strong> e<strong>in</strong>em lokalen Netz vergeben werden können. Diese können <strong>in</strong> diesem Netz ohne Router<br />
mite<strong>in</strong>an<strong>der</strong> direkt über ARP kommunizieren. Dabei sollten <strong>in</strong> <strong>der</strong> Folge nur ”1” gefolgt<br />
von nur ”0” stehen 19 , z.B.:<br />
19 Daraus folgt, dass nur die Zahlen 0, 128, 192, 224, 240, 248, 252, 254, 255 <strong>in</strong> <strong>der</strong> Netzmaske vorkommen<br />
können. An<strong>der</strong>e Muster wären möglich aber eventuell ordentlich verwirrend. Siehe Anmerkungen dazu weiter
5.7. IP-ROUTING 59<br />
netmask 255.255.255.0 11111111.11111111.11111111.00000000<br />
netmask 255.255.252.0 11111111.11111111.11111100.00000000<br />
netmask 255.255.0.0 11111111.11111111.00000000.00000000<br />
Die erste Beispielmaske ist e<strong>in</strong>e Class-C-Maske und die letzte, die e<strong>in</strong>es Class-B-Netzes.<br />
Es spielt nun aber ke<strong>in</strong>e Rolle mehr, wie das erste Bitmuster <strong>der</strong> IP-Adresse aussieht. Geht<br />
man z.B. davon aus, dass e<strong>in</strong> Class-B-Netz aufgeteilt werden soll, dann geschieht das wie<br />
folgt:<br />
Das gezeigte Muster kann natürlich auch ausgehend von e<strong>in</strong>em Class-A-Netz durchgeführt<br />
werden, wobei dann <strong>der</strong> letzte Tabellenwert mit 256 zu multiplizieren ist. Geht<br />
man von e<strong>in</strong>em Class-C-Netz aus, muss <strong>der</strong> letzte Wert h<strong>in</strong>gegen durch 256 geteilt werden.<br />
Wendet man dieses Beispiel nun auf e<strong>in</strong> konkretes Teilnetz an, z.B. auf das Class-B-<br />
Netz 134.76.0.0, dann ergibt sich das Bild (Tabelle 5.7.5) bei gleichmässiger Aufteilung.<br />
Die Tabellen könnten natürlich noch weiter fortgesetzt werden, aber das Pr<strong>in</strong>zip sollte klar<br />
Teilnetze Netzadresse(n) Netzmaske Broadcastadresse(n) Zahl <strong>der</strong> IP’s<br />
1 134.76.0.0 255.255.0.0 134.76.255.255 65.536<br />
2 134.76.0.0 255.255.128.0 134.76.127.255 32.768<br />
134.76.128.0 255.255.128.0 134.76.255.255 32.768<br />
4 134.76.0.0 255.255.192.0 134.76.63.255 16.384<br />
134.76.64.0 255.255.192.0 134.76.127.255 16.384<br />
134.76.128.0 255.255.192.0 134.76.191.255 16.384<br />
134.76.192.0 255.255.192.0 134.76.255.255 16.384<br />
8 134.76.0.0 255.255.224.0 134.76.31.255 8.192<br />
134.76.32.0 255.255.224.0 134.76.63.255 8.192<br />
134.76.64.0 255.255.224.0 134.76.127.255 8.192<br />
134.76.96.0 255.255.224.0 134.76.159.255 8.192<br />
134.76.128.0 255.255.224.0 134.76.191.255 8.192<br />
134.76.160.0 255.255.224.0 134.76.191.255 8.192<br />
134.76.192.0 255.255.224.0 134.76.223.255 8.192<br />
134.76.224.0 255.255.224.0 134.76.255.255 4.096<br />
Tabelle 5.7: Beispiele e<strong>in</strong>er Aufteilung <strong>in</strong> bis zu acht Teilnetze<br />
geworden se<strong>in</strong>. Es ist jedoch nicht erfor<strong>der</strong>lich e<strong>in</strong> Netz <strong>in</strong> gleiche Teile zu unterglie<strong>der</strong>n,<br />
son<strong>der</strong>n es können auch unterschiedlich grosse Teilbereiche def<strong>in</strong>iert werden, wobei sich<br />
jedoch je<strong>der</strong> Teilbereich <strong>in</strong> die se<strong>in</strong>em Bitmuster passenden Blöcke e<strong>in</strong>fügen muss 20 . Das<br />
angegebene Beispiel könnte also auch so aussehen, wie <strong>in</strong> Tabelle ?? gezeigt. Subnett<strong>in</strong>g<br />
und Supernett<strong>in</strong>g haben wesentlich dazu beigetragen, dass IPv4 immer noch reicht. Dadurch<br />
wird Rout<strong>in</strong>g aufwändiger, da Router nicht mehr anhand <strong>der</strong> ersten vier Stellen<br />
<strong>der</strong> Adresse über <strong>der</strong>en Maske entscheiden können. Router benötigen mehr Speicher für<br />
die Komb<strong>in</strong>ation aus Netznamen und Netzmaske. Adressklassen s<strong>in</strong>d nun von eher historischer<br />
Bedeutung. Problem: Wie werden ehemals ”reservierte” Adressen, wie Broadcast und<br />
Netznamen behandelt, die nun evtl. reguläre Adressen <strong>in</strong> zusammengefaßten Netzen s<strong>in</strong>d?<br />
oben<br />
20 Das bedeutet z.B. im Beispiel, dass e<strong>in</strong>e Netzadresse wie 134.76.60.3.0 bei e<strong>in</strong>er Netzmaske von<br />
255.255.248 ungültig ist. Die Startadresse kann 134.76.[0,7,15,23,...].0 se<strong>in</strong>.
60 KAPITEL 5. TCP-IP<br />
Teilnetze Netzadresse(n) Netzmaske Broadcastadresse(n) Zahl <strong>der</strong> IP’s<br />
16 134.76.0.0 255.255.240.0 134.76.15.255 4.096<br />
134.76.16.0 255.255.240.0 134.76.31.255 4.096<br />
134.76.32.0 255.255.240.0 134.76.47.255 4.096<br />
134.76.48.0 255.255.240.0 134.76.63.255 4.096<br />
134.76.64.0 255.255.240.0 134.76.79.255 4.096<br />
134.76.80.0 255.255.240.0 134.76.95.255 4.096<br />
134.76.96.0 255.255.240.0 134.76.111.255 4.096<br />
134.76.112.0 255.255.240.0 134.76.127.255 4.096<br />
134.76.128.0 255.255.240.0 134.76.143.255 4.096<br />
134.76.144.0 255.255.240.0 134.76.159.255 4.096<br />
134.76.160.0 255.255.240.0 134.76.175.255 4.096<br />
134.76.176.0 255.255.240.0 134.76.191.255 4.096<br />
134.76.192.0 255.255.240.0 134.76.207.255 4.096<br />
134.76.208.0 255.255.240.0 134.76.223.255 4.096<br />
134.76.224.0 255.255.240.0 134.76.239.255 4.096<br />
134.76.240.0 255.255.240.0 134.76.255.255 4.096<br />
...<br />
Tabelle 5.8: Beispiele e<strong>in</strong>er Netzaufteilung mit verschiedenen Subnetzmasken<br />
5.7.6 QoS-Rout<strong>in</strong>g<br />
IP selbst und die meisten <strong>Netzwerk</strong>technologien kennen ke<strong>in</strong> o<strong>der</strong> nur sehr beschränktes<br />
Quality of Service (QoS). Paketorientierte <strong>Netzwerk</strong>e s<strong>in</strong>d zuallererst für gleichberechtigten<br />
Zugriff ohne Ressourcen-Monopolisierung ausgelegt. ATM unterstützt zwar QoS, jedoch<br />
ke<strong>in</strong>e e<strong>in</strong>fache Verknüpfung mit IP über Schichtgrenzen h<strong>in</strong>weg. IP ist verb<strong>in</strong>dungslos, mit<br />
dem Verlassen des Paketes <strong>der</strong> Masch<strong>in</strong>e ist ke<strong>in</strong> <strong>E<strong>in</strong></strong>fluss mehr möglich.<br />
IP-Hea<strong>der</strong> enthält e<strong>in</strong> Optionenfeld für QoS-Flags (dieses wird jedoch nur selten ausgelesen):<br />
• M<strong>in</strong>imum Delay<br />
• Maximum Throughput<br />
• Maximum Reliability<br />
• M<strong>in</strong>imize Costs<br />
Komb<strong>in</strong>ationen aus diesen Fel<strong>der</strong>n s<strong>in</strong>d möglich. Verschiedene Dienste können so unterschiedliche<br />
Merkmale realisieren (Sprache, FTP, SSH,...).<br />
Probleme: Verletzung des Schichtenmodells, da Applikation den IP-Hea<strong>der</strong> mitbestimmen<br />
muss; alle Router müssen Fel<strong>der</strong> auswerten; Prioritäten können sich auf dem Weg<br />
än<strong>der</strong>n (z.B. <strong>E<strong>in</strong></strong>schätzung des Kostenfaktors von Leitungen); Pakete können auf ihrem<br />
Weg umgeschrieben werden. Trotzdem kann QoS-Rout<strong>in</strong>g beim Anschluss von LANs an<br />
das Internet über schmale Upl<strong>in</strong>ks (Bsp. WG-o<strong>der</strong> Firmen-Router an DSL) s<strong>in</strong>nvoll se<strong>in</strong>.<br />
Router s<strong>in</strong>d bereits mit ”normalem” Rout<strong>in</strong>g stark belastet - zusätzliche Regeln können<br />
die Belastung nur erhöhen. Deshalb: Meistens ist es wie<strong>der</strong> ”e<strong>in</strong>facher” die Bandbreite zu<br />
erhöhen, als aufwändiges QoS-Rout<strong>in</strong>g e<strong>in</strong>zusetzen. Im LAN-Bereich gibt es Überlegungen<br />
zu QoS bei Ethernet - IPv6 soll e<strong>in</strong>iges mehr an QoS implementieren.
5.8. ADDRESS RESOLUTION PROTOCOL 61<br />
5.8 Address Resolution Protocol<br />
Jede Ethernet-, Funk- TokenR<strong>in</strong>g-Karte besitzt e<strong>in</strong>e e<strong>in</strong>deutige Hardware-Adresse, die auch<br />
als MAC-Adresse bezeichnet wird. LAN-Karten bedienen sich dieser MAC-Adresse, die für<br />
die Aussendung und den Empfang von Datagrammen über das <strong>Netzwerk</strong> unerlässlich ist. Sie<br />
können nur auf Datagramme antworten, die im Empfänger-Feld e<strong>in</strong>e Rundsende-Adresse,<br />
e<strong>in</strong>e bekannte Verteilsende-Adresse o<strong>der</strong> e<strong>in</strong>e auf die betreffende LAN-Karte h<strong>in</strong>weisende<br />
Individual-Adresse aufweisen.<br />
Die MAC-Adresse steht bereits beim Erwerb des <strong>Netzwerk</strong>geräs fest. Sie ist fest e<strong>in</strong>kodiert<br />
z.B. <strong>in</strong> e<strong>in</strong>er <strong>Netzwerk</strong>-Karte. Sie än<strong>der</strong>t sich nicht und ist weltweit theoretisch 100 %<br />
e<strong>in</strong>deutig. Der flache Adressraum umfasst 48 bit und die Adressen werden traditionell hexadezimal<br />
dargestellt. Man werfe e<strong>in</strong>fach mal e<strong>in</strong>en Blick auf die Unterseite des eigenen Laptops<br />
o<strong>der</strong> den Aufdruck auf e<strong>in</strong>er <strong>Netzwerk</strong>karte und wird dort e<strong>in</strong>e typische Darstellung<br />
<strong>der</strong> Form: 00:0a:e4:35:34:6a f<strong>in</strong>den. Ethernet verwendet e<strong>in</strong> ganz eigenes Adressierungsschema,<br />
das nach komplett an<strong>der</strong>en Kriterien funktioniert, als beispielsweise vom Internet<br />
Protokoll gewohnt. Es gibt lediglich e<strong>in</strong>e Aufteilung <strong>der</strong> Adresse <strong>in</strong> e<strong>in</strong> Hersteller-Prefix und<br />
e<strong>in</strong> e<strong>in</strong>deutiges Suffix für jede Karte e<strong>in</strong>es Herstellers.<br />
5.8.1 ARP - Hilfsprotokoll des IP<br />
Das Address Resolution Protocol wird als B<strong>in</strong>deglied zwischen <strong>der</strong> eigentlichen <strong>Netzwerk</strong>-<br />
Hardware e<strong>in</strong>erseits und dem Internet Protokoll (IP) an<strong>der</strong>seits benötigt. An<strong>der</strong>s als bei<br />
Punkt-zu-Punkt-Verb<strong>in</strong>dungen, wie beispielsweise ISDN agieren <strong>in</strong> e<strong>in</strong>em Ethernet viele<br />
Masch<strong>in</strong>en gleichberechtigt. Damit reicht es nicht, e<strong>in</strong>fach das Paket an e<strong>in</strong>em Ende <strong>der</strong><br />
Leitung ”abzuliefern” und nach kurzer Verzögerung am an<strong>der</strong>en Ende zu erwarten.<br />
IP-Adressen kann man nicht e<strong>in</strong>fach nehmen, da man ja beim Kauf e<strong>in</strong>er Ethernet-Karte<br />
noch gar nicht wissen kann, <strong>in</strong> welchem Netz e<strong>in</strong>e Masch<strong>in</strong>e betrieben wird. Ebenso wollte<br />
sicherlich ke<strong>in</strong>er e<strong>in</strong>sehen, dass e<strong>in</strong> Laptop entwe<strong>der</strong> nur zu Hause o<strong>der</strong> im Firmennetz an<br />
e<strong>in</strong>er bestimmten Stelle angeklemmt werden kann,o<strong>der</strong> dass man sich e<strong>in</strong>en neuen <strong>Netzwerk</strong>adapter<br />
kaufen muss, wenn sich die IP än<strong>der</strong>t. Deshalb verwendet man beim Ethernet<br />
e<strong>in</strong>en eigenen Adressraum mit Eigenschaften, die sich zum IP-Adressraum stark unterscheiden.<br />
Die IP-Adresse ist, wie bereits oben erläutert, im OSI-Schichtenmodell <strong>der</strong> Vermittlungsschicht<br />
zugeordnet und von <strong>der</strong> <strong>in</strong>dividuellen MAC-Adresse unabhängig. Jede Kommunikation<br />
mittels TCP/ IP wird durch die IP-Adresse e<strong>in</strong>geleitet, wodurch für den Aufbau des<br />
Dialogs die MAC-Adresse als sekundär zurückgestuft wird. End-zu-End-Kommunikationen<br />
bedienen sich also <strong>der</strong> IP-Adresse, woh<strong>in</strong>gegen bei den dazwischen liegenden Knotenpunkten<br />
(Hops) <strong>in</strong> den genannten <strong>Netzwerk</strong>typen die MAC-Adresse genutzt wird.<br />
Jedem Host im Netz wurde aber nun auch noch e<strong>in</strong>e IP-Adresse zugeordnet und damit<br />
hat das darunterliegende broadcastfähige LAN e<strong>in</strong> Problem: Mit <strong>der</strong> IP-Adresse 172.16.23.1<br />
weiß es nichts anzufangen, mit <strong>der</strong> MAC-Adresse 00:08:74:46:DC:9C allerd<strong>in</strong>gs schon. <strong>E<strong>in</strong></strong><br />
Vermittlungsdienst muss her: Das Adress Resolution Protocol (ARP) übersetzt die IP-<br />
Adressen <strong>in</strong> Ethernet-Adressen. So gesehen gehört es eigentlich auch nicht vollständig <strong>in</strong><br />
den L<strong>in</strong>k Layer, son<strong>der</strong>n ist irgendwo zwischen L<strong>in</strong>k und Network Layer e<strong>in</strong>zuordnen. In den<br />
ersten beiden 16 bit Fel<strong>der</strong>n des ARP-Paketes stehen <strong>der</strong> Hardwaretyp und die benutzten<br />
Protokolladressen. Im Falle von IP auf <strong>der</strong> Basis von Ethernet steht im ersten Feld e<strong>in</strong>e 1<br />
für Ethernet und im zweiten Feld 0x0800 für das IP-Protokoll, wie es auch im Ethernet-<br />
Rahmen markiert wird. Die beiden 8bit Fel<strong>der</strong> zu Beg<strong>in</strong>n <strong>der</strong> nächsten Zeile bestimmen die<br />
Anzahl <strong>der</strong> Bytes für die Hardware- und Protokolladressen, <strong>in</strong> diesem Fall 6Byte für die<br />
Ethernetadresse und 4 Byte für die IP-Nummer. Das sich anschließende ”Operation”-Feld
62 KAPITEL 5. TCP-IP<br />
HADDR LENGHT<br />
32 bit<br />
HARDWARE ADDRESS TYPE PROTOCOL ADDRESS TYPE<br />
PADDR LENGHT<br />
SENDER HADDR (last 2 Byte)<br />
SENDER PROTOCOL ADDRESS (last 2 Byte)<br />
SENDER HARDWARE ADDRESS (first 4 Byte)<br />
TARGET HARDWARE ADDRESS (last 4 Byte)<br />
TARGET PROTOCOL ADDRESS (all 4 Byte)<br />
OPERATION<br />
SENDER PROTOCOL ADDRESS (first 2 Byte)<br />
TARGET HADDR (first 2 Byte)<br />
Abbildung 5.5: Aufbau e<strong>in</strong>es ARP Pakets<br />
bestimmt, ob es sich um e<strong>in</strong>e Anfrage (Wert 1) o<strong>der</strong> e<strong>in</strong>e Antwort (Wert 2) handelt. ARP<br />
be<strong>in</strong>haltet Fel<strong>der</strong> für zwei Adressb<strong>in</strong>dungen, wobei e<strong>in</strong>e dem Sen<strong>der</strong> und die an<strong>der</strong>e dem<br />
Empfänger entspricht, die <strong>in</strong> den ”Target”-Fel<strong>der</strong>n genannt wird.<br />
In den ersten TCP/IP-fähigen Rechnern wurde e<strong>in</strong>e manuell erstellte Tabelle verwendet<br />
21 , die die Zuordnung zwischen MAC- und IP-Adresse <strong>in</strong>direkt automatisieren sollte.<br />
In den meisten broadcast-fähigen Netzen werden davon losgelöst zusätzlich o<strong>der</strong> ersetzend<br />
Rout<strong>in</strong>g-Informationen komplett automatisch mittels dem Adress Resolution Protocol ausgetauscht,<br />
welches <strong>in</strong> RFC 826 (An Ethernet Address Resolution Protocol) def<strong>in</strong>iert wird.<br />
Je<strong>der</strong> Host verwaltet dabei dynamisch den sogenannten ARP-Cache mit den relationalen<br />
IP-/MAC-<strong>E<strong>in</strong></strong>trägen.<br />
5.8.2 Funktionsweise<br />
ARP arbeitet dabei ziemlich geräuschlos im H<strong>in</strong>tergrund. Man muss nichts extra <strong>in</strong>stallieren,<br />
da diese Fähigkeit eigentlich <strong>in</strong> jeden L<strong>in</strong>uxkernel schon h<strong>in</strong>e<strong>in</strong>kompiliert ist. Die<br />
Programme zur Konfiguration und Abfrage des ARP-Caches s<strong>in</strong>d auf fast jedem L<strong>in</strong>ux-<br />
Rechner <strong>in</strong>stalliert:<br />
mobile:~ # ip neighbor show<br />
10.8.4.1 dev eth0 lladdr 00:0a:e4:35:33:7a REACHABLE<br />
10.8.4.2 dev eth0 lladdr 00:0c:6f:45:03:0d REACHABLE<br />
10.8.4.254 dev eth0 lladdr 00:09:37:31:3a:13 REACHABLE<br />
In e<strong>in</strong>em gegebenen Subnetz, hier 10.8.4.0/255.255.255.0, werden alle Pakete, die e<strong>in</strong>e Masch<strong>in</strong>e<br />
verlassen sollen über das lokale Ethernet ausgetauscht. Dieses trifft auf fast alle<br />
Masch<strong>in</strong>en mit Internet-Verb<strong>in</strong>dung zu, welche nicht ausschliesslich an e<strong>in</strong>er Modem- o<strong>der</strong><br />
ISDN-Verb<strong>in</strong>dung hängen. Masch<strong>in</strong>en <strong>in</strong> diesem Subnetz verfügen meist über genau e<strong>in</strong>e<br />
<strong>Netzwerk</strong>karte, ausser sie stellen Gateway-Funktionen <strong>in</strong> an<strong>der</strong>e Netze bereit. Dann bezeichnet<br />
man sie üblicherweise als Router. So gibt es zwei Szenarien:<br />
1. Die Masch<strong>in</strong>e A will mit e<strong>in</strong>er Masch<strong>in</strong>e B im selben Subnetz kommunizieren. Die<br />
Pakete können ohne die Beteiligung weiterer Masch<strong>in</strong>en direkt über das Ethernet<br />
h<strong>in</strong>- und hergeschickt werden.<br />
21 Diese Fähigkeit ist heute noch vorhanden: Mit dem Kommando arp können <strong>der</strong> Kernel-ARP-Tabelle<br />
statische <strong>E<strong>in</strong></strong>träge h<strong>in</strong>zugefügt o<strong>der</strong> welche gelöscht werden.
5.8. ADDRESS RESOLUTION PROTOCOL 63<br />
2. Die Masch<strong>in</strong>e A will e<strong>in</strong> Paket an irgende<strong>in</strong>e Masch<strong>in</strong>e ausserhalb des Subnetzes schicken.<br />
Da nur <strong>der</strong> Router R, <strong>der</strong> deshalb auch als Default-Gateway bezeichnet wird,<br />
den Weg <strong>in</strong> die weite Welt kennt, liefert A die Daten an R. R kümmert sich dann<br />
um die Weitersendung und leitet A eventuell zurückommende Antwortpakete o<strong>der</strong><br />
Fehlermeldungen zu.<br />
Die Art <strong>der</strong> Daten, die ausgetauscht werden, spielt auf den unteren <strong>Netzwerk</strong>schichten<br />
unterhalb von IP ke<strong>in</strong>e Rolle. Jedes IP-Paket wird an den Data-L<strong>in</strong>k Layer weitergereicht,<br />
um dort versendet zu werden. Mit <strong>der</strong> IP-Adresse von B, die als bekannt vorausgesetzt<br />
wird, kommt A hier nicht weiter und muss deshalb die MAC-Adresse von B <strong>in</strong> Erfahrung<br />
br<strong>in</strong>gen. Der Ablauf e<strong>in</strong>er ARP-Sitzung folgt normalerweise e<strong>in</strong>em strikten Protokoll:<br />
10.8.4.1 10.8.4.2<br />
A B<br />
00:01:AA 00:01:BB<br />
ARP-Reply:<br />
"10.8.1.2 is at 00:01:BB..."<br />
Abbildung 5.6: Die Station mit <strong>der</strong> passenden IP-Adresse schickt e<strong>in</strong> ARP-Reply<br />
1. Zu allererst schaut A <strong>in</strong> se<strong>in</strong>em ARP-Cache nach, ob es nicht vielleicht bereits dasgesuchte<br />
Adress-Paar bzw. die gesuchte MAC-Adressen kennt. In diesem Cache werden<br />
festgestellte Paarungen aus früheren Sitzungen für e<strong>in</strong>e Weile vorgehalten, um nicht<br />
ständig wie<strong>der</strong> neu fragen zu müssen. Dieses würde unnötigen <strong>Netzwerk</strong>-Verkehr produzieren.<br />
2. Falls ke<strong>in</strong> <strong>E<strong>in</strong></strong>trag vorhanden ist, wird vom Initiator mit Hilfe von ARP die MAC-<br />
Adresse <strong>der</strong> fraglichen IP-Adresse zu ermitteln versucht. In <strong>der</strong> Hoffnung diese Frage<br />
wenigstens temporär aus <strong>der</strong> Welt zu schaffen, sendet A e<strong>in</strong> ARP-Datagramm <strong>in</strong>klusive<br />
<strong>der</strong> zu erfragenden IP-Adresse und e<strong>in</strong>er sogenannte ARP-Anfor<strong>der</strong>ung an alle<br />
LAN-Karten mittels <strong>der</strong> bekannten MAC-Broadcast-Adresse (0xFFFF FFFF FFFF).<br />
ARP setzt <strong>in</strong> dieser verhältnismässig globalen Anfor<strong>der</strong>ung se<strong>in</strong>en eigenen Ethernet-<br />
Typ 0x08086 e<strong>in</strong>, damit <strong>der</strong> Schrei von allen verme<strong>in</strong>dlich betroffenen Knotenpunkten<br />
wahrgenommen wird. Dieses Rundschreiben ”Ich kenne die MAC-Adresse X, die IP-<br />
Adresse A und ich suche die MAC-Adresse desjenigen, <strong>der</strong> die IP-Adresse B hat.” wird<br />
von allen aktiven Masch<strong>in</strong>en im <strong>Netzwerk</strong> bemerkt. Falls <strong>in</strong>nerhalb e<strong>in</strong>es def<strong>in</strong>ierten<br />
Timeouts im Sekundenbereich ke<strong>in</strong>e Antwort auf die Broadcast-Anfrage e<strong>in</strong>geht, so<br />
wird die Anfor<strong>der</strong>ung erneut gestellt.<br />
3. Der Rechner B, und nur dieser, wird auf dieses Broadcast-Request antworten: ”Die<br />
IP-Adresse von B ist unter <strong>der</strong> MAC-Adresse Y zu erreichen”. In <strong>der</strong> ARP-Antwort<br />
s<strong>in</strong>d dann alle Fel<strong>der</strong> entsprechend gesetzt.<br />
4. Für e<strong>in</strong>e gewisse Zeit notiert sich A dieses Paar <strong>in</strong> se<strong>in</strong>em Cache. Da es den an<strong>der</strong>en<br />
Teilnehmern den Aufwand spart, später ebenfalls nach dieser Paarung fragen zu<br />
müssen, merkt sich die befragte Masch<strong>in</strong>en ebenfalls diese Paarung, solange <strong>der</strong> Cache<br />
nicht aufgrund potentieller Überfüllung überschrieben wird. Sie tut es auf ”Vorrat”<br />
für den Fall, dass sie später ebenfalls Pakete an B schicken will. Bei e<strong>in</strong>er eventuell<br />
nachfolgenden Anfor<strong>der</strong>ung ist es daher auch nicht mehr nötig den ARP-Dialog
64 KAPITEL 5. TCP-IP<br />
<strong>in</strong> umgekehrter Richtung walten zu lassen, da die relevanten Daten beim Zielsystem<br />
bereits bekannt s<strong>in</strong>d.<br />
10.8.4.1 10.8.4.2<br />
A B<br />
00:01:AA 00:01:BB<br />
Ethernet-Kommunikation<br />
00:01:AA 00:01:BB<br />
IP-Kommunikation<br />
10.8.4.1 10.8.4.2<br />
Abbildung 5.7: Nach dem Austausch <strong>der</strong> MACs erfolgt die IP-Kommunikation<br />
ARP-Datagramme werden von Routern nicht weitergeleitet, da sie <strong>in</strong> <strong>der</strong> IP-Schicht operieren<br />
und auf MAC-Broadcasts grundsätzlich nicht reagieren können und dürfen. Router<br />
stellen daher verwertbare Puffer zwischen e<strong>in</strong>zelnen Rundsende-Subnetzen dar. Mit ihrer<br />
Hilfe kann überflüssiger Traffic im gesamten <strong>Netzwerk</strong> e<strong>in</strong>gedämmt und auf effektiv betroffene<br />
Subnetze m<strong>in</strong>imiert werden.<br />
5.8.3 ARP unter L<strong>in</strong>ux<br />
Unter L<strong>in</strong>ux erfährt man die MAC-Adresse mit:<br />
l<strong>in</strong>ux02:~ # ip l<strong>in</strong>k show<br />
1: lo: mtu 16436 qdisc noqueue<br />
l<strong>in</strong>k/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000<br />
l<strong>in</strong>k/ether 00:e0:81:55:06:01 brd ff:ff:ff:ff:ff:ff<br />
3: eth1: mtu 1500 qdisc noop qlen 1000<br />
l<strong>in</strong>k/ether 00:e0:81:55:06:00 brd ff:ff:ff:ff:ff:ff<br />
4: sit0: mtu 1480 qdisc noop<br />
l<strong>in</strong>k/sit 0.0.0.0 brd 0.0.0.0<br />
Die beiden Ethernet-Interfaces haben e<strong>in</strong>e gültige Adresse, Loopback (lo) und das Tunnel-<br />
Interface (sit0) benötigen ke<strong>in</strong>e. Zum <strong>Netzwerk</strong>gerät zugeordnete IP-Adressen haben das<br />
bekannte Format bestehend aus vier durch drei Punkte getrennte Blöcke von Dezimalzahlen<br />
10.8.4.254. Zwar arbeiten die Rechner <strong>in</strong>tern mit <strong>der</strong> B<strong>in</strong>ärdarstellung, trotzdem<br />
s<strong>in</strong>d die Unterschiede zwischen MAC- und IP-Adresse groß. ARP arbeitet beim Dolmetschen<br />
geräuschlos im H<strong>in</strong>tergrund. Man muss nichts extra <strong>in</strong>stallieren, da diese Fähigkeit<br />
im L<strong>in</strong>ux-Kernel vorhanden ist. Die Programme arp und ip zur Konfiguration und Abfrage<br />
des ARP-Caches s<strong>in</strong>d auf fast jedem L<strong>in</strong>ux-Rechner <strong>in</strong>stalliert.<br />
mobile root # arp -n<br />
Address HWtype HWaddress Flags Mask Iface<br />
10.8.4.222 ether 00:03:47:B9:DE:36 C eth0<br />
10.8.4.204 ether 00:02:B3:C2:55:91 C eth0<br />
10.8.4.254 ether 00:0C:6E:15:03:0E C eth0<br />
mobile root # arp -d 10.8.4.204<br />
mobile root # arp -n<br />
Address HWtype HWaddress Flags Mask Iface<br />
10.8.4.222 ether 00:03:47:B9:DE:36 C eth0<br />
10.8.4.204 (<strong>in</strong>complete) eth0<br />
10.8.4.254 ether 00:0C:6E:15:03:0E C eth0
5.8. ADDRESS RESOLUTION PROTOCOL 65<br />
mobile root # arp -n<br />
Address HWtype HWaddress Flags Mask Iface<br />
10.8.4.222 ether 00:03:47:B9:DE:36 C eth0<br />
10.8.4.204 ether 00:02:B3:C2:55:91 C eth0<br />
10.8.4.254 ether 00:0C:6E:15:03:0E C eth0<br />
mobile root # arp -s 10.8.4.204 00:11:22:33:44:55<br />
mobile root # arp -n<br />
Address HWtype HWaddress Flags Mask Iface<br />
10.8.4.222 ether 00:03:47:B9:DE:36 C eth0<br />
10.8.4.204 ether 00:11:22:33:44:55 CM eth0<br />
10.8.4.254 ether 00:0C:6E:15:03:0E C eth0<br />
mobile root # p<strong>in</strong>g 10.8.4.204<br />
PING 10.8.4.204 (10.8.4.204) 56(84) bytes of data.<br />
--- 10.8.4.204 p<strong>in</strong>g statistics ---<br />
1 packets transmitted, 0 received, 100% packet loss, time 0ms<br />
mobile root # arp -s 10.8.4.204 00:02:B3:C2:55:91<br />
mobile root # p<strong>in</strong>g 10.8.4.204<br />
PING 10.8.4.204 (10.8.4.204) 56(84) bytes of data.<br />
64 bytes from 10.8.4.204: icmp_seq=1 ttl=64 time=0.164 ms<br />
--- 10.8.4.204 p<strong>in</strong>g statistics ---<br />
1 packets transmitted, 1 received, 0% packet loss, time 0ms<br />
rtt m<strong>in</strong>/avg/max/mdev = 0.164/0.164/0.164/0.000 ms<br />
ARP verlässt sich auf die MAC-Adresse des Ethernet-Adapters, so wie sie vom Betriebssystem<br />
mitgeteilt wird. Wenn man die MAC-Adresse e<strong>in</strong>es Interfaces än<strong>der</strong>n will, kann man<br />
als Adm<strong>in</strong>istrator dazu das Kommando ip l<strong>in</strong>k set verwenden:<br />
l<strong>in</strong>ux:~ # ip l<strong>in</strong>k set eth0 down<br />
l<strong>in</strong>ux:~ # ip l<strong>in</strong>k set eth0 address 00:20:AA:20:AA:20<br />
l<strong>in</strong>ux:~ # ip l<strong>in</strong>k show eth0<br />
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000<br />
l<strong>in</strong>k/ether 00:20:AA:20:AA:20 brd ff:ff:ff:ff:ff:ff<br />
Das Ganze geht auch mit ifconfig:<br />
l<strong>in</strong>ux:~ # ifconfig eth1<br />
eth1 Protokoll:Ethernet Hardware Adresse 00:00:0E:7D:71:DF<br />
BROADCAST NOARP MTU:1500 Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 Sendewarteschlangenlänge:0<br />
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)<br />
l<strong>in</strong>ux:~ # ifconfig eth1 down<br />
l<strong>in</strong>ux:~ # ifconfig eth1hw ether 00:4F:0E:7D:71:DF<br />
l<strong>in</strong>ux:~ # ifconfig eth1<br />
eth1 Protokoll:Ethernet Hardware Adresse 00:4F:0E:7D:71:DF<br />
<strong>in</strong>et6 Adresse: fe80::24f:eff:fe7d:71df/64 Gültigkeitsbereich:Verb<strong>in</strong>dung<br />
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 Sendewarteschlangenlänge:0<br />
RX bytes:0 (0.0 b) TX bytes:70 (70.0 b)<br />
Das bedeutet schlicht und e<strong>in</strong>fach, dass man sich nicht darauf verlassen kann, dass die im<br />
Netz sichtbare MAC-Adresse wirklich die auf dem <strong>Netzwerk</strong>adapter programmierte ist. Im
66 KAPITEL 5. TCP-IP<br />
WLAN lässt sich die MAC-Adresse sche<strong>in</strong>bar auch auf diese Weise än<strong>der</strong>n. Da sie jedoch<br />
von <strong>der</strong> Firmware <strong>der</strong> Karte noch <strong>in</strong> an<strong>der</strong>en Schichten benutzt wird, kommt nach dieser<br />
Art <strong>der</strong> Än<strong>der</strong>ung ke<strong>in</strong>e Funkverb<strong>in</strong>dung mehr zustande. Es gibt jedoch Programme, mit<br />
denen sich per Firmware die MAC-Adresse von WLAN-Karten än<strong>der</strong>n lässt.<br />
5.8.4 <strong>E<strong>in</strong></strong>gebaute Sicherheitslücken<br />
Normalerweise s<strong>in</strong>d ke<strong>in</strong>e Kontrollmechanismen vorhanden, die e<strong>in</strong>e MAC-Adresse im Namen<br />
mehrerer IP-Adressen kompetent verifizieren kann. Angreifer können sich diese Eigenheit<br />
von ARP zunutze machen.<br />
Die Schwäche von ARP liegt <strong>in</strong> se<strong>in</strong>er Vertrauensseligkeit. ARP stammt aus den frühen<br />
Zeiten <strong>der</strong> IP-Kommunikation, wo e<strong>in</strong> ”es geht” und möglichst schonen<strong>der</strong> Umgang mit<br />
<strong>Netzwerk</strong>resourcen wichtiger waren, als e<strong>in</strong>e sauber implementierte und unter umständen<br />
sehr aufwändige Authentifikation. Wenn e<strong>in</strong> Endsystem e<strong>in</strong> ARP-Reply aufschnappt, dann<br />
wird dieser im Cache abgelegtt, unabhängig davon, ob zuvor nach dieser Adresse gefragt<br />
wurde. Hier<strong>in</strong> verbirgt sich die grundlegende Sicherheitslücke. Aber auch e<strong>in</strong> sche<strong>in</strong>bar folgerichtiger<br />
Ansatz, e<strong>in</strong>e Adresse nur dann zu speichern, wenn vorher genau nach dieser<br />
Adresse gefragt wurde, lässt sich leicht austricksen, <strong>in</strong>dem e<strong>in</strong> potenzieller Angreifer e<strong>in</strong>fach<br />
schneller antwortet, als <strong>der</strong> Inhaber <strong>der</strong> Adresse. So kann <strong>der</strong> Angreifer natürlich e<strong>in</strong>e<br />
beliebige Antwort geben, wie beispielsweise se<strong>in</strong>e eigene Adresse. Ausgangssituation für das<br />
10.8.4.1 10.8.4.2<br />
A B<br />
ARP-Reply:<br />
"10.8.1.1 is at 00:b0:11:33..."<br />
00:b0:11:11:11:11 00:b0:11:22:22:22<br />
10.8.4.50<br />
P<br />
00:b0:11:33:33:33<br />
Abbildung 5.8:<br />
ARP-Reply:<br />
"10.8.1.1 is at 00:b0:11:33..."<br />
im folgenden beschriebene ARP-Spoof<strong>in</strong>g sei die folgende: Die beiden Hosts A und B kommunizieren<br />
mite<strong>in</strong>an<strong>der</strong>. A benutzt die IP-Adresse 10.8.4.1 und die MAC 00:b0:11:11:11:11,<br />
B 10.8.4.2 und MAC 00:b0:11:22:22:22. Der angreifende Host P hat die IP 10.8.4.3 und<br />
dazugehörige MAC 00:b0:11:33:33:33. Er möchte ablauschen, was A und B mite<strong>in</strong>an<strong>der</strong> zu<br />
schnacken haben.<br />
Host P startet se<strong>in</strong>en Angriff, <strong>in</strong>dem er die ARP-Caches <strong>der</strong> Opfer A und B ”vergiftet” 22 ,<br />
d.h. er <strong>in</strong>jiziert gefälschte ARP-Antworten <strong>in</strong> das lokale Subnetz. P schickt an A e<strong>in</strong> ARP-<br />
Reply, dass die Information enthält, dass <strong>der</strong> Rechner B mit <strong>der</strong> IP-Adresse 2 unter <strong>der</strong><br />
MAC-Adresse 00:b0:11:33:33:33 zu erreichen ist. In Wirklichkeit bekomm nun aber P die<br />
Pakete von A für B zugeschickt. Ebenso erhält B gefälschte Pakete von P, dass be<strong>in</strong>halten,<br />
dass A mit <strong>der</strong> IP-Adresse 1 unter <strong>der</strong> MAC-Adresse 00:b0:11:33:33:33 angesprochen wird.<br />
In Zukunft schickt also A se<strong>in</strong>en Verkehr für B statt direkt zu B <strong>in</strong> Wirklichkeit zu P. Bei<br />
B gestaltet es sich genauso, er schickt se<strong>in</strong>en Verkehr für A zu P. Der Angreifer P muss nun<br />
e<strong>in</strong>fach die Pakete korrekt weiterreichen, <strong>in</strong>dem im Kernel IP-Forward<strong>in</strong>g e<strong>in</strong>geschltet wird.<br />
Die korrekten IP-Adressen stehen ja <strong>in</strong> den Paket-Hea<strong>der</strong>n, P kennt auch die korrekten<br />
MAC-Adressen. Wenn P noch e<strong>in</strong> wenig cleverer ist, dann passt er noch den HOP-Count<br />
im IP-Hea<strong>der</strong> an, bevor das Paket se<strong>in</strong> Interface verlässt.<br />
Da je<strong>der</strong> Router im IP-Hea<strong>der</strong> den Hop-Counter um e<strong>in</strong>s reduziert, muss dieser wie<strong>der</strong><br />
erhöht werden. An<strong>der</strong>nfalls würde auffallen, dass <strong>der</strong> Weg von A nach B plötzlich um<br />
22 hiervon stammt <strong>der</strong> Ausdruck ”Poision<strong>in</strong>g”
5.8. ADDRESS RESOLUTION PROTOCOL 67<br />
00:b0:11:11:11:11 00:b0:11:22:22:22<br />
10.8.4.1 10.8.4.2<br />
IP-Kommunikation<br />
A B<br />
Ethernet-Kommunikation<br />
00:b0:11:11... <br />
00:b0:11:33...<br />
10.8.4.1 10.8.4.2<br />
10.8.4.50<br />
P<br />
00:b0:11:33:33:33<br />
Abbildung 5.9:<br />
Ethernet-Kommunikation<br />
00:b0:11:33:33:33 <br />
00:b0:11:22:22:22<br />
m<strong>in</strong>destens e<strong>in</strong>en Router länger geworden ist. Im Zuge <strong>der</strong> Weiterleitung <strong>der</strong> Pakete können<br />
diese bequem mitgelesen werden. Dabei kann <strong>der</strong> Angreifer möglicherweise Passwörter und<br />
an<strong>der</strong>e geheime Daten auslesen. Zudem können Pakete auch problemlos manipuliert werden,<br />
was die Attacke noch mächtiger macht. Da <strong>der</strong> Angreifer sozusagen direkt auf dem logischen<br />
Verb<strong>in</strong>dungspfad zwischen den Opfern sitzt, wird diese Art e<strong>in</strong>es Angriffs auch als ”Man-<br />
In-The-Middle” bezeichnet.<br />
00:b0:11:11:11:11 00:b0:11:22:22:22<br />
10.8.4.1 10.8.4.2<br />
IP-Kommunikation<br />
A B<br />
Paketlaufzeit1<br />
Hop-Count: TTL-1<br />
10.8.4.1 10.8.4.2<br />
10.8.4.50<br />
P<br />
00:b0:11:33:33:33<br />
Abbildung 5.10:<br />
Paketlaufzeit2<br />
Wenn <strong>der</strong> Angriff wie<strong>der</strong> beendet wird, muss <strong>der</strong> ARP-Cache <strong>der</strong> Opfer wie<strong>der</strong> aufgeräumt<br />
werden, d.h. es müssen erneut gefälschte ARP-Replies an A und B geschickt werden,<br />
zur Abwechslung nun mit den korrekten Paarungen von MAC- und IP-Adressen. Passiert<br />
dies nicht und P entfernt sich aus dem Netz o<strong>der</strong> deaktiviert se<strong>in</strong> IP-Forward<strong>in</strong>g, dann<br />
schicken A und B weiterh<strong>in</strong> ihren Verkehr an P. Dieser leitet ihn aber nicht mehr weiter:<br />
Die ganze Sache fällt wegen <strong>der</strong> <strong>Netzwerk</strong>unterbrechung unter Umständen auf.<br />
Insgesamt kann man festhalten, dass man nur an <strong>der</strong> ARP-Reply alle<strong>in</strong> ke<strong>in</strong>e Auffälligkeit<br />
feststellen kann. Die Sen<strong>der</strong> MAC Address stimmt übere<strong>in</strong> mit <strong>der</strong> Absen<strong>der</strong>-Adresse<br />
des umgebenden Ethernet-Frames, so dass es sich bei diesem Paket auch durchaus um e<strong>in</strong><br />
echtes ARP-Reply handeln könnte. Tatsächlich ist dieses Paket aber gefälscht und Teil e<strong>in</strong>er<br />
ARP-Poison-Attacke. Beim Beenden <strong>der</strong> Attacke verrät sich <strong>der</strong> Angreifer. Denn er schickt<br />
von se<strong>in</strong>er MAC-Adresse aus e<strong>in</strong>e ARP-Reply, die angibt, dass se<strong>in</strong>e IP-Adresse jetzt unter<br />
e<strong>in</strong>er an<strong>der</strong>en MAC-Adresse zu erreichen ist. D.h. die Sen<strong>der</strong> MAC Address stimmt <strong>in</strong><br />
diesem Fall nicht übere<strong>in</strong> mit <strong>der</strong> Absen<strong>der</strong>-Adresse des umschließenden Ethernet-Frames.<br />
Hier kann man den Angreifer entdecken und se<strong>in</strong>e MAC-Adresse ablesen.<br />
Das ”Standardwerkzeug” für e<strong>in</strong> ARP-Angriff ist das Programm ettercap. Das kann<br />
<strong>in</strong>zwischen e<strong>in</strong>e ganze Reihe von ”Man-<strong>in</strong>-the-Middle” Angriffe durchführen. Hier <strong>in</strong>teressieren<br />
jedoch nur die ARP-Angriffe. Ettercap ist e<strong>in</strong> Projekt, welches auf Sourceforge gehostet<br />
ist. Ettercap kennt drei verschiedene Benutzer<strong>in</strong>terfaces, e<strong>in</strong>e Kommandozeilenversion,<br />
die mit ”-T” aktiviert wird, e<strong>in</strong>e ncurses-basierte Textoberfläche (”-C”) und e<strong>in</strong>e grafische<br />
GTK-Version. Möchte man nun den Verkehr zwischen den beiden Masch<strong>in</strong>en 10.8.4.204<br />
und 10.8.4.204 mitschneiden, dann erreicht man das über den Aufruf:ettercap -C -M arp
68 KAPITEL 5. TCP-IP<br />
Abbildung 5.11: Ettercap <strong>in</strong> <strong>der</strong> Ncurses-Ausführung<br />
/10.8.4.222/ /10.8.4.204/. Mit ettercap -T -M arp:remote /192.168.1.1/<br />
/192.168.1.2-10/ kann man das ARP Poison<strong>in</strong>g für das Gateway und die Rechner im<br />
Ethernet zwischen 2 und 10 laufen lassen. Die Remote-Option wird benötigt, damit man<br />
den Traffic mitbekommt, <strong>der</strong> über das Gateway geroutet wird.<br />
Ettercap dient nicht nur als Cracker-Werkzeug, es kann ebenso Adm<strong>in</strong>istratoren e<strong>in</strong>gesetzt<br />
werden, um Schwachstellen im eigenen Netz aufzuspüren. Die Illusion, dass sich<br />
Programme wie ettercap o<strong>der</strong> dsniff fernhalten lassen, kann man getrost vergessen, wo<br />
sie schon im Standardumfang vieler Von-CD-Distributionen enthalten s<strong>in</strong>d.<br />
5.8.5 Gefahrenabwehr<br />
Wie man sieht, bemerkt man e<strong>in</strong>en solchen ARP-Angriff, wenn er geschickt ausgeführt<br />
wird, also wenn <strong>der</strong> HOP-Count manipuliert wird, kaum bzw. höchstens, wenn er beendet<br />
wird. Es gibt Möglichkeiten, ARP-Angriffe zu entdecken, aber es gibt ke<strong>in</strong> wirksames Mittel<br />
gegen e<strong>in</strong>en solchen Angriff außer e<strong>in</strong>er Verschlüsselung.<br />
Das än<strong>der</strong>t natürlich auch nichts an <strong>der</strong> Tatsache, dass P immer noch die IP-Pakete<br />
abfangen und mitlesen kann, die zwischen A und B h<strong>in</strong>- und hergeschickt werden, aber<br />
wenn sie gut verschlüsselt s<strong>in</strong>d, kann P nicht mehr viel damit anfangen. Für den Fall, dass<br />
P den Inhalt manipulieren will, <strong>in</strong>sofern das überhaupt S<strong>in</strong>n macht, wenn er den Inhalt nicht<br />
lesen kann, wird das auch auffallen. Verschlüsselung ist die e<strong>in</strong>zige wirksame Möglichkeit.<br />
In kle<strong>in</strong>en <strong>Netzwerk</strong>en, mit seltenen Än<strong>der</strong>ungen <strong>der</strong> angeschlossenen Masch<strong>in</strong>e ist es sogar<br />
mit vertretbaren Aufwand möglich, ARP-Angriffe komplett auszuschliessen, <strong>in</strong>dem man<br />
ARP gar nicht erst verwendet.<br />
Die e<strong>in</strong>fachste Variante ist die manuelle und statische Zuweisung von IP-Adressen zu<br />
MAC-Adressen. Der Adm<strong>in</strong> trägt <strong>in</strong> e<strong>in</strong>er Tabelle die Paarungen e<strong>in</strong> und vergibt entsprechend<br />
dieser Tabelle freie IP-Adressen. Diese Informationen stehen allen Endsystemen zum<br />
Rout<strong>in</strong>g zur Verfügung und sie können, außer durch den Adm<strong>in</strong>, durch niemanden geän<strong>der</strong>t
5.8. ADDRESS RESOLUTION PROTOCOL 69<br />
werden. Die Verwendung von ARP wird schlichtweg überflüssig und damit fällt auch die<br />
Sicherheitslücke komplett weg.<br />
Der große Nachteil dieser Methode ist allerd<strong>in</strong>gs, dass sie nur sehr schlecht skalierbar<br />
ist, d.h. sobald das <strong>Netzwerk</strong> e<strong>in</strong>e gewisse Größe erreicht hat, ist es e<strong>in</strong>fach nicht mehr<br />
praktikabel. Dann gibt es häufige Än<strong>der</strong>ungen, die zum e<strong>in</strong>en kommuniziert werden müssen,<br />
aber zum an<strong>der</strong>en vor allem überhaupt erstmal vorgenommen werden müssen. Angenommen<br />
<strong>der</strong> Adm<strong>in</strong> ist gerade nicht da, dann kann man z.B. ke<strong>in</strong>e <strong>Netzwerk</strong>-Karte auswechseln, weil<br />
man für die neue Karte ke<strong>in</strong>e IP-Adresse hat. Deshalb wurde ARP ja erfunden.<br />
In großen <strong>Netzwerk</strong>en fällt diese Ausweichmöglichkeit also weg, weil es zu umständlich<br />
und schlecht wartbar ist. Verwendet man dann doch wie<strong>der</strong> ARP, kann man aber wenigstens<br />
die Paarungen von MAC- und IP-Adressen im Auge behalten. Zum e<strong>in</strong>en fällt es natürlich<br />
auf, wenn ständig ARP-Replies geschickt werden, zumal es für diese Replies nie e<strong>in</strong> Request<br />
gab. Die gefälschten Replies müssen ja auch ständig neu geschickt werden, denn <strong>der</strong> ARP-<br />
Cache wird nicht ewig vorgehalten, irgendwann fällt <strong>der</strong> <strong>E<strong>in</strong></strong>trag von alle<strong>in</strong>e wie<strong>der</strong> heraus.<br />
<strong>E<strong>in</strong></strong>e zur statische Festlegung <strong>der</strong> <strong>der</strong> ARP-Tabelle m<strong>in</strong>destens gleichwertige Alternative<br />
stellt <strong>der</strong> <strong>E<strong>in</strong></strong>satz von arpwatch von Craig Leres dar, welches nach Verän<strong>der</strong>ungen <strong>der</strong> IP-<br />
/Ethernet-Mapp<strong>in</strong>gs Ausschau hält. Werden Än<strong>der</strong>ungen bemerkt, f<strong>in</strong>det e<strong>in</strong>e Alarmierung<br />
per E-Mail statt. Zudem werden die Manipulationen für e<strong>in</strong>e spätere Analyse protokolliert.<br />
5.8.6 ARP und doppelte IP-Adressen<br />
Wird e<strong>in</strong>em Client-Rechner aus Versehen die gleiche IP-Adresse wie dem zur Verb<strong>in</strong>dung<br />
aufgefor<strong>der</strong>ten Host-System zugeteilt, können diverse Benutzer für kurze Zeit nicht auf die<br />
Dienste des Hosts zugreifen. Die verschiedenen Komponente und Eigenheiten des spezifischen<br />
<strong>Netzwerk</strong>s lassen dieses Problem polymorph ersche<strong>in</strong>en, denn die Architektur des<br />
Netzes, <strong>der</strong> <strong>E<strong>in</strong></strong>satz von Routern, Hubs o<strong>der</strong> Bridges und die verwendete Hard- und Software<br />
haben e<strong>in</strong>en entscheidenden <strong>E<strong>in</strong></strong>fluss auf die Reaktionszeiten von ARP und dadurch<br />
auf das ganze Szenario.<br />
In de<strong>in</strong>er zur letzten Darstellung ähnlichen Situation haben <strong>der</strong> Host B und <strong>der</strong> Rechner<br />
P die gleiche IP-Adresse. Versucht nun Host A e<strong>in</strong>e Verb<strong>in</strong>dung zu P herzustellen, welche<br />
e<strong>in</strong>e ARP-Anfor<strong>der</strong>ung zur Folge hat, erhält er durch das Adress Resolution Protokoll die<br />
IP-Adresse von Host B, da sowohl <strong>der</strong> Host als auch Host B antworten. Host A kann die<br />
Verb<strong>in</strong>dung kaum erfolgreich herstellen, da Host B kaum <strong>in</strong> <strong>der</strong> Lage ist, mit <strong>der</strong> korrekten<br />
Dienst-Software aufzutrumpfen. Beim zweiten Versuch erhält Host A vielleicht die korrekte<br />
Antwort des Hosts, kann jedoch noch immer ke<strong>in</strong>e Verb<strong>in</strong>dung herstellen.<br />
Handelt es sich beim Host B um e<strong>in</strong>en normalen Arbeitsplatzrechner, wird dieser sehr<br />
wahrsche<strong>in</strong>lich bei längerem Nichtgebrauch ausgeschaltet. In diesem Fall taucht das Problem<br />
nur gelegentlich, zum Beispiel während den Arbeitszeiten des Benutzers am Host B,<br />
auf. Dies kann für genervte Benutzer zwischenzeitlich zum Vorteil werden, beh<strong>in</strong><strong>der</strong>t jedoch<br />
die Fehlersuche des <strong>Netzwerk</strong>adm<strong>in</strong>istrators erheblich.<br />
Das letzte Szenario beschreibt sich e<strong>in</strong>facherweise wie folgt: Zwei Host-Rechner bedienen<br />
sich e<strong>in</strong>er identischen IP-Adresse. In diesem Fall werden die Client-Masch<strong>in</strong>en gelegentlich<br />
e<strong>in</strong>e Verb<strong>in</strong>dung zum falschen Host herstellen, was e<strong>in</strong> korrekter Ablauf <strong>der</strong> Kommunikation<br />
unterb<strong>in</strong>det. Dieser Machtkampf ist selten anzutreffen, da es zu den Hauptaufgaben e<strong>in</strong>es<br />
kompetenten Adm<strong>in</strong>istrators zählt, bei je<strong>der</strong> Phase des <strong>Netzwerk</strong>designs auf <strong>in</strong>dividuelle<br />
IP-Adressen zu achten. Hierbei hilft beispielsweise die Verwendung von DHCP.
70 KAPITEL 5. TCP-IP<br />
5.8.7 Proxy-ARP<br />
Mit Proxy ARP wird e<strong>in</strong>e von IP-Routern genutzte Technik betitelt, die mit <strong>der</strong> Entwicklung<br />
von TCP/IP spezifiziert wurde. Der S<strong>in</strong>n <strong>der</strong> Methode liegt <strong>in</strong> <strong>der</strong> Beseitigung e<strong>in</strong>iger<br />
Probleme des begrenzten IP-Adressraums von IPv4. Durch dieses Verfahren können Router<br />
unsichtbar gemacht werden und Teilnetze bequem auf an<strong>der</strong>e Interfaces geroutet werden.<br />
Der L<strong>in</strong>uxkernel unterstützt Proxy-ARP, womit sich recht komplexe Router aufbauen lassen.<br />
Nicht nur aufgrund des Wachstums e<strong>in</strong>es <strong>Netzwerk</strong>es kann relativ schnell und verhältnismässig<br />
unerwartet <strong>der</strong> Punkt <strong>der</strong> physikalischen Beschränkung e<strong>in</strong>er <strong>E<strong>in</strong></strong>führung zusätzlicher<br />
Host <strong>in</strong> das System erreicht werden. In diesem Falle kann das Netz nur durch e<strong>in</strong><br />
zweites unabhängiges physikalisches Kabelsystem erweitert werden. In den K<strong>in</strong><strong>der</strong>jahren<br />
von TCP/IP, vor dem Erf<strong>in</strong>den von Netzmasken und Brücken, konnten zwei Kabelsysteme<br />
nur mit e<strong>in</strong>em für zwei verschiedene IP-Ranges konfigurierten Router verbunden werden.<br />
Repeater waren aufgrund des Fehlens <strong>der</strong> Notwendigkeit von Filterungsfunktionen für diese<br />
Arbeit nicht geeignet. IP-Adressen wurden damals rigoros und verschwen<strong>der</strong>isch vergeben<br />
- man konnte es sich ja damals auch noch leisten.<br />
Wenden wir uns e<strong>in</strong>em illustren Beispiel zu: <strong>E<strong>in</strong></strong> Unternehmen ergatterte sich die registrierte<br />
IP-Adresse <strong>der</strong> Klasse B 130.1.2.3. Die Firma benutzt die Ethernet-Technologie<br />
und möchte 2’048 Host-Rechner mit <strong>der</strong> Hilfe von TCP/IP untere<strong>in</strong>an<strong>der</strong> agieren lassen.<br />
Mit <strong>der</strong> Adresse <strong>der</strong> Klasse B stehen dem Unternehmen 65’534 mögliche Hostadressen zur<br />
freien Verfügung. Da man jedoch Ethernet e<strong>in</strong>setzt, können maximal 1’024 Host <strong>in</strong> e<strong>in</strong>em<br />
Segment e<strong>in</strong>gebunden werden. Die Implementierung weiterer Systeme erfor<strong>der</strong>t das Nutzen<br />
e<strong>in</strong>es Routers o<strong>der</strong> e<strong>in</strong>er Bridge. Um nun trotzdem die erste angestrebte Anzahl Host zu<br />
erreichen, muss e<strong>in</strong> zweites autonomes Kabelsystem angelegt werden, welches aufgrund des<br />
regen Datenverkehrs mittels Router an das erste angeschlossen wird. Konventionelle Router<br />
erfor<strong>der</strong>n, dass den jeweiligen Schnittstellen differente IP-Adressen zugeteilt werden.<br />
Obwohl von den 65’534 Adressen <strong>der</strong> Klasse B nur 1’024 gebraucht wurden, können die<br />
restlichen 64’510 Adressen nicht verwendet werden; also offenbahrt sich e<strong>in</strong>e Vergeudung<br />
<strong>in</strong> höchstem Maße. Damit <strong>der</strong> Router e<strong>in</strong>wandfrei arbeiten kann, muss ihm e<strong>in</strong>e zweite IP-<br />
Adresse <strong>der</strong> Klasse B zugeteilt werden, und damit s<strong>in</strong>d erneut ganze 65’510 IP-Adressen<br />
verschwendet. Dieses Vorgehen ist aus technischer Sicht <strong>in</strong> ke<strong>in</strong>ster Weise akzeptabel; abgesehen<br />
von privaten autonomen <strong>Netzwerk</strong>systemen ohne registrierte IP-Adressen.<br />
Das Internet Protokoll bedient sich ARP, um die MAC-Adresse e<strong>in</strong>er <strong>E<strong>in</strong></strong>heit zu ermitteln,<br />
sofern die Netznummer <strong>in</strong> <strong>der</strong> eigenen IP-Adresse <strong>der</strong> des Empfängerknotens entspricht.<br />
An<strong>der</strong>nfalls kommt e<strong>in</strong> routendes Element (Router o<strong>der</strong> Gateway) zum <strong>E<strong>in</strong></strong>satz.<br />
Damit möglichst wenige IP-Adressen verschleu<strong>der</strong>t werden, ist es aus technischer Sicht<br />
wünschenswert den beiden Interfaces des routenden Systems die gleiche Netznummer zuzuteilen.<br />
Wird jedoch dieselbe Netznummer verwendet, muss man e<strong>in</strong> Verfahren f<strong>in</strong>den,<br />
mit dem man die Richtung <strong>der</strong> Weiterleitung von Datagrammen e<strong>in</strong>deutig erkennen kann.<br />
Proxy ARP ist <strong>in</strong> diesem Fall e<strong>in</strong>er <strong>der</strong> Schlüssel.<br />
Proxy ARP kann auf verschiedenste Weisen implementiert werden. Als die effizienteste<br />
Methode ist die Zuordnung von Bits <strong>in</strong> <strong>der</strong> IP-Adresse, anhand <strong>der</strong>er unterschiedliche<br />
Subnetze identifiziert werden können, anzusehen. Das Relais kann als e<strong>in</strong>e Art Puffer die<br />
unnötigen ARP-Rundsende-nachrichten abblocken, da nur die an an<strong>der</strong>e Subnetze adressierten<br />
Broadcasts weitergeroutet werden müssen. Damit kann <strong>der</strong> überschüssige <strong>Netzwerk</strong>verkehr<br />
e<strong>in</strong>gedämmt und die Performance gewahrt werden. Die e<strong>in</strong>zigen Hops, die die elementaren<br />
Bits zur Kennzeichnung <strong>der</strong> verschiedenen Subnetze erkennen können müssen,<br />
s<strong>in</strong>d die Proxy ARP-Geräte. Natürlich erfor<strong>der</strong>t das erreichen dieses Ziels e<strong>in</strong>e durchdachte<br />
Zuweisung des richtigen Adressbereichs von seiten des <strong>Netzwerk</strong>adm<strong>in</strong>istrators. Beispiels-
5.8. ADDRESS RESOLUTION PROTOCOL 71<br />
weise könnten die ersten vier Bits des Host-Anteils <strong>der</strong> IP-Adresse zur Identifizierung <strong>der</strong><br />
verschiedenen Subnetze e<strong>in</strong>gesetzt werden. Dabei wird jedoch nicht, wie von vielen vielleicht<br />
vermutet, mit Subnetz-Masken gearbeitet o<strong>der</strong> die Adressenstruktur des Endknotens<br />
bekannt. Es können nun also 14 Subnetze dadurch def<strong>in</strong>iert werden (Die Subnetze 0 und 15<br />
f<strong>in</strong>den <strong>in</strong> diesem Beispiel aus Gründen <strong>der</strong> <strong>E<strong>in</strong></strong>fachheit ke<strong>in</strong>e Verwendung!). Empfängt nun<br />
die Schnittstelle 1 e<strong>in</strong>e ARP-Anfor<strong>der</strong>ung, überprüft die Proxy ARP-Vermittlungse<strong>in</strong>heit<br />
die Bits <strong>in</strong> <strong>der</strong> Hostadresse darauf, ob die Nachricht e<strong>in</strong> an<strong>der</strong>es Subnetz kennzeichnet.<br />
Wird <strong>der</strong> Gutfall erkannt, f<strong>in</strong>det e<strong>in</strong>e Weiterleitung an die Schnittstelle 2 statt. Dort wird<br />
dann die Absen<strong>der</strong>adresse durch jene <strong>der</strong> Proxy ARP-Schnittstelle 2 ersetzt und als üblicher<br />
ARP-Broadcast <strong>in</strong>s Neuland geblasen. Die jüngst von <strong>der</strong> ganzen Aktion betroffene Proxy<br />
ARP-<strong>E<strong>in</strong></strong>heit speichert die <strong>in</strong> <strong>der</strong> ARP-Antwort vermerkte MAC-Adresse des Absen<strong>der</strong>s-<br />
, sowie des Empfängerknotens und vermerkt an welcher Schnittstelle sich diese bef<strong>in</strong>den.<br />
Wird vom Absen<strong>der</strong> nun noche<strong>in</strong>mal e<strong>in</strong> Datagramm an die Schnittstelle 1 des Routers gesandt,<br />
enthält dieser bereits die Empfängeradresse <strong>der</strong> Proxy ARP-<strong>E<strong>in</strong></strong>heit. Das Datagramm<br />
wird daher direkt von <strong>der</strong> Proxy ARP-<strong>E<strong>in</strong></strong>heit angenommen. Die Proxy ARP-<strong>E<strong>in</strong></strong>heit ersetzt<br />
nun wie<strong>der</strong>um die tatsächliche MAC-Adresse des Empfängerknotens und sendet das<br />
modifizierte Datagramm an die Schnittstelle 2. Diese Methode funktioniert nur, wenn die<br />
beiden Endknoten die Gültigkeit <strong>der</strong> MAC-Adressen <strong>in</strong> den jeweiligen ARP-Antworten<br />
nicht überprüfen. Es ist durch dieses ganze Proze<strong>der</strong>e möglich, mit e<strong>in</strong>er beliebigen MAC-<br />
Adresse zu antworten, die als Ersatz e<strong>in</strong>es an<strong>der</strong>en Hosts fungiert. Der ARP-Cache e<strong>in</strong>es<br />
Endknotens, <strong>der</strong> sich <strong>in</strong> e<strong>in</strong>em Proxy ARP-System bef<strong>in</strong>det, enthält die MAC-Adresse <strong>der</strong><br />
Proxy ARP-<strong>E<strong>in</strong></strong>heit, die vielen IP-Adressen zugeordnet ist. Diverse Firewall-Systeme erlauben<br />
das Verwerfen von durch Proxy ARP modifizierten Datagrammen, um so entfernte<br />
Manipulationen am ARP-Cache zu unterb<strong>in</strong>den.<br />
5.8.8 Probleme durch Proxy-ARP<br />
Viele Router verwenden per Default-<strong>E<strong>in</strong></strong>stellung Proxy ARP, auch wenn ke<strong>in</strong>e Subnetz-<br />
Adressierungs-schema zum <strong>E<strong>in</strong></strong>satz kommen. Das Router-Element greift <strong>in</strong>sofern beim Empfang<br />
e<strong>in</strong>er ARP-Anfor-<strong>der</strong>ung für e<strong>in</strong> an<strong>der</strong>es Netz o<strong>der</strong> Subnetz manipulativ <strong>in</strong> das Geschehen<br />
e<strong>in</strong>, <strong>in</strong>dem es se<strong>in</strong>e eigene MAC-Adresse <strong>in</strong> <strong>der</strong> ARP-Antwort zurückschickt. Zur<br />
Übermittlung des Datagramms an den Empfänger werden die herkömmlichen Routenwahl-<br />
Mechanismen e<strong>in</strong>gsetzt. Dieser Fall kann jedoch nur e<strong>in</strong>treten, wenn e<strong>in</strong> verwirrter o<strong>der</strong><br />
falsch konfigurierter Rechner das Gefühl des Sich-<strong>in</strong>-e<strong>in</strong>em-an<strong>der</strong>en-Netz-Bef<strong>in</strong>den hat und<br />
<strong>der</strong> Router sich an e<strong>in</strong> an<strong>der</strong>es Bild <strong>der</strong> Adressenstruktur klammert. Es läge also e<strong>in</strong> klassischer<br />
Adressierungs-Fehler vor, da zwei Gerätee<strong>in</strong>heiten die IP-Adresserungsschematas<br />
komplett an<strong>der</strong>s <strong>in</strong>terpretieren. Grund dafür kann die Wahl unterschiedlicher Subnetz-<br />
Masken se<strong>in</strong>. Die beiden Geräte würden so mit e<strong>in</strong>er Netzstruktur arbeiten, die für die<br />
Opposition nicht erkennbar und verständlich ist.<br />
Denial of Service durch ARP-Stürme Der Denial of Service-Angriff mittels ARP-<br />
Sturm hat die Überlastung e<strong>in</strong>er <strong>Netzwerk</strong>komponente o<strong>der</strong> e<strong>in</strong>es Netz(abschnitt)es zur<br />
Folge, was unter Umständen e<strong>in</strong>en weiteren weniger destruktiven Angriff erst ermöglicht<br />
(z.B. IP-Spoof<strong>in</strong>g). Die Extremsituation tritt e<strong>in</strong>, wenn ARP-Broadcasts e<strong>in</strong>e non-existente<br />
IP-Adresse <strong>in</strong> Erfahrung br<strong>in</strong>gen versuchen. Alle an das <strong>Netzwerk</strong> angeschlossenen Gateways<br />
beg<strong>in</strong>nen alsdann mit dem Weiterleiten <strong>der</strong> Anfrage an die Nachbarnetze. Ganz extrem<br />
wird dieser Angriff, wenn nach dem ersten Briadcast-Sturm synthetische ARP-Rückantworten<br />
<strong>der</strong> nicht existierenden Adresse versendet werden, die wie<strong>der</strong>um von den Gateways per<br />
Broadcast zur f<strong>in</strong>alen Verstopfung des Netzes weiterverbreitet werden. Solche Broadcast-
72 KAPITEL 5. TCP-IP<br />
Stürme belegen rasch e<strong>in</strong>en Grossteil <strong>der</strong> <strong>Netzwerk</strong>kapazität und lassen die Performance <strong>in</strong><br />
den Keller s<strong>in</strong>ken. Wichtig ist <strong>in</strong> sensiblen Umgebungen im Vorfeld das sogenannte Media-<br />
Speed-Verhalten durch experimentell simulierte Extremsituationen <strong>in</strong> Erfahrung zu br<strong>in</strong>gen.<br />
HAVOC für UNIX/L<strong>in</strong>ux ist e<strong>in</strong> beliebtes Tool zum Erzw<strong>in</strong>gen von ARP-Stürmen.<br />
Denial of Service durch ARP-Fehlimplenetierungen Auch auf Fehlimplementierungen<br />
<strong>der</strong> ARP-Funktionalität können Denial of Service-Attacken abzielen, wie im NetBSD<br />
Security Advisory 1999-010 (ARP table vulnerability) berichtet wird: obsd fun.c schickt<br />
übergrosse ARP-Pakete an e<strong>in</strong>e OpenBSD 2.6-Masch<strong>in</strong>e, und zw<strong>in</strong>g sie so zur Kernel-Panik.<br />
Aber nicht nur UNIX-Derivate s<strong>in</strong>d von solchen Schlampereien betroffen. Auch Microsot<br />
W<strong>in</strong>dows, welches e<strong>in</strong>e Menge Code von BSD direkt übernommen haben muss, kann mit<br />
den C-Scripts w<strong>in</strong>arp.c und po<strong>in</strong>k.c auf die Pelle gerückt werden. Diese Angriffs-Form wird<br />
im Thread von Joel Jacobson <strong>in</strong> Bugtraq erstmals vorgestellt. Ähnliche Diskussionen f<strong>in</strong>den<br />
sich <strong>in</strong> den beiden Threads von Andrew Lancashire und Lisa Napier über DoS-Attacken<br />
auf Cisco-Systeme, und von Scott Blake über Cabletron-Router, durch das Überfluten <strong>der</strong><br />
ARP-Tabelle.<br />
5.9 ICMP - Internet Control Message Protocol<br />
Das ICMP dient zur Übermittlung von Fehler- und Status<strong>in</strong>formationen. ICMP wird auch<br />
von IP selbst verwendet, um beispielsweise Fehler zu melden. ICMP ist daher zw<strong>in</strong>gend <strong>in</strong><br />
IP vorhanden; funktional gesehen ist es Teil von IP, technisch setzt es jedoch auf IP auf.<br />
ICMP kann aber auch direkt von Applikationen verwendet werden.<br />
ICMP Pakete werden verwendet, wenn beispielsweise <strong>der</strong> Zielrechner o<strong>der</strong> das Zielnetzwerk<br />
nicht erreichbar ist. In diesem Fall gibt e<strong>in</strong> TCP/IP Router beispielsweise e<strong>in</strong> ”host<br />
unreachable” bzw. ”network unreachable” Paket zurück. ICMP ist im Network Layer angesiedelt,<br />
ist aber eigentlich ke<strong>in</strong> wirklich eigenständiges Protokoll, da die Übermittlung<br />
von ICMP-Nachrichten durch IP-Pakete erfolgt und dazu dient, die Übertragung von den<br />
eigentlichen Daten zu steuert. ICMP ist damit ke<strong>in</strong> Datenfluss son<strong>der</strong>n e<strong>in</strong> Kontrollfluss,<br />
<strong>der</strong> den Datenfluss steuert.<br />
Durch se<strong>in</strong>e Vielseitigkeit bietet ICMP aber auch lei<strong>der</strong> die Möglichkeit versteckte Nachrichten<br />
zu übermitteln. <strong>E<strong>in</strong></strong> Stichwort ist hier das sogenannte ”ICMP-Tunnel<strong>in</strong>g”. Beim<br />
ICMP-Tunnel<strong>in</strong>g wird das Datenfeld e<strong>in</strong>es ICMP-Paketes genutzt, um Informationen zwischen<br />
Rechnern auszutauschen. ICMP-Tunnel<strong>in</strong>g ist aber ke<strong>in</strong>e Technik, die es eventuellen<br />
Datenspionen ermöglicht, <strong>in</strong> e<strong>in</strong>en Rechner o<strong>der</strong> e<strong>in</strong> Netz e<strong>in</strong>zubrechen. Dennoch stellt das<br />
Tunnel<strong>in</strong>g e<strong>in</strong>e Bedrohung für das Sicherheitskonzept e<strong>in</strong>es Netzes dar.<br />
<strong>E<strong>in</strong></strong>e recht bekannte Anwendung von ICMP ist das Programm p<strong>in</strong>g, mit dem man die<br />
Erreichbarkeit e<strong>in</strong>es an<strong>der</strong>en Rechners prüfen kann. Dazu wird e<strong>in</strong> ICMP echo request an<br />
den Zielrechner geschickt, dieser sendet e<strong>in</strong> ICMP echo reply zurück, wenn er denn verfügbar<br />
ist. P<strong>in</strong>g ist e<strong>in</strong> e<strong>in</strong>faches Shell-Kommando und wird mittels ”p<strong>in</strong>g Zieladresse” aufgerufen.<br />
dirk@l<strong>in</strong>ux:~/nwak> p<strong>in</strong>g 134.76.60.86<br />
PING 134.76.60.86 (134.76.60.86) from 132.230.9.124 : 56(84) bytes of data.<br />
64 bytes from 134.76.60.86: icmp_seq=1 ttl=47 time=21.1 ms<br />
64 bytes from 134.76.60.86: icmp_seq=2 ttl=47 time=23.2 ms<br />
64 bytes from 134.76.60.86: icmp_seq=4 ttl=47 time=20.9 ms<br />
--- 134.76.60.86 p<strong>in</strong>g statistics ---<br />
4 packets transmitted, 3 received, 25% loss, time 3019ms<br />
rtt m<strong>in</strong>/avg/max/mdev = 20.952/21.774/23.243/1.041 ms
5.10. DOMAIN-NAME-SERVICE (DNS) 73<br />
ICMP wird meistens von IP für den Benutzer unsichtbar verwendet, zum Beispiel um<br />
herauszubekommen, wie groß e<strong>in</strong> Paket se<strong>in</strong> kann, das von L<strong>in</strong>k Protokoll übertragen werden<br />
kann, o<strong>der</strong> um Fehler zu melden.<br />
ICMP hat sehr unterschiedliche Informationen zu transportieren. Deshalb ist nur <strong>der</strong><br />
Grundaufbau des ICMP-Hea<strong>der</strong>s immer gleich, die Bedeutung <strong>der</strong> e<strong>in</strong>zelnen Fel<strong>der</strong> im Protokollkopf<br />
wechselt jedoch. Je<strong>der</strong> ICMP-Nachrichtentyp wird <strong>in</strong> e<strong>in</strong>em IP-Datengramm e<strong>in</strong>gekapselt.<br />
Die <strong>der</strong>zeit wichtigsten ICMP-Nachrichtentypen s<strong>in</strong>d:<br />
• Dest<strong>in</strong>ation Unreachable (Ziel nicht erreichbar) - Diese Nachricht wird verwendet,<br />
wenn e<strong>in</strong> <strong>Netzwerk</strong>, Host, Protokoll o<strong>der</strong> Port nicht erreichbar ist, e<strong>in</strong> Paket nicht<br />
fragmentiert werden kann, weil das DontFragment-Bit gesetzt ist o<strong>der</strong> die Source<br />
Route Option nicht erfolgreich verwendet werden konnte.<br />
• Parameter Problem - Verständigt den Absen<strong>der</strong> e<strong>in</strong>es Datengramms darüber, dass das<br />
Paket aufgrund e<strong>in</strong>er fehlerhaften Angabe im IP-Hea<strong>der</strong> verworfen werden mußte.<br />
• Redirect - Wird ausgesendet, wenn e<strong>in</strong> Router feststellt, dass e<strong>in</strong> Paket falsch weitergeleitet<br />
wurde. Der sendende Host wird damit aufgefor<strong>der</strong>t, die angegebene Route zu<br />
än<strong>der</strong>n.<br />
• Time Exceeded (Zeit verstrichen) - Diese Nachricht wird an den Absen<strong>der</strong> e<strong>in</strong>es Datengramms<br />
gesendet, dessen Lebensdauer den Wert 0 erreicht hat. Diese Nachricht<br />
ist e<strong>in</strong> Zeichen dafür, dass Pakete <strong>in</strong> e<strong>in</strong>em Zyklus wan<strong>der</strong>n, dass Netz überlastet ist<br />
o<strong>der</strong> die Lebensdauer für das Paket zu ger<strong>in</strong>g e<strong>in</strong>gestellt wurde.<br />
• Echo Request und Reply - Mit diesen Nachrichten kann festgestellt werden, ob e<strong>in</strong><br />
bestimmtes Ziel erreichbar ist. <strong>E<strong>in</strong></strong> Echo Request wird an e<strong>in</strong>en Host gesendet und<br />
hat e<strong>in</strong>en Echo Reply zur Folge (falls <strong>der</strong> Host erreicht wird). Das P<strong>in</strong>g-Kommando<br />
nutzt diese Eigenschaft des ICMP.<br />
• Timestamp Request und Reply - Diese beiden Nachrichten s<strong>in</strong>d ähnlich den zuvor beschriebenen<br />
Nachrichten, außer dass die Ankunftszeit <strong>der</strong> Nachricht und die Sendezeit<br />
<strong>der</strong> Antwort mit erfaßt werden. Mit diesen Nachrichtentypen kann die Netzleistung<br />
gemessen werden.<br />
<strong>E<strong>in</strong></strong>e ICMP-Nachricht wird immer als Antwort auf e<strong>in</strong> Datengramm verschickt. Entwe<strong>der</strong><br />
ist e<strong>in</strong> Datengramm auf e<strong>in</strong> Problem gestoßen, o<strong>der</strong> das Datengramm enthält e<strong>in</strong>e<br />
ICMP-Anfrage, auf die e<strong>in</strong>e Antwort versendet werden muss. In beiden Fällen sendet e<strong>in</strong><br />
Host o<strong>der</strong> Router e<strong>in</strong>e ICMP-Nachricht an die Quelle des Datengramms zurück.<br />
5.10 Doma<strong>in</strong>-Name-Service (DNS)<br />
Der Doma<strong>in</strong>-Name-Service ist e<strong>in</strong> auf TCP/IP basieren<strong>der</strong> Dienst und ke<strong>in</strong> Bestandteil<br />
<strong>der</strong> Vermit-tlungs- bzw. Transportschicht. Jedoch werden vielfach Masch<strong>in</strong>en nicht primär<br />
über ihre <strong>Netzwerk</strong>adresse, son<strong>der</strong>n ihren Hostnamen und evtl. Doma<strong>in</strong>namen, die zusammen<br />
den Full Qualified Doma<strong>in</strong> Name ergeben, angesprochen. Deshalb wird dieser Dienst<br />
an dieser Stelle bereits kurz vorgestellt. In <strong>der</strong> Benutzung hat man meistens clientseitig mit<br />
DNS zu tun, die Serverseite wird <strong>in</strong> e<strong>in</strong>em eigenen Abschnitt geson<strong>der</strong>t vorgestellt. Fast jede<br />
Masch<strong>in</strong>e im Internet besitzt neben <strong>der</strong> numerischen Adresse (IP-Nummer) m<strong>in</strong>d. e<strong>in</strong>en<br />
sybolischen Namen (Hostname). ”Nameserver” kennen die zu den symbolischen Namen<br />
gehörenden IP-Adressen und umgekehrt. Wenn man Nameserver direkt abfragen will, kann
74 KAPITEL 5. TCP-IP<br />
Kürzel Bedeutung Kürzel Bedeutung<br />
gov governemental com Unternehmen (”commercial”)<br />
de Deutschland edu Ausbildungse<strong>in</strong>richtung<br />
net <strong>Netzwerk</strong> org Organisation<br />
Tabelle 5.9: Die traditionellen Domänenendungen<br />
Kürzel Bedeutung Kürzel Bedeutung<br />
name Privatpersonen biz Unternehmungen<br />
eu Europa <strong>in</strong>fo Informational<br />
ws ”WebSite” <strong>in</strong>t Internationale Organisationen<br />
Tabelle 5.10: Die von <strong>der</strong> IANA beschlossenen/vorgesehenen neuen Domänenendungen<br />
man das mit den Kommandos host o<strong>der</strong> nslookup machen. Mittels DNS (Doma<strong>in</strong>-Name-<br />
Service) werden die Hostnamen <strong>in</strong> e<strong>in</strong>en hierarchischen Namensraum e<strong>in</strong>geglie<strong>der</strong>t, wobei<br />
geografische Gesichtspunkte (Län<strong>der</strong>doma<strong>in</strong>s, wie ”de”) o<strong>der</strong> organisatorische Gründe (Firmen)<br />
Ausrichtungskriterien abgeben können.<br />
Die Organisation von Namen <strong>in</strong> e<strong>in</strong>er Hierarchie von Doma<strong>in</strong>s schafft gleichzeitig die<br />
Schwierigkeit <strong>der</strong> <strong>E<strong>in</strong></strong>deutigkeit von Namen aus <strong>der</strong> Welt. Bei DNS muß e<strong>in</strong> Hostname nur<br />
<strong>in</strong>nerhalb e<strong>in</strong>er (Sub-)Doma<strong>in</strong> e<strong>in</strong>deutig se<strong>in</strong>, und schon ist sichergestellt, dass er sich von<br />
allen an<strong>der</strong>en Hosts weltweit unterscheidet (Sonst wäre <strong>der</strong> beliebte Aliasname ”www” nicht<br />
möglich!). Mehr noch, voll qualifizierte Namen s<strong>in</strong>d e<strong>in</strong>facher zu merken.<br />
Der FQDN (Full Qualified Doma<strong>in</strong> Name), die Komb<strong>in</strong>ation aus Hostnamen und <strong>der</strong><br />
Doma<strong>in</strong> (<strong>in</strong>cl. evtl. Subdmoma<strong>in</strong>namen) wird durch Punkte <strong>in</strong> Bestandteile geglie<strong>der</strong>t, die<br />
über den Namen und die Zugehörigkeit des Rechners Auskunft geben.<br />
Das erste Wort des FQDN ist <strong>der</strong> sogenannte ”hostname”, <strong>der</strong> h<strong>in</strong>tere Teil des FQDN<br />
ist <strong>der</strong> ”doma<strong>in</strong>name”. Während <strong>der</strong> ”doma<strong>in</strong>name” vorgegeben ist, hat man bei <strong>der</strong> Taufe<br />
des Rechners freie Wahl. Neben Namen, die <strong>in</strong> Zusammenhang mit <strong>der</strong> doma<strong>in</strong> stehen (s.o.)<br />
s<strong>in</strong>d außerdem Comic-Helden, Romanfiguren, berühmte Personen, antike Götter usw. sehr<br />
beliebt. Dem Rechner kann man auch weitere Namen verpassen, sogenannte Aliase, die<br />
meistens die Funktion <strong>der</strong> Masch<strong>in</strong>e ausdrücken, z.B. www.goe.net, ftp.gwdg.de ...<br />
Zu befragende Nameserver unter L<strong>in</strong>ux werden <strong>in</strong> <strong>der</strong> Datei /etc/resolv.conf fest vermerkt<br />
o<strong>der</strong> dynamisch per Bootp/DHCP o<strong>der</strong> durch die Modem- bzw. ISDN-Skripten nach<br />
dem Bezug per PPP e<strong>in</strong>getragen. Diese Datei hat folgendes Format:<br />
search kolosseum.local goe.net gwdg.de<br />
nameserver 10.10.156.1<br />
nameserver 134.76.60.21<br />
Die ”search” Or<strong>der</strong> def<strong>in</strong>iert, welche Doma<strong>in</strong>namen an Hostnamen angehangen wurden,<br />
die ohne Doma<strong>in</strong>kürzel angesprochen wurden: ”p<strong>in</strong>g test” würde versuchen zuerst<br />
”test.kolosseum.local”, dann ”test.goe.net” und zum Schluss ”test.gwdg.de” zu ergänzen<br />
und aufzulösen. So kann man sich beim Bewegen <strong>in</strong> <strong>der</strong> eigenen Doma<strong>in</strong> viel Tipparbeit<br />
sparen. Es können maximal zehn Ergänzungen <strong>der</strong> Suchreihenfolge und maximal drei Nameserver<br />
angegeben werden. Der zweite und dritte DNS werden nur befragt, wenn <strong>der</strong> erste<br />
nicht reagierte, nicht jedoch, wenn die Anfrage auf dem ersten ke<strong>in</strong>en Erfolg brachte.
5.11. TRANSMISSION CONTROL PROTOCOL (TCP) 75<br />
5.11 Transmission Control Protocol (TCP)<br />
Mit <strong>der</strong> Übertragung von Datagrammen (IP-Paketen) von e<strong>in</strong>em <strong>Netzwerk</strong>knoten zum an<strong>der</strong>en<br />
ist es nicht getan. Wenn man sich remote e<strong>in</strong>loggen möchte, z.B. mit dem Kommando<br />
ssh o<strong>der</strong> Daten von e<strong>in</strong>em Webserver bezieht, ist hierfür e<strong>in</strong>e zuverlässige Verb<strong>in</strong>dung die<br />
Voraussetzung. Der Datenstrom wird zum Transport <strong>in</strong> Pakete aufgeteilt, da grosse Dateien<br />
TCP-H<br />
Length<br />
SOURCE PORT DESTINATION PORT<br />
unused<br />
CHECKSUM<br />
SEQUENCE NUMBER<br />
ACKNOWLEDGEMENT NUMBER<br />
U<br />
R<br />
G<br />
A<br />
C<br />
K<br />
P<br />
S<br />
H<br />
R<br />
S<br />
T<br />
S<br />
Y<br />
N<br />
32bit<br />
F<br />
I<br />
N<br />
OPTIONS (0 or more 32bit words)<br />
BEGINNING OF DATA<br />
(optional)<br />
WINDOW SIZE<br />
URGENT POINTER<br />
Transmission Control Protocol (TCP)<br />
Abbildung 5.12: TCP Paket-Hea<strong>der</strong><br />
nicht ”<strong>in</strong> e<strong>in</strong>em Stück” transferiert werden können und <strong>in</strong>teraktive Verb<strong>in</strong>dungen zeitnah<br />
laufen sollen, d.h. nicht ewig gewartet werden kann, bis e<strong>in</strong> grosses Paket ”voll” ist. IP ist<br />
(absichtlich) nicht zuverlässig. Überlastungen im <strong>Netzwerk</strong> werden durch das ”Vergessen”<br />
von Paketen gelöst. Die Verantwortung für die Integritätsprüfung und die Vollständigkeit<br />
<strong>der</strong> Daten übernehmen die beiden kommunizierenden Rechner, die fehlerhafte Daten erkennen<br />
sollen und diese im Fehlerfall erneut anfor<strong>der</strong>n.<br />
Diesen Part übernimmt e<strong>in</strong> weiteres Protokoll, das Transmission Control Protocol (TCP).<br />
Dieses stellt e<strong>in</strong>en zuverlässigen Dienst über IP-Verb<strong>in</strong>dungen her. Da es auf IP aufsetzt,<br />
muss sich TCP um den ”Weg”, das Rout<strong>in</strong>g durchs Netz, ke<strong>in</strong>e Gedanken machen. TCP<br />
br<strong>in</strong>gt se<strong>in</strong>e Informationen wie<strong>der</strong>um <strong>in</strong> e<strong>in</strong>em Hea<strong>der</strong> unter: Dieser ist 20 Bytes lang. <strong>E<strong>in</strong></strong>e<br />
TCP-Verb<strong>in</strong>dung kann man sich am besten wie e<strong>in</strong> Telefonat vorstellen.<br />
TCP identifiziert die Endpunkte e<strong>in</strong>er solchen Verb<strong>in</strong>dung anhand <strong>der</strong> IP-Adressen <strong>der</strong><br />
beiden Rechner und <strong>der</strong> Nummer e<strong>in</strong>es sogenannten Ports auf jedem Host. Ports können<br />
Sie sich als e<strong>in</strong>e Art <strong>E<strong>in</strong></strong>- und Ausgang für <strong>Netzwerk</strong>verb<strong>in</strong>dungen vorstellen. Diese Adressierung<br />
kann man mit e<strong>in</strong>em Haus (IP-Nummer) und den verschiedenen Türkl<strong>in</strong>geln (Port-<br />
Nummern) vergleichen. Auf e<strong>in</strong>er <strong>Unix</strong>-Masch<strong>in</strong>e kann man sich die Zuordnung von Diensten<br />
zu Ports <strong>in</strong> <strong>der</strong> Datei /etc/services ansehen.<br />
In TCP/IP-Suite übernimmt das Transmission Control Protocol die Aufgaben <strong>der</strong> Transportschicht.<br />
Es etabliert e<strong>in</strong> verb<strong>in</strong>dungsorientiertes Protokoll, welches auf dem verb<strong>in</strong>dungslosen<br />
Internet-Protokoll aufsetzt. Dadurch gel<strong>in</strong>gt es, e<strong>in</strong>en zuverlässigen Bytestromes<br />
<strong>in</strong> e<strong>in</strong>er End-zu-End-Ver-b<strong>in</strong>dung auf e<strong>in</strong>em unzuverlässigen Netzverbund aufzubauen.<br />
TCP nimmt Datenströme von Benutzerapplikationen entgegen und teilt diese <strong>in</strong> maximal<br />
64 kByte grosse Blöcke auf. Diese Datenblöcke, Datagramme23 genannt, werden wie<strong>der</strong>um<br />
mit e<strong>in</strong>em Hea<strong>der</strong> versehen. Das so gebildete Datagramm wird dann an die IP-Schicht<br />
23 zur Unterscheidung von den Datenblöcken <strong>der</strong> Hardwareschicht ”Frames” und den Datenblöcken <strong>der</strong><br />
Vermittlungsschicht ”Packet”
76 KAPITEL 5. TCP-IP<br />
weitergeleitet.<br />
Da IP selbst ke<strong>in</strong>e Zustellbestätigung kennt muss TCP diese implementieren und bei<br />
Bedarf e<strong>in</strong> Neuverschicken verlorengegangener o<strong>der</strong> beschädigter Pakete veranlassen. Weiterh<strong>in</strong><br />
muss die Reihenfolge <strong>der</strong> Pakete kontrolliert und evtl. korrigiert werden.<br />
Da auf e<strong>in</strong>em Host mehrere Datenströme möglich se<strong>in</strong> sollen und nur e<strong>in</strong>e IP-Adresse<br />
vergeben wird, erfolgt die Def<strong>in</strong>ition von speziellen Endpunkten. Diese Endpunkte werden<br />
als Sockets bezeichnet. Jedes Socket hat e<strong>in</strong>e Socketnummer. Diese besteht aus <strong>der</strong><br />
IP-Adresse des Hosts und e<strong>in</strong>er 16 bittigen Portnummer. <strong>E<strong>in</strong></strong> Socket kann mehrere Verb<strong>in</strong>dungen<br />
verwalten, wobei jedoch jedes Quadrupel aus Quelladresse und -port und Zieladresse<br />
und -port e<strong>in</strong>deutig se<strong>in</strong> muss.<br />
Portnummern unterhalb von 256 bzw. 1024 s<strong>in</strong>d für sogenannte ”well-known services”<br />
reserviert. Hier f<strong>in</strong>det man die Standarddienste Weitere sechs <strong>E<strong>in</strong></strong>-Bit-Fel<strong>der</strong> des Hea-<br />
Service Port-Nummer Service Portnummer<br />
ftp 21 pop3 110<br />
ssh 22 ntp 123<br />
telnet 23 rsync 873<br />
smtp 25 imaps 993<br />
http 80 pop3s 995<br />
ldap 389 ldaps 636<br />
Tabelle 5.11: TCP-basierte Standardservices<br />
<strong>der</strong>s s<strong>in</strong>d für diverse Flags vorgesehen. Sie steuern das Verb<strong>in</strong>dungsverhalten e<strong>in</strong>es TCP-<br />
Datenkanals. Das Flag Push signalisiert, dass ke<strong>in</strong>e Datenpufferung stattf<strong>in</strong>den soll, d.h.<br />
dass die Datagramme nicht vollständig aufgefüllt werden sollen. Dieses ist bei <strong>in</strong>teraktiven<br />
Verb<strong>in</strong>dungen, wie ssh, telnet und dem Steuerkanal von ftp s<strong>in</strong>nvoll. Sonst müßte man<br />
warten bis z.B. <strong>der</strong> User an die e<strong>in</strong>tausend Zeichen getippt hat, um e<strong>in</strong> Paket zu verschicken.<br />
Synchronize, Acknowledge, Reset und F<strong>in</strong>ish dienen <strong>der</strong> Verb<strong>in</strong>dungssteuerung. Mit<br />
Urgend kann das ”Dr<strong>in</strong>glichkeitsflag” gesetzt werden. Dann zeigt <strong>der</strong> Urgendpo<strong>in</strong>ter, <strong>der</strong><br />
<strong>in</strong> e<strong>in</strong>em weiteren Datenfeld des Hea<strong>der</strong>s untergebracht ist, auf das Paket welches sofort<br />
behandelt werden soll. Damit kann e<strong>in</strong>e ”Out-of-Band” Signalisierung erfolgen.<br />
Das Feld für die Hea<strong>der</strong>-Länge gibt die Zahl <strong>der</strong> verwendeten 32 bit-Worte an. Damit<br />
ist das Startfeld <strong>der</strong> Daten bekannt. <strong>E<strong>in</strong></strong> Analogon f<strong>in</strong>det man im Fragment Offset des<br />
Internet-Protokolls.<br />
Sequence- und Acknowledgenummern dienen <strong>der</strong> Kontrolle <strong>der</strong> Paketreihenfolge und<br />
sollen die Sicherheit e<strong>in</strong>er Verb<strong>in</strong>dung erhöhen. Letzteres darf jedoch nicht dazu verführen,<br />
anzunehmen, dass e<strong>in</strong>e TCP-Sitzung sicher vor bewußter Manipulation o<strong>der</strong> Mitlauschen<br />
ist. Da alle Daten offen, d.h. unverschlüsselt, übertragen werden, können Angreifer versuchen<br />
die Acknowledge- und Sequencenummern zu raten und damit e<strong>in</strong>en Datenstrom<br />
übernehmen.<br />
Diese Nummern werden quasizufällig beim Verb<strong>in</strong>dungsaufbau gesetzt 24 und dann jeweils<br />
um e<strong>in</strong>s (bzw. <strong>in</strong> späteren Implementationen auch an<strong>der</strong>e zufällige Integer-Beträge)<br />
erhöht.<br />
Die W<strong>in</strong>dow-Size, e<strong>in</strong> weiteres Feld des TCP-Hea<strong>der</strong>s, erlaubt Flusskontrolle. Damit<br />
kann die Geschw<strong>in</strong>digkeit e<strong>in</strong>er Verb<strong>in</strong>dung gesteuert werden, <strong>in</strong> dem die Datenmenge bestimmt<br />
wird, nach <strong>der</strong> Paketbestätigungen verschickt werden. Hierbei f<strong>in</strong>det das Slid<strong>in</strong>g-<br />
24 Da das Verfahren möglichst schnell und effizient arbeiten soll, wurde bei früheren TCP-<br />
Implementationen die Zahl e<strong>in</strong>fach erhöht, aus dem Zeittakt abgeleitet etc.
5.12. USER DATAGRAM PROTOCOL (UDP) 77<br />
W<strong>in</strong>dow-Verfahren Anwendung. Damit wird e<strong>in</strong> Zeitfenster eröffnet, <strong>in</strong> dem e<strong>in</strong>e Paketbestätigung<br />
e<strong>in</strong>gegangen se<strong>in</strong> muss.<br />
TCP benutzt e<strong>in</strong>e aufwendige ”State-Mach<strong>in</strong>e” für die e<strong>in</strong>deutige Charakterisierung des<br />
jeweiligen Verb<strong>in</strong>dungszustandes.<br />
Der Verb<strong>in</strong>dungsaufbau erfolgt mittels des sogenannten ”Three-Way-Handshakes”. Erst<br />
nach e<strong>in</strong>em erfolgreichen Verb<strong>in</strong>dungsaufbau kann e<strong>in</strong> Datentransfer stattf<strong>in</strong>den. Für Verb<strong>in</strong>dungsabbau<br />
erfolgt e<strong>in</strong> ”geordneter Abschluss” analog zum Aufbau.<br />
5.12 User Datagram Protocol (UDP)<br />
In vielen Fällen <strong>der</strong> <strong>Netzwerk</strong>kommunikation genügt die Übertragung e<strong>in</strong>es e<strong>in</strong>zigen Paketes<br />
zur Informationsübermittlung <strong>in</strong> jede Richtung. Der Aufwand würde durch das vorgeschaltete<br />
3-Wege-Handshake, welches TCP implementiert, und den geordneten Abbau <strong>der</strong><br />
Verb<strong>in</strong>dung gewaltig angehoben. Dadruch entstünde e<strong>in</strong>e unnötige Belastung des <strong>Netzwerk</strong>es.<br />
<strong>E<strong>in</strong></strong> weiteres <strong>in</strong> IP-<strong>Netzwerk</strong>en verwendetes Protokoll ist das im Gegensatz zu TCP<br />
ungesicherte User Datagram Protocol (UDP). Mit UDP werden e<strong>in</strong>zelne Pakete an den<br />
entsprechenden Dienst gesandt, ohne dafür e<strong>in</strong>e Verb<strong>in</strong>dung aufzubauen. Klassischerweise<br />
verwenden NFS, SNMP und RWHO UDP. Die Grösse des Pakethea<strong>der</strong>s beträgt bei UDP<br />
8 Byte und ist damit gegenüber TCP erheblich ger<strong>in</strong>ger.<br />
Beispiele für die Anwendung e<strong>in</strong>es solchen sparsamen Protokolls s<strong>in</strong>d das DHCP (Dynamic<br />
Host Configuration Protocol) o<strong>der</strong> DNS (Doma<strong>in</strong> Name System). Die genannten<br />
Protokolle f<strong>in</strong>den nur (DNS sehr viel) im LAN statt - dieses zeichnet sich üblicherweise<br />
durch sehr ger<strong>in</strong>ge Fehlerraten aus.<br />
Mit UDP wurde das Design e<strong>in</strong>es sehr e<strong>in</strong>fachen Protokolls <strong>der</strong> Transportschicht geschaffen,<br />
welches IP mit Transportfunktionalität ausstattet. Das User Datagramm Protocol ist<br />
verb<strong>in</strong>dungslos und implementiert nur e<strong>in</strong>en e<strong>in</strong>fachen Hea<strong>der</strong>.<br />
32 bit<br />
Source Port Dest<strong>in</strong>ation Port<br />
UDP Length UDP Checksum<br />
User Datagram Protocol<br />
Abbildung 5.13: UDP Paket-Hea<strong>der</strong><br />
UDP verwendet wie TCP 16 bittige Portnummern, womit 65.536 UDP-Ports auf e<strong>in</strong>er<br />
Masch<strong>in</strong>e verfügbar s<strong>in</strong>d. Diese können komplett parallel zu den TCP-Ports verwendet<br />
werden. Weiterh<strong>in</strong> wird die Paketlänge und e<strong>in</strong>e Prüfsumme vermerkt. UDP kennt ke<strong>in</strong>e<br />
Bestätigungsmeldungen und ke<strong>in</strong>e Prüfung auf Reihenfolge. Der UDP-Hea<strong>der</strong> ist immer<br />
8 Byte lang 25 . Deshalb erhält man sehr ger<strong>in</strong>ge Latenzzeiten. Es eignet sich gut für Broadcasts.<br />
Alle weiteren Aufgaben, die TCP zusätzlich implementiert, müssen bei <strong>der</strong> Verwendung<br />
von UDP von <strong>der</strong> Applikation übernommen werden.<br />
UDP-Pakete können auch per Broadcast an alle Hosts des lokalen Netzes versandt werden,<br />
die IP-Adresse des Empfängers ist dann 255.255.255.255. Das Programm rwhod verwendet<br />
dieses Verfahren, um e<strong>in</strong>geloggte Benutzer und die Uptime <strong>der</strong> Masch<strong>in</strong>en <strong>in</strong> e<strong>in</strong>em<br />
<strong>Netzwerk</strong> zu ermitteln. Auf diese Weise können recht e<strong>in</strong>fach Systeme realisiert werden, die<br />
bestimmte Listener suchen. Diese melden sich auf e<strong>in</strong>en solchen Broadcast dann mit e<strong>in</strong>em<br />
25 zum Vergleich: TCP hat 20 Byte plus evtl. Optionen
78 KAPITEL 5. TCP-IP<br />
entsprechenden Paket; alle an<strong>der</strong>en bekommen das Paket erst gar nicht o<strong>der</strong> müssen sich<br />
e<strong>in</strong>fach an ”alle” wenden. Broadcast-Pakete gehen nur e<strong>in</strong>mal über die <strong>Netzwerk</strong>-Leitung.<br />
Es wird also nicht für jeden Teilnehmer e<strong>in</strong> getrenntes Paket verschickt. Die Leitungs-<br />
Belastung ist also gleich <strong>der</strong> beim Versenden e<strong>in</strong>es Pakets an nur e<strong>in</strong>en Peer.<br />
5.13 Ports<br />
Ports wurden im Zusammenhang <strong>der</strong> Transportprotokolle UDP und TCP bereits kurz<br />
erwähnt, aber kaum erklärt. Dies soll an dieser Stelle nachgeholt werden. Über das TCP<br />
und UDP Protokoll können Daten zu e<strong>in</strong>em an<strong>der</strong>en Rechner übertragen werden. Nun hat<br />
man aber häufig mehrere Dienste auf e<strong>in</strong>em Rechner, und möchte gleichzeitig mit mehreren<br />
Diensten kommunizieren können. Da also e<strong>in</strong> Rechner <strong>in</strong> <strong>der</strong> Regel mehr als e<strong>in</strong>en<br />
Dienst anbietet (z.B. FTP, Telnet, POP, ...), muß man neben <strong>der</strong> IP-Adresse e<strong>in</strong> weiteres<br />
Adressierungsmerkmal f<strong>in</strong>den. Dies s<strong>in</strong>d die sogenannten Ports. So erreicht man z.B. den<br />
Dienst FTP auf e<strong>in</strong>em Rechner <strong>in</strong> <strong>der</strong> Regel über TCP Port 21, Telnet läuft über TCP<br />
Port 23, DNS auf UDP Port 53. H<strong>in</strong>ter jedem Port steht auf dem Rechner e<strong>in</strong> Prozeß, <strong>der</strong><br />
auf Anfragen wartet, h<strong>in</strong>ter Port 21 entsprechend <strong>der</strong> FTP-Daemon. Solche üblichen und<br />
allgeme<strong>in</strong> bekannten Ports nennt man ”well-known ports”.<br />
Man sollte die Informationen nicht verwechseln. Adressen s<strong>in</strong>d Teile von IP. Ports s<strong>in</strong>d<br />
Teile von UDP und TCP. Es gibt damit also ke<strong>in</strong>e IP-Ports, son<strong>der</strong>n nur UDP Ports und<br />
TCP Ports.<br />
In <strong>der</strong> Datei /etc/services s<strong>in</strong>d etliche ”well-known ports” aufgeführt.<br />
5.14 Aufgaben<br />
5.14.1 Internets<br />
1. Warum wurde e<strong>in</strong> weiteres (hardwareunabhängiges) <strong>Netzwerk</strong>-Protokoll mit TC/IP<br />
geschaffen?<br />
2. Welche an<strong>der</strong>en <strong>Netzwerk</strong>protokolle s<strong>in</strong>d auf <strong>der</strong> gleichen OSI-Schicht anzusiedeln,<br />
wie TCP/IP? Warum spielen die meisten eigentlich ke<strong>in</strong>e Rolle mehr?<br />
5.14.2 Internet Protokoll / Hea<strong>der</strong><br />
1. Wozu dient das TTL-Feld im IP-Hea<strong>der</strong>?<br />
2. Man ergänze m<strong>in</strong>destens vier IP-Hea<strong>der</strong>-Fel<strong>der</strong>!<br />
3. Anhand welchen IP-Hea<strong>der</strong>-Felds kann man unter Umständen erkennen, wieviele Masch<strong>in</strong>en<br />
h<strong>in</strong>ter e<strong>in</strong>er maskierenden Firewall (NAT) laufen?<br />
4. <strong>E<strong>in</strong></strong> Rechner hat e<strong>in</strong> IP-Datagramm empfangen und erfolgreich ausgewertet. Woher<br />
weiss die Masch<strong>in</strong>e, an welche höhere <strong>Netzwerk</strong>schicht <strong>der</strong> Inhalt dieses Pakets (die<br />
sog. Payload) weitergereicht werden soll?
5.14. AUFGABEN 79<br />
5. Welches Protokoll auf welcher Schicht des TCP/IP-Stacks benutzt das Kommando<br />
p<strong>in</strong>g (zur Feststellung <strong>der</strong> Erreichbarkeit von Rechnern)?<br />
6. Was macht das ToS (Type of Service) Feld im IP-Hea<strong>der</strong>? Weshalb wird es meistens<br />
ignoriert?<br />
5.14.3 IP-Netze<br />
1. Was unterscheidet die folgenden IP-Nummern im Netz 134.76.60.0/24: 132.230.4.0,<br />
132.230.4.232, 132.230.4.255, 132.230.4.254, 132.230.4.1 vone<strong>in</strong>an<strong>der</strong>?<br />
2. Wie konnte e<strong>in</strong> Router früher schon an <strong>der</strong> IP-Adresse erkennen, um was für e<strong>in</strong> Netz<br />
(Netzmaske) es sich handelt? Weshalb hat man dieses Konzept aufgegeben?<br />
3. Wenn man e<strong>in</strong> Class-C-<strong>Netzwerk</strong> (Netzmaske 255.255.255.0 <strong>in</strong> vier Subnetze aufspaltet,<br />
wieviele Masch<strong>in</strong>en können dann <strong>in</strong> jedem Netz adressiert werden? Erkläre die<br />
Entscheidung!<br />
4. <strong>E<strong>in</strong></strong>em ISP wurde <strong>der</strong> Nummernblock 82.17.23.0/17 zugeteilt. Nun soll dieser Bereich<br />
<strong>in</strong> vier gleiche Subnetze aufgeteilt werden. Wie lauten diese?<br />
5. <strong>E<strong>in</strong></strong> <strong>Netzwerk</strong> habe die Subnetzmaske 255.255.248.0. Wievele Masch<strong>in</strong>en können maximal<br />
<strong>in</strong> diesem Netz adressiert werden?<br />
6. Ist e<strong>in</strong>e Subnetzmaske <strong>der</strong> Form a) 255.255.255.128 o<strong>der</strong> b) 255.255.213.0 zulässig?<br />
Man begründe die Entscheidung!<br />
7. Was versteht man unter IP-Spoof<strong>in</strong>g? Läßt es sich verh<strong>in</strong><strong>der</strong>n; warum o<strong>der</strong> warum<br />
nicht?<br />
8. Man bastele e<strong>in</strong>e (hypothetische) Netzmaske, die Rechner mit geraden IP-Adressen<br />
<strong>in</strong> e<strong>in</strong> und mit ungeraden Adressen <strong>in</strong> e<strong>in</strong> an<strong>der</strong>es Subnetz legt!<br />
5.14.4 Fragmentierung<br />
1. Warum bietet IP die Möglichkeit Pakete zu fragmentieren?<br />
2. Was versteht man unter Path MTU Discovery (PTMUD)? Die MTU (Maximum<br />
Transfer Unit) gibt die maximale Paketgröße auf dem Data L<strong>in</strong>k/physikalischen Layer<br />
an.<br />
3. Wodurch kann PMTUD von Routern (ungewollt) verh<strong>in</strong><strong>der</strong>t werden?
80 KAPITEL 5. TCP-IP<br />
4. Warum arbeitet man bei <strong>der</strong> Fragmentierung mit Offsets und schreibt nicht e<strong>in</strong>fach<br />
die Größe des Fragments <strong>in</strong> das Feld?<br />
5. Man betrachte die Verschickung e<strong>in</strong>es 4000 Byte Datagramms über e<strong>in</strong> <strong>Netzwerk</strong> mit<br />
e<strong>in</strong>er MTU von 900 Byte. Dabei sei das Orig<strong>in</strong>al mit <strong>der</strong> Identifikationssnummer 345<br />
bezeichnet worden. Wieviele Fragmente werden generiert? Für jedes Fragment gebe<br />
man die Identifikation, die Payload ohne IP-Hea<strong>der</strong>, Offset und den Inhalt des ”More<br />
Fragments” Flags an!<br />
5.14.5 IP-Rout<strong>in</strong>g<br />
1. <strong>E<strong>in</strong></strong> Router hat die folgenden <strong>E<strong>in</strong></strong>träge <strong>in</strong> se<strong>in</strong>er (statischen) Rout<strong>in</strong>g-Tabelle:<br />
Address/Netmask Next Hop<br />
135.46.56.0/22 Interface 0 (direkt)<br />
135.46.60.0/22 Interface 1 (direkt)<br />
192.53.40.2/23 Router 1<br />
87.23.16.0/20 Router 2<br />
0.0.0.0/0 Router 3<br />
Wo schickt <strong>der</strong> Router Pakete mit folgenden Zieladressen lang: 135.46.63.10,<br />
192.53.45.12, 87.23.33.189, 135.46.52.2, 87.23.19.55, 192.53.40.7?<br />
5.14.6 ARP<br />
1. Warum wird e<strong>in</strong>e ARP-Anfrage <strong>in</strong> e<strong>in</strong>em Broadcast-Frame (Ethernet, TokenR<strong>in</strong>g, ...)<br />
geschickt? Wie sieht so e<strong>in</strong> spezielles Frame aus?<br />
2. Warum kommt die ARP-Antwort <strong>in</strong> e<strong>in</strong>em Frame mit e<strong>in</strong>er spezifischen Zieladresse<br />
zurück?<br />
3. Braucht man ARP bei <strong>der</strong> Modem/ISDN-<strong>E<strong>in</strong></strong>wahl?
Kapitel 6<br />
L<strong>in</strong>ux im <strong>Netzwerk</strong><br />
L<strong>in</strong>ux hat sich im Laufe <strong>der</strong> Zeit zu e<strong>in</strong>em <strong>der</strong> führenden Betriebssysteme entwickelt, welches<br />
auch und gerade wegen se<strong>in</strong>er vielfältigen Eigenschaften auch auf Routern 1 e<strong>in</strong>gesetzt wird.<br />
Router s<strong>in</strong>d die zentralen Vermittlungs- und Weiterleitungsstellen im verb<strong>in</strong>dungslosen,<br />
paketorientierten Internet.<br />
L<strong>in</strong>ux kann neben TCP/IP auch <strong>in</strong> AppleTalk, IPX/SPX, Decnet und weiteren <strong>Netzwerk</strong>en<br />
betrieben werden. Die folgenden Ausführungen werden sich jedoch nur am Rande<br />
mit an<strong>der</strong>en Netzen als dem Internet-Protokoll (IP) ause<strong>in</strong>an<strong>der</strong>setzen. Die folgenden<br />
Ausführungen zum OSI-Modell und TCP/IP haben natürlich nicht nur mit L<strong>in</strong>ux zu tun,<br />
son<strong>der</strong>n betreffen alle Rechner, die über <strong>Netzwerk</strong>e mite<strong>in</strong>an<strong>der</strong> (mittels TCP/IP) kommunizieren<br />
können.<br />
IP-<strong>Netzwerk</strong>e s<strong>in</strong>d <strong>in</strong>zwischen die dom<strong>in</strong>ierende Form <strong>der</strong> Rechnervernetzung. Der Komplexitätsgrad<br />
und die Anfor<strong>der</strong>ungen an diese Netze haben stark zugenommen. Während<br />
lange Zeit die e<strong>in</strong>fache <strong>E<strong>in</strong></strong>b<strong>in</strong>dung e<strong>in</strong>er L<strong>in</strong>ux-Masch<strong>in</strong>e <strong>in</strong> bestehende <strong>Netzwerk</strong>e durch<br />
Ethernet o<strong>der</strong> Modem/ISDN im Vor<strong>der</strong>grund stand, geht mit den aktuellen Kernels bedeutend<br />
mehr.<br />
6.1 IP-Konfiguration unter L<strong>in</strong>ux<br />
Die <strong>E<strong>in</strong></strong>b<strong>in</strong>dung von L<strong>in</strong>ux <strong>in</strong> e<strong>in</strong> IP-<strong>Netzwerk</strong> geschieht durch die Zuweisung e<strong>in</strong>er e<strong>in</strong>deutigen<br />
Adresse. Diese ist entwe<strong>der</strong> weltweit erreichbar o<strong>der</strong> zum<strong>in</strong>dest im lokalen <strong>Netzwerk</strong><br />
nur e<strong>in</strong>mal vorhanden.<br />
6.1.1 Die traditionellen Tools<br />
Die Konfiguration <strong>der</strong> <strong>Netzwerk</strong>schnittstellen unter L<strong>in</strong>ux erfolgt mit dem Kommando ifconfig.<br />
Aufgerufen ohne Optionen liefert es die konfigurierten Schnittstellen:<br />
shuttle:~/ > /sb<strong>in</strong>/ifconfig<br />
eth0 L<strong>in</strong>k encap:Ethernet HWaddr 00:60:08:38:C7:29<br />
<strong>in</strong>et addr:10.10.156.2 Bcast:10.10.159.255 Mask:255.255.252.0<br />
<strong>in</strong>et6 addr: fe80::240:c7ff:fe99:35ad/10 Scope:L<strong>in</strong>k<br />
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />
RX packets:3841 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:2437 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:100<br />
RX bytes:448759 (438.2 Kb) TX bytes:804 (804.0 Kb)<br />
Interrupt:9 Base address:0xe400<br />
1 beispielsweise im Consumer-Bereich auf DSL- o<strong>der</strong> WLAN-Routern<br />
81
82 KAPITEL 6. LINUX IM NETZWERK<br />
lo L<strong>in</strong>k encap:Local Loopback<br />
<strong>in</strong>et addr:127.0.0.1 Mask:255.0.0.0<br />
<strong>in</strong>et6 addr: ::1/128 Scope:Host<br />
UP LOOPBACK RUNNING MTU:3840 Metric:1<br />
RX packets:26 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:0<br />
RX bytes:118360005 (12.8 Mb) TX bytes:118360005 (12.8 Mb)<br />
In <strong>der</strong> Ausgabe sieht man je nach Interface die Angaben zur def<strong>in</strong>ierten IP, die Hardwareadresse,<br />
wenn es sich um e<strong>in</strong> Ethernet<strong>in</strong>terface handelt, sonst den Po<strong>in</strong>t-to-Po<strong>in</strong>tpartner<br />
(z.B. bei Modem und ISDN). Weiterh<strong>in</strong> wird angezeigt, welche Protokolle auf dem Interface<br />
registriert s<strong>in</strong>d (z.B. Appletalk und IPv6 s<strong>in</strong>d neben dem klassischen IPv4 denkbar), wieviel<br />
Byte die maximale Paketgrösse transportiert und die ”Kosten” (Metrik) des Interfaces. In<br />
den folgenden Zeilen gibt es Angaben zu den empfangenen und gesendeten Paketen, sowie<br />
den evtl. aufgetretenen Fehlern. Handelt es sich um e<strong>in</strong> Ethernetanschluss wird <strong>in</strong> e<strong>in</strong>er<br />
weiteren Zeile die Zahl <strong>der</strong> Kollisionen vermerkt und die Länge <strong>der</strong> Queue für ausgehende<br />
Pakete.<br />
Mit dem Befehl: ifconfig eth0 10.10.156.2 netmask 255.255.255.0 broadcast<br />
10.10.56.255 wird z.B. die erste <strong>Netzwerk</strong>karte mit <strong>der</strong> IP-Nummer 10.10.156.2 versehen.<br />
Ist e<strong>in</strong>e weitere <strong>Netzwerk</strong>karte im Rechner enthalten und soll diese auch e<strong>in</strong>gerichtet<br />
werden, dann spricht man sie mit ifconfig eth1 ... an. Möchte man auf e<strong>in</strong>er <strong>Netzwerk</strong>karte<br />
mehrere Netze bzw. IP-Nummern konfigurieren, kann dafür e<strong>in</strong> IP-Alias def<strong>in</strong>iert<br />
werden, wenn <strong>in</strong> <strong>der</strong> Kernelkonfiguration ”IP-Alias<strong>in</strong>g” aktiviert wurde: ifconfig eth0:0<br />
... erlaubt es nun e<strong>in</strong>e weitere IP auf <strong>der</strong> ersten <strong>Netzwerk</strong>karte e<strong>in</strong>zutragen. Dieses Interface<br />
wird vom Kernel getrennt von ”eth0” verwaltet, d.h. wenn ich Pakete zwischen<br />
den beiden Interfaces routen möchte, muss ich dieses im Kernel e<strong>in</strong>schalten (echo "1"<br />
>/proc/sys/net/ipv4/conf/ ip forward). <strong>E<strong>in</strong></strong> Alias auf e<strong>in</strong>er <strong>Netzwerk</strong>karte kann man<br />
jedoch nur konfigurieren, wenn diese <strong>Netzwerk</strong>karte bereits e<strong>in</strong>gerichtet wurde.<br />
6.1.2 Rout<strong>in</strong>g<br />
Im Internet geht es an je<strong>der</strong> Stelle um die Weiterleitung von Paketen von e<strong>in</strong>er Quellzur<br />
Zieladresse. Jedem Netzknoten, die Internet-Router, müssen für jedes IP-Paket neu<br />
entscheiden, wo sie es langschicken. Rout<strong>in</strong>gentscheidungen müssen jedoch schon auf dem<br />
Quellrechner e<strong>in</strong>es Paketes getroffen werden. Dieses gilt für jede L<strong>in</strong>ux-Masch<strong>in</strong>e mit <strong>in</strong>stalliertem<br />
TCP/IP-Stack. Ist das Paket<br />
• für das Loopback-Interface bestimmt<br />
• soll es im lokalen Ethernet zugestellt werden<br />
• soll es über e<strong>in</strong> Interface laufen, an dem e<strong>in</strong> Modem hängt<br />
• soll es an das Default-Gateway im Netz weitergeleitet werden.<br />
Der L<strong>in</strong>ux-Kernel muss also für alle ausgehenden Pakete entscheiden, <strong>in</strong> welches <strong>Netzwerk</strong><br />
er die Pakete schicken soll. Hierzu verwaltet <strong>der</strong> Kernel e<strong>in</strong>e eigene Rout<strong>in</strong>g Tabelle. Diese<br />
enthält Informationen über Routen zu an<strong>der</strong>en <strong>Netzwerk</strong>knoten speichert. Je<strong>der</strong> <strong>E<strong>in</strong></strong>trag<br />
e<strong>in</strong>er Route besitzt dabei e<strong>in</strong>en e<strong>in</strong>deutigen Schlüssel bestehend aus <strong>der</strong> <strong>Netzwerk</strong>adresse<br />
und <strong>der</strong> Netzmaske des verbundenen <strong>Netzwerk</strong>s. Der nächste Hop für e<strong>in</strong> Paket welches<br />
nicht lokal zugestellt wird, ist das Default-Gateway. Dieses Gateway muss <strong>in</strong> e<strong>in</strong>em <strong>der</strong><br />
angeschlossenen Subnetze liegen, da es sonst nicht erreicht werden kann. Üblicherweise läßt<br />
sich <strong>der</strong> Adm<strong>in</strong> diese Tabelle durch route -n o<strong>der</strong> netstat -rn:
6.1. IP-KONFIGURATION UNTER LINUX 83<br />
l<strong>in</strong>ux:~ # route -n<br />
Kernel IP Routentabelle<br />
Ziel Router Genmask Flags Metric Ref Use Iface<br />
10.8.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0<br />
192.168.15.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1<br />
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1<br />
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo<br />
0.0.0.0 192.168.15.1 0.0.0.0 UG 0 0 0 eth1<br />
ausgeben.<br />
In den SuSE-L<strong>in</strong>ux-Distributionen werden die IP-<strong>E<strong>in</strong></strong>träge unterhalb des Konfigurationsverzeichnisses<br />
/etc/sysconfig/network gespeichert und über das Runlevel-Skript /etc/<strong>in</strong>it.d/<br />
network start 2 mittels ip aktiviert. Bezieht <strong>der</strong> Rechner se<strong>in</strong>e IP dynamisch per DHCP, so<br />
wird statt ip e<strong>in</strong> DHCP-Client-Tool, wie dhclient, pump o<strong>der</strong> dhcpcd ausgeführt. Diese<br />
Dienste beziehen die IP-Konfiguration über das lokale Ethernet und tragen die Ergebnisse<br />
direkt o<strong>der</strong> per Skript dhclient-script <strong>in</strong> die <strong>Netzwerk</strong>konfiguration e<strong>in</strong>.<br />
6.1.3 Next Generation IP-Config<br />
Die meisten Adm<strong>in</strong>istratoren kennen und arbeiten immer noch ausschliesslich mit den traditionellen<br />
Werkzeugen ifconfig und route. Das IProute2-Paket erlaubt jedoch e<strong>in</strong>e weit<br />
höhere Flexibilität. IProute2 ist seit Kernel-Version 2.2 standardmässig für das Rout<strong>in</strong>g<br />
von IP-Paketen zuständig. Es beherrscht e<strong>in</strong>e ganze Reihe neuer Fähigkeiten:<br />
• des Weiterleitens<br />
• des Filterns<br />
• <strong>der</strong> Klassifikation<br />
von IP-Paketen. Hierzu zählen beispielsweise das <strong>E<strong>in</strong></strong>richten von Backup-Gateways und das<br />
Verwenden von mehreren Default-Gateways. Wo früher nur die Zieladresse e<strong>in</strong>es Paketes<br />
bei <strong>der</strong> Rout<strong>in</strong>g-Entscheidung e<strong>in</strong>e Rolle spielte, können nun auch die Absendeadressen<br />
hierfür <strong>in</strong> Betracht gezogen werden. Ebenfalls lassen sich verschiedene Wege und Prioritäten<br />
anhand von e<strong>in</strong>gesetzten höher liegenden Protokollen (TCP und UDP) und <strong>der</strong>en Ports<br />
festlegen. Auf diese Weise erhält <strong>der</strong> ”best-effort” Service IP e<strong>in</strong>e Quality of Service (QoS)<br />
Komponenten verpasst. Diese ist deutlich mächtiger als die meist sporadische Verwendung<br />
<strong>der</strong> Type of Service (ToS) Flags des IP-Hea<strong>der</strong>s.<br />
IProute2 führt neue Kommandos e<strong>in</strong>: ip und tc s<strong>in</strong>d die beiden wichtigsten. Das erste<br />
Kommando dient zur Bearbeitung <strong>der</strong> Kernel-Rout<strong>in</strong>g-Tabelle. Das zweite zur Manipulation<br />
verschiedener Verkehrsklassen. Letzteres ist Thema an an<strong>der</strong>er Stelle im Skript. Die<br />
Tool-Suite enthält weitere Kommandos, wie nstat, ifstat, routel, rtstat. Sie generieren<br />
Statistiken und Überblicke.<br />
6.1.4 Das Kommando ip<br />
IProute2 stammt von Alexey Kuznetsov entwickelt. Das Projekt besteht seit 1999 und wird<br />
seit Kernel 2.2 für das lokale Rout<strong>in</strong>g von IP-Paketen benutzt. Folgende Aktionen kann e<strong>in</strong><br />
Sysadm<strong>in</strong> mit IProute2 vornehmen:<br />
• Management von IP-Adressen (IPv4, IPv6)<br />
2 Die Runlevel-Skripten s<strong>in</strong>d auch direkt mit rcnetwork aufrufbar, da dieses L<strong>in</strong>ks aus dem Verzeichnis<br />
/usr/sb<strong>in</strong> auf die entsprechenden Runlevelskripten s<strong>in</strong>d.
84 KAPITEL 6. LINUX IM NETZWERK<br />
• ARP Tabellen Management<br />
• Rout<strong>in</strong>g Tabellen Management<br />
• Rout<strong>in</strong>g Policy Database Management<br />
• IP Tunnel Konfiguration<br />
• Paket und Routen Monitor<br />
• Traffic Shap<strong>in</strong>g (QoS)<br />
ip ist e<strong>in</strong> zusammengesetztes Kommando. Se<strong>in</strong>e Funktion wird durch das zu bearbeitende<br />
Objekt bestimmt. Allgeme<strong>in</strong> setzt sich <strong>der</strong> Aufruf von ip wie folgt zusammen: ip<br />
[OPTIONS] OBJECT [COMMAND[ARGUMENTS]|help]<br />
Die OPTIONS bee<strong>in</strong>flussen wie bei gewohnten Kommandos auch das generelle Verhalten<br />
und die Ausgabe die ip Befehls. Optionen folgen direkt nach dem Kommando und s<strong>in</strong>d mit<br />
dem ”-” Zeichen e<strong>in</strong>geleitet. Sie können nicht h<strong>in</strong>ter dem Objekt stehen.<br />
• -V[ersion] - gibt die aktuelle ip-Version aus.<br />
• -s[tatistics] zeigt passend zum Objekt ausführlichere Informationen an.<br />
• -f[amily] <strong>in</strong>et, <strong>in</strong>et6, l<strong>in</strong>k legt die die Protokollfamilie fest.<br />
• -o[nel<strong>in</strong>e] sorgt für die Ausgabe aller Informationen <strong>in</strong> e<strong>in</strong>er Zeile. So läßt sich die<br />
Ausgabe <strong>in</strong> Skripten oft besser bearbeiten.<br />
• -r[esolve] schaltet die Namensauflösung von IP-Adressen und Netzen e<strong>in</strong>.<br />
OBJECT bezeichnet den Objekttyp. Zu diesem lassen sich Informationen ausgeben.<br />
O<strong>der</strong> es wird e<strong>in</strong>e Operation auf ihn angewendet. Das Objekt<br />
• l<strong>in</strong>k bezeichnet e<strong>in</strong> physikalisches o<strong>der</strong> logisches Interface bzw. <strong>Netzwerk</strong>adapter.<br />
• address ist die IPv4 o<strong>der</strong> IPv6 Adresse e<strong>in</strong>es Adapters.<br />
• neighbour greift auf den Kernel ARP Cache zu.<br />
• route gibt Rout<strong>in</strong>g Tabellen aus und erlaubt <strong>der</strong>en Bearbeitung<br />
• rule bezeichnet e<strong>in</strong>e Regel <strong>in</strong> <strong>der</strong> Rout<strong>in</strong>g Policy Database.<br />
• maddress dient zur Bearbeitung von Multicast Adressen.<br />
• mroute ist für Multicast Rout<strong>in</strong>g Cache <strong>E<strong>in</strong></strong>träge<br />
• tunnel def<strong>in</strong>iert IP-<strong>in</strong>-IP Tunnel.<br />
COMMAND spezifiziert die Aktion, die mit dem OBJECT veranstaltet werden soll.<br />
Die Art und Menge <strong>der</strong> möglichen Aktionen hängt dabei vom Objekttyp ab. Üblicherweise<br />
lassen sich Objekte h<strong>in</strong>zuzufügen (add), entfernen (delete) o<strong>der</strong> anzeigen (show). <strong>E<strong>in</strong></strong>ige<br />
Objekte kennen weniger an<strong>der</strong>e weitere Aktionen.<br />
ARGUMENTS s<strong>in</strong>d Kommando-Optionen. Sie hängen von <strong>der</strong> Art des Kommandos<br />
und vom Objekttyp ab. Es existieren zwei Typen von Argumenten:<br />
• flags - können durch e<strong>in</strong>zelnes Schlüsselwort abgekürzt werden.<br />
• parameters - bestehen aus e<strong>in</strong>em Schlüsselwort gefolgt von e<strong>in</strong>em Wert.<br />
help liefert immer e<strong>in</strong>e Kurzhilfe für das Kommando generell o<strong>der</strong> die Anwendung des<br />
Kommandos auf e<strong>in</strong>zelne Objekte, z.B. ip help o<strong>der</strong> ip route help.
6.1. IP-KONFIGURATION UNTER LINUX 85<br />
6.1.5 Erste Schritte mit ip<br />
Die folgenden Beispiele sollen demonstrieren, wie ip die Standardaufgaben von route, arp<br />
und ifconfig übernimmt, die e<strong>in</strong> Sysadm<strong>in</strong> üblicherweise damit ausführt. Dazu sollte man<br />
sagen, dass bereits seit e<strong>in</strong>iger Zeit die beiden traditionellen Kommandos ifconfig und<br />
route im H<strong>in</strong>terground ip verwenden. Das Anzeigen aller Interfaces mit darauf def<strong>in</strong>ierten<br />
IP-Adressen erfolgt durch:<br />
l<strong>in</strong>ux02:~ # ip addr show<br />
1: lo: mtu 16436 qdisc noqueue<br />
l<strong>in</strong>k/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
<strong>in</strong>et 127.0.0.1/8 brd 127.255.255.255 scope host lo<br />
<strong>in</strong>et6 ::1/128 scope host<br />
valid_lft forever preferred_lft forever<br />
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000<br />
l<strong>in</strong>k/ether 00:e0:29:0b:f9:38 brd ff:ff:ff:ff:ff:ff<br />
<strong>in</strong>et 10.8.4.254/24 brd 10.8.4.255 scope global eth0<br />
<strong>in</strong>et 10.2.13.248/32 scope global eth0<br />
<strong>in</strong>et6 fe80::2e0:29ff:fe0b:f938/64 scope l<strong>in</strong>k<br />
valid_lft forever preferred_lft forever<br />
3: eth1: mtu 1500 qdisc noop qlen 1000<br />
l<strong>in</strong>k/ether 00:0c:6e:15:03:0e brd ff:ff:ff:ff:ff:ff<br />
4: sit0: mtu 1480 qdisc noqueue<br />
l<strong>in</strong>k/sit 0.0.0.0 brd 0.0.0.0<br />
11: tun0: mtu 1412 qdisc pfifo_fast qlen 10<br />
l<strong>in</strong>k/[65534]<br />
<strong>in</strong>et 132.230.129.2/32 scope global tun0<br />
Die Informationen zur Rout<strong>in</strong>g Tabelle liefert das Kommando ip wie folgt:<br />
l<strong>in</strong>ux02:~ # ip route show<br />
10.1.1.11 via 10.8.4.1 dev eth0 src 10.2.13.248 mtu 1500 advmss 1460 \<br />
fragtimeout 64<br />
10.8.4.0/24 dev eth0 proto kernel scope l<strong>in</strong>k src 10.8.4.254<br />
169.254.0.0/16 dev eth0 scope l<strong>in</strong>k<br />
10.0.0.0/14 via 10.8.4.1 dev eth0 src 10.2.13.248<br />
127.0.0.0/8 dev lo scope l<strong>in</strong>k<br />
default dev tun0 scope l<strong>in</strong>k<br />
Das Bild sieht etwas an<strong>der</strong>s als von route gewohnt aus. Adm<strong>in</strong>istratoren mit langer IP-<br />
Erfahrung werden sich schnell zurecht f<strong>in</strong>den und die Vorteile von ip schätzen lernen.<br />
Das Setzen e<strong>in</strong>er IP-Adresse auf e<strong>in</strong> Interface o<strong>der</strong> das H<strong>in</strong>zufügen e<strong>in</strong>er weiteren, durchaus<br />
auf dasselbe, geschieht mit:<br />
l<strong>in</strong>ux02:~ # ip addr add 10.8.1.10/24 broadcast 10.8.1.255 dev eth0<br />
l<strong>in</strong>ux02:~ # ip addr add 10.8.2.10/24 broadcast 10.8.2.255 dev eth0<br />
l<strong>in</strong>ux02:~ # ip addr show eth0<br />
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000<br />
l<strong>in</strong>k/ether 00:0c:29:5a:b3:d6 brd ff:ff:ff:ff:ff:ff<br />
<strong>in</strong>et 10.8.1.10/24 brd 10.8.1.255 scope global eth0<br />
<strong>in</strong>et 10.8.2.10/24 brd 10.8.2.255 scope global eth0
86 KAPITEL 6. LINUX IM NETZWERK<br />
Die Angabe <strong>der</strong> <strong>Netzwerk</strong>maske ist e<strong>in</strong>igen vielleicht etwas ungewohnt. Statt <strong>in</strong> <strong>der</strong> klassischen<br />
Form e<strong>in</strong>er IP-Adresse (hier wäre es die 255.255.255.0) erfolgt die Beschreibung<br />
durch die Zahl <strong>der</strong> <strong>E<strong>in</strong></strong>sen im Präfix (hier 24). Die (Hardware-)Daten zu e<strong>in</strong>em e<strong>in</strong>zelnen<br />
Interface zeigt:<br />
l<strong>in</strong>ux02:~ # ip l<strong>in</strong>k show eth0<br />
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000<br />
l<strong>in</strong>k/ether 00:0c:29:5a:b3:d6 brd ff:ff:ff:ff:ff:ff<br />
l<strong>in</strong>ux02:~ # ip l<strong>in</strong>k set eth0 down<br />
l<strong>in</strong>ux02:~ # ip l<strong>in</strong>k set eth0 address 00:20:AA:20:AA:20<br />
l<strong>in</strong>ux02:~ # ip l<strong>in</strong>k set eth0 mtu 1400<br />
l<strong>in</strong>ux02:~ # ip l<strong>in</strong>k set eth0 name dsl0<br />
l<strong>in</strong>ux03:~ # ip l<strong>in</strong>k show dsl0<br />
2: dsl0: mtu 1400 qdisc pfifo_fast qlen 1000<br />
l<strong>in</strong>k/ether 00:20:aa:20:aa:20 brd ff:ff:ff:ff:ff:ff<br />
Abschalten läßt es sich mit dem darauf folgenden Befehl. Wenn <strong>der</strong> Adm<strong>in</strong> die MAC-Adresse<br />
des Interfaces än<strong>der</strong>n will, kann er dazu ebenfalls das Subkommando ”set” verwenden. Nur<br />
diesmal ist es nicht e<strong>in</strong> e<strong>in</strong>faches Flag (down) son<strong>der</strong>n e<strong>in</strong> Parameter gefolgt durch e<strong>in</strong>en<br />
Wert (die neue Hardwareadresse). Eben dieses gilt für die Reduktion <strong>der</strong> MTU um 100 Byte<br />
o<strong>der</strong> für das Setzen e<strong>in</strong>es an<strong>der</strong>en Interface-Namens. Das macht dann S<strong>in</strong>n, wenn <strong>der</strong> Adm<strong>in</strong><br />
Interfaces beispielsweise nach ihrer Funktion kennzeichnen möchte. Anschliessend erfolgt die<br />
Anzeige <strong>der</strong> Konfiguration mit dem neuen Interface-Namen (hier dsl0). Das Interface ist<br />
abgeschaltet - zu sehen daran, dass <strong>in</strong> <strong>der</strong> Anzeige bei den Flags ”UP” fehlt. In jedem<br />
<strong>der</strong> gezeigten Aufrufe wurde das Interface direkt h<strong>in</strong>ter dem Kommando (set o<strong>der</strong> show)<br />
angegeben.<br />
Mit <strong>der</strong> gesetzten Option ”-s” gibts etwas mehr zu sehen:<br />
l<strong>in</strong>ux02:~ # ip -s l<strong>in</strong>k show eth0<br />
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000<br />
l<strong>in</strong>k/ether 00:e0:29:0b:f9:38 brd ff:ff:ff:ff:ff:ff<br />
RX: bytes packets errors dropped overrun mcast<br />
162342126 915844 0 0 0 0<br />
TX: bytes packets errors dropped carrier collsns<br />
1020902001 1147698 0 0 0 0<br />
Die Statistiken zum Interface kennt man schon von ifconfig. ip zeigt sie <strong>in</strong> e<strong>in</strong>er Tabelle,<br />
was die skriptbasierte Auswertung erleichtert. Mehr Informationen gibt es bei Wie<strong>der</strong>holung<br />
<strong>der</strong> Option (”-s -s”). Dann schlüsselt ip noch die Art <strong>der</strong> aufgetretenen Fehler auf.<br />
Der ARP-Cache kann mit:<br />
l<strong>in</strong>ux02:~ # ip neighbor show<br />
10.8.4.220 dev eth0 lladdr 00:10:a4:8d:56:0a nud delay<br />
10.8.4.1 dev eth0 lladdr 00:0f:66:c7:73:e8 nud stale<br />
10.8.4.204 dev eth0 lladdr 00:08:74:4d:6f:3f nud stale<br />
ausgelesen werden.<br />
6.2 Weitergehende Anwendungen von IProute2<br />
In den ersten Abschnitten wurden e<strong>in</strong>ige IP- und Rout<strong>in</strong>gkonfigurationen gezeigt. Mit den<br />
IProute2-Kommandos ist jedoch noch e<strong>in</strong>iges mehr dr<strong>in</strong>.
6.2. WEITERGEHENDE ANWENDUNGEN VON IPROUTE2 87<br />
6.2.1 Weitere Tools<br />
Das IProute2-Paket enthält e<strong>in</strong>ige weitere nützliche Programme. So liefert das Kommando<br />
nstat Statistiken des Kernels zum IP-Verkehr.<br />
l<strong>in</strong>ux02:~ # nstat<br />
#kernel<br />
IpInReceives 1011352 0.0<br />
IpForwDatagrams 48960 0.0<br />
IpInUnknownProtos 3 0.0<br />
IpInDelivers 953958 0.0<br />
IpOutRequests 1255516 0.0<br />
IpReasmReqds 16824 0.0<br />
IpReasmOKs 8412 0.0<br />
IpFragOKs 2 0.0<br />
IcmpInErrors 5437 0.0<br />
IcmpInDestUnreachs 5 0.0<br />
IcmpInTimeExcds 222 0.0<br />
IcmpInParmProbs 4736 0.0<br />
IcmpInEchoReps 476 0.0<br />
IcmpInTimestamps 3 0.0<br />
IcmpOutErrors 26789 0.0<br />
IcmpOutTimeExcds 26313 0.0<br />
IcmpOutTimestamps 476 0.0<br />
TcpActiveOpens 1258 0.0<br />
TcpPassiveOpens 323 0.0<br />
[ ... ]<br />
Diese Informationen kennen e<strong>in</strong>ige vielleicht schon von <strong>der</strong> SNMP-Standard-MIB. Letztendlich<br />
macht beispielsweise NetSNMP unter L<strong>in</strong>ux nichts an<strong>der</strong>es, als diese Kernel-Informationen<br />
auszulesen. So erhält <strong>der</strong> Adm<strong>in</strong> Informationen zu empfangenen und gesendetet<br />
IP-Paketen (IpInReceives, IpOutRequests), wieviele davon geroutet wurden (IpForwDatagrams),<br />
unroutebare Pakete (IpOutNoRoutes). Ebenfalls gibt es Statistiken zum Internet<br />
Control Message Protocol (ICMP). ICMP liefert IP-Fehlermeldungen, wenn <strong>Netzwerk</strong>e,<br />
Masch<strong>in</strong>en, höherschichtige Protokolle o<strong>der</strong> Ports nicht erreichbar s<strong>in</strong>d (IcmpInDestUnreachs).<br />
P<strong>in</strong>g benutzt mit Echo und Reply diesen Dienst für Tests auf Erreichbarkeit von<br />
IP-Adressen (IcmpInEchoReps). Weiterh<strong>in</strong> gibt es Statistiken zu IPv6, UDP und TCP.<br />
routel ist e<strong>in</strong> Shell-Skript und gibt e<strong>in</strong>e ausführliche Kernel-Rout<strong>in</strong>g-Table aus. ifstat<br />
fasst die Statistiken zu Datenraten <strong>der</strong> e<strong>in</strong>zelnen <strong>Netzwerk</strong><strong>in</strong>terfaces zu e<strong>in</strong>er Tabelle zusammen:<br />
l<strong>in</strong>ux02:~ # ifstat<br />
ifstat: history is aged out, resett<strong>in</strong>g<br />
#kernel<br />
Interface RX Pkts/Rate TX Pkts/Rate RX Data/Rate TX Data/Rate<br />
RX Errs/Drop TX Errs/Drop RX Over/Rate TX Coll/Rate<br />
lo 3905 0 3905 0 393392 0 393392 0<br />
0 0 0 0 0 0 0 0<br />
eth0 915949 0 1120K 0 158546K 0 996987K 0<br />
0 0 0 0 0 0 0 0<br />
tun0 9071 0 13359 0 3535K 0 1090K 0<br />
0 0 0 0 0 0 0 0<br />
Der Befehl ss zeigt die aktuell bestehenden TCP-Verb<strong>in</strong>dungen an:<br />
l<strong>in</strong>ux02:~ # ss<br />
State Recv-Q Send-Q Local Address:Port Peer Address:Port
88 KAPITEL 6. LINUX IM NETZWERK<br />
ESTAB 0 0 132.230.129.7:56946 132.230.1.142:ssh<br />
ESTAB 0 0 10.8.4.254:57051 10.8.4.205:microsoft-ds<br />
ESTAB 0 0 132.230.129.7:56687 134.76.63.80:ssh<br />
Zu weiteren Kommandos und ausführlicheren Beschreibungen sei auf die mitgelieferte Dokumentation<br />
o<strong>der</strong> weiterführende Literatur verwiesen.<br />
6.2.2 Rout<strong>in</strong>g Policy Database<br />
Klassisches TCP/IP Rout<strong>in</strong>g wertet auf dem Weg e<strong>in</strong>es Paketes nur dessen Zieladresse aus.<br />
Erst am Ziel wird im Falle e<strong>in</strong>er Antwort die Quelladresse benutzt. Oftmals ist jedoch<br />
Rout<strong>in</strong>g auf <strong>der</strong> Basis von an<strong>der</strong>en IP-Hea<strong>der</strong> Daten wie beispielsweise <strong>der</strong> Quelladresse,<br />
des höherschichtigen Protokolls o<strong>der</strong> ToS erwünscht. Da sich e<strong>in</strong>zelne Dienste gut an ihren<br />
Portnummern untscheiden lassen, soll vielfach auch <strong>der</strong> nächste Hea<strong>der</strong> <strong>in</strong> Betracht gezogen<br />
werden. Der Port steht im TCP o<strong>der</strong> UDP-Kopf. Diese Art des Rout<strong>in</strong>gs bezeichnet man<br />
als Policy Rout<strong>in</strong>g. Viele Adm<strong>in</strong>s kennen dieses Konzept bereits von <strong>der</strong> <strong>E<strong>in</strong></strong>richtung e<strong>in</strong>er<br />
Firewall.<br />
In IProute2 wird das Policy Rout<strong>in</strong>g durch e<strong>in</strong>e Rout<strong>in</strong>g Policy Database (RPDB) und<br />
e<strong>in</strong>em Set von Regeln implementiert. Die RPDB besteht aus 255 Tabellen, mit denen IP-<br />
Pakete die bestimmten Mustern folgen, geroutet werden können. Die Muster lassen sich mit<br />
dem Befehl ip rule und die Rout<strong>in</strong>g Tabellen mit ip route manipulieren.<br />
Immer e<strong>in</strong>gerichtet s<strong>in</strong>d drei vorkonfigurierte Tabellen ”local”, ”ma<strong>in</strong>” und ”default”.<br />
Dazu gehören drei Regeln, die bestimmen wann diese Tabellen für das Rout<strong>in</strong>g aufgerufen<br />
werden sollen. Die Regeln werden <strong>in</strong> <strong>der</strong> Reihenfolge ihrer Priorität abgearbeitet. Die<br />
Priorität ist <strong>der</strong> Wert vor dem Doppelpunkt.<br />
l<strong>in</strong>ux02:~ # ip rule show<br />
0: from all lookup local<br />
32766: from all lookup ma<strong>in</strong><br />
32767: from all lookup default<br />
In <strong>der</strong> vorkonfigurierten <strong>E<strong>in</strong></strong>stellung wird für jedes ankommende Paket die Route zuerst <strong>in</strong><br />
<strong>der</strong> Tabelle local nachgeschlagen. Falls sie dort nicht steht, werden die Tabellen ma<strong>in</strong> und<br />
danach default befragt.<br />
Mit Hilfe <strong>der</strong> RPDB lassen sich nun Fragestellungen, wie das Rout<strong>in</strong>g <strong>in</strong> Abhängigkeit<br />
von <strong>der</strong> Absendeadresse o<strong>der</strong> das Rout<strong>in</strong>g mit mehreren Gateways e<strong>in</strong>fach realisieren. Das<br />
Rout<strong>in</strong>g nach Quelladresse demonstriert das erste Beispiel. Sei e<strong>in</strong> kle<strong>in</strong>es Firmennetz über<br />
zwei Provi<strong>der</strong> an das Internet angeschlossen. <strong>E<strong>in</strong></strong> Provi<strong>der</strong> bietete e<strong>in</strong>e schnelle Leitung, die<br />
jedoch relativ teuer sei. Der an<strong>der</strong>e Provi<strong>der</strong> sei billig, hat aber e<strong>in</strong>e deutliche Verzögerung.<br />
Es sollen daher nur Pakete vom Voice-over-IP-Gateway <strong>der</strong> Beispielfirma (IP-Adresse<br />
192.168.100.100) über den schnellen Provi<strong>der</strong> 192.168.1.254 geleitet werden. Alle an<strong>der</strong>en<br />
Pakete nehmen den verzögerten Weg über das Gateway 192.168.2.254:<br />
Alle Masch<strong>in</strong>en im privaten Subnetz 192.168.100.0 benutzen e<strong>in</strong> geme<strong>in</strong>sames L<strong>in</strong>ux<br />
Default-Gateway. Auf diesem Gateway soll anhand <strong>der</strong> Quelladresse entschieden werden,<br />
über welchen Router (das können beispielsweise kle<strong>in</strong>e <strong>in</strong>tegrierte DSL/ISDN-Router se<strong>in</strong>)<br />
e<strong>in</strong> Paket se<strong>in</strong>en weiteren Weg nimmt.<br />
Für dieses Regelset wird zuerst e<strong>in</strong>e neue Tabelle ”SourceRout<strong>in</strong>g” <strong>in</strong> <strong>der</strong> Datei /etc/<br />
iproute2/rt tables e<strong>in</strong>getragen. Hierfür muss e<strong>in</strong>e Regel erstellt werden, die für alle Pakete<br />
mit <strong>der</strong> Quelladresse 192.168.100.100 die Rout<strong>in</strong>g Tabelle ”SourceRout<strong>in</strong>g” befragt.<br />
l<strong>in</strong>ux02:~# echo 100 SourceRout<strong>in</strong>g >> /etc/iproute2/rt_tables<br />
l<strong>in</strong>ux02:~# ip rule add from 192.168.100.100 table SourceRout<strong>in</strong>g<br />
l<strong>in</strong>ux02:~# ip rule show
6.2. WEITERGEHENDE ANWENDUNGEN VON IPROUTE2 89<br />
Abbildung 6.1: Default-Gateway mit zwei Wegen zu verschiedenen Routern<br />
0: from all lookup local<br />
32765: from 192.168.100.100 lookup SrcRout<strong>in</strong>g<br />
32766: from all lookup ma<strong>in</strong><br />
32767: from all lookup default<br />
Zum Schluss wird noch das schnelle Gateway als Standard Route <strong>in</strong> die Tabelle Source-<br />
Rout<strong>in</strong>g e<strong>in</strong>getragen. Ab dann werden alle Pakete von <strong>der</strong> IP-Adresse 192.168.100.100 über<br />
den schnellen Weg geschickt.<br />
l<strong>in</strong>ux:~# ip route add default via 192.168.1.254 dev eth0 table SourceRout<strong>in</strong>g<br />
6.2.3 Generelle 2-Wege-Routen<br />
Das folgende Beispiel befaßt sich wie<strong>der</strong> mit dem Rout<strong>in</strong>g über zwei Gateways. Es können<br />
auch mehrere se<strong>in</strong>, das spielt hier aber ke<strong>in</strong>e Rolle. Die Fragestellung ist etwas modifiziert:<br />
• Wie kann man ausgehenden Verkehr gleichmässig auf beide Strecken verteilen (Load<br />
Balanc<strong>in</strong>g)?<br />
• Wie lassen sich Pakete, die über e<strong>in</strong>e Leitung kommen wie<strong>der</strong> über dieselbe verschickt<br />
werden (Split Access)?<br />
• Wie kann e<strong>in</strong>e Backup-Default-Route def<strong>in</strong>iert werden, die nur bei Ausfall <strong>der</strong> Default-<br />
Route benutzt wird?<br />
In e<strong>in</strong>em ersten Schritt legt man zwei neue Rout<strong>in</strong>g Tabellen Route1 und Route2 <strong>in</strong><br />
/etc/iproute2/rt tables an, identisch zum eben beschriebenen Verfahren. Route1 sei dabei<br />
die Tabelle für Provi<strong>der</strong> 1 und entsprechend Route2 die für Provi<strong>der</strong> 2.<br />
l<strong>in</strong>ux02:~# ip route add 132.230.129.0/28 dev eth0 src 132.230.129.1 table Route1<br />
l<strong>in</strong>ux02:~# ip route add default via 132.230.129.15 table Route1<br />
l<strong>in</strong>ux02:~# ip route add 80.168.20.0/25 dev eth1 src 80.168.20.125 table Route2<br />
l<strong>in</strong>ux02:~# ip route add default via 80.168.20.126 table Route2<br />
Die Rout<strong>in</strong>g Rules legen fest, welche Tabelle für welche IP herangezogen wird.
90 KAPITEL 6. LINUX IM NETZWERK<br />
Abbildung 6.2: Szenario mit zwei Routen über Provi<strong>der</strong> 1 und 2<br />
l<strong>in</strong>ux02:~# ip rule add from 132.230.129.1 table Route1<br />
l<strong>in</strong>ux02:~# ip rule add from 80.168.20.125 table Route2<br />
Im folgenden Schritt wird die Ma<strong>in</strong> Rout<strong>in</strong>g Tabelle für das lokale Rout<strong>in</strong>g <strong>in</strong> beide <strong>Netzwerk</strong>e<br />
konfiguriert.<br />
l<strong>in</strong>ux02:~# ip route add 132.230.129.0/28 dev eth1 src 132.230.129.1<br />
l<strong>in</strong>ux02:~# ip route add 80.168.20.0/25 dev eth2 src 80.168.20.125<br />
Zum Abschluss wird die Default-Route für die ”ma<strong>in</strong>” Rout<strong>in</strong>g Table gesetzt. Da <strong>der</strong><br />
Verkehr gleichmäßig auf beide Anschlüsse verteilt werden soll, muss die Route jetzt als<br />
Multipath-Route angelegt se<strong>in</strong>. Der ”weight” Parameter dient dazu die Verteilung über die<br />
e<strong>in</strong>zelnen Verb<strong>in</strong>dungen zu gewichten. Man kann bei Bedarf auch e<strong>in</strong>en Provi<strong>der</strong> stärker als<br />
den an<strong>der</strong>en belasten.<br />
l<strong>in</strong>ux02:~# ip route add default scope global nexthop via 132.230.129.14 dev eth1 \<br />
weight 1 nexthop via 80.168.20.126 dev eth2 weight 1<br />
Im letzten Beispiel wurden die beiden Default-Routen gleichmäßig o<strong>der</strong> gewichtet benutzt.<br />
Wenn e<strong>in</strong>e immer verwendet werden soll und die an<strong>der</strong>e nur beim Ausfall <strong>der</strong> ersten den<br />
Datenverkehr komplett übernimmt, kann man das über die Angabe e<strong>in</strong>er Metrik 3 regeln.<br />
Der Kernel benutzt Gateway immer die Route mit <strong>der</strong> kle<strong>in</strong>sten Metrik, solange er sie<br />
erreichen kann. Falls diese nicht mehr verfügbar ist, greift er automatisch auf die Route<br />
mit <strong>der</strong> nächstkle<strong>in</strong>eren Priorität zurück. Für das Beispiel soll Gateway 80.168.20.126 als<br />
Gateway für eventuelle Ausfälle von Gateway 132.230.129.14 dienen. Für diese Aufgabenstellung<br />
genügt es, die Route zum Router 1 mit e<strong>in</strong>er Metrik 1 zu def<strong>in</strong>ieren. Die Route<br />
zum Backup-Gateway erhält e<strong>in</strong>e höhere Metrik von beispielsweise 5. Die re<strong>in</strong>en Zahlenwerte<br />
s<strong>in</strong>d dabei nicht so <strong>in</strong>teressant. Alle vorherigen Rout<strong>in</strong>ge<strong>in</strong>stellungen s<strong>in</strong>d vorher zu<br />
löschen. Das Beispiel nutzt dazu das Kommando ”flush”. Mit <strong>der</strong> Option ”-4” legt man fest,<br />
dass flush nur auf IPv4-Adressen wirkt. Damit bleiben eventuell vorhandene IPv6-<strong>E<strong>in</strong></strong>träge<br />
unberührt.<br />
l<strong>in</strong>ux02:~# ip -4 addr flush label "eth0"<br />
l<strong>in</strong>ux02:~# ip route add default via 132.230.129.14 dev eth0 metric 1<br />
l<strong>in</strong>ux02:~# ip route add default via 80.168.20.126 dev eth0 metric 5<br />
3 ”Kosten” o<strong>der</strong> Präferenz e<strong>in</strong>er Route - je kle<strong>in</strong>er <strong>der</strong> Wert desto besser
6.3.<br />
ÜBERPRÜFUNG DER KONFIGURATION 91<br />
6.2.4 Dienste-basiertes Rout<strong>in</strong>g<br />
Wenn sich Dienste und <strong>der</strong>en Adm<strong>in</strong>istratoren an Standards halten, kann man sie anhand<br />
ihrer verwendeten Portnummern identifizieren. Die Datei /etc/services listet die Zuordnung<br />
von Portnummern zu Diensten auf. ip hat selbst ke<strong>in</strong>e Möglichkeit direkt <strong>in</strong> folgende Hea<strong>der</strong>,<br />
TCP o<strong>der</strong> UDP e<strong>in</strong>es Datenpaketes zu schauen. Das können entwe<strong>der</strong> tc o<strong>der</strong> besser das<br />
Netfilter Paket übernehmen. Letzteres ist oft sowieso schon als Firewall im <strong>E<strong>in</strong></strong>satz. So lassen<br />
sich IP-Pakete klassifizieren und ihre Hea<strong>der</strong> manipulieren. Man markiert Pakete, die an<br />
e<strong>in</strong>en bestimmten Port geschickt werden, mit e<strong>in</strong>er Nummer. Auf Basis dieser werden dann<br />
wie<strong>der</strong> Rout<strong>in</strong>g Tabellen erstellt.<br />
Das Beispiel sei wie das e<strong>in</strong>gangs beschriebene. Diesmal sollen nur SSH Pakete die<br />
schnelle Verb<strong>in</strong>dung passieren und alle an<strong>der</strong>en den kostengünstigeren Weg nehmen.<br />
Als erstes, werden alle ausgehenden SSH-Pakete mit dem Netfilter-Tool iptables durch<br />
e<strong>in</strong>e ”1” gekennzeichnet. Das Label kann e<strong>in</strong>e beliebige Zahl se<strong>in</strong>.<br />
l<strong>in</strong>ux02:~# iptables -A OUTPUT -i eth0 -t mangle -p tcp --dport 22 -j MARK \<br />
--set-Mark 1<br />
l<strong>in</strong>ux02:~# echo 200 ssh >> /etc/iproute2/rt_tables<br />
l<strong>in</strong>ux02:~# ip rule add fwmark 1 table ssh<br />
l<strong>in</strong>ux02:~# ip route add default via 192.168.1.254 dev eth0 table ssh<br />
Dann wird wie<strong>der</strong> e<strong>in</strong>e Regel <strong>in</strong> <strong>der</strong> RPDB erstellt, die besagt, dass für alle Pakete, die<br />
mit e<strong>in</strong>er 1 markiert s<strong>in</strong>d, die Tabelle ssh befragt wird. Zuletzt muss e<strong>in</strong>e Default Route<br />
zur schnellen Verb<strong>in</strong>dung <strong>in</strong> <strong>der</strong> Rout<strong>in</strong>g Tabelle ssh erzeugt werden. Ab dann gehen alle<br />
SSH-Pakete über den schnellen Router 1.<br />
6.3 Überprüfung <strong>der</strong> Konfiguration<br />
Den Erfolg e<strong>in</strong>er IP-Konfiguration kann man am besten im Netz mit dem Befehl p<strong>in</strong>g testen<br />
(das setzt e<strong>in</strong>en weiteren Rechner mit garantiert funktionieren<strong>der</strong> <strong>Netzwerk</strong>konfiguration<br />
voraus!). p<strong>in</strong>g IP-Adresse/Hostname sendet Datenpakte im Sekundenabstand an die<br />
angegebene IP-Adresse o<strong>der</strong> Rechnernamen 4 . P<strong>in</strong>g 5 kennt e<strong>in</strong>ige <strong>in</strong>teressante Kommandoparameter,<br />
die sich auch zum Testen <strong>der</strong> Leistungsfähigkeit e<strong>in</strong>es LAN’s eigenen. So lässt<br />
sich mit ”-c Zahl” die Anzahl <strong>der</strong> verschickten Pakete festlegen, ”-f” lässt den Systemadm<strong>in</strong>istrator<br />
so viele Pakete versenden, wie nur irgendwie geht und mit ”-s Zahl” lässt sich die<br />
Paketgrösse, die zum Test verschickt wird, variieren.<br />
Meldet p<strong>in</strong>g ke<strong>in</strong>en Erfolg 6 , kann man mit dem Kommando tcpdump überprüfen, ob<br />
überhaupt Datenpakete auf dem <strong>Netzwerk</strong><strong>in</strong>terface e<strong>in</strong>treffen und vom Kernel registriert<br />
werden.<br />
6.4 Aufgaben<br />
6.4.1 IP-Konfiguration und Erreichbarkeit<br />
1. Wie bekommt man folgende Informationen heraus: IP Adresse, Rout<strong>in</strong>g Tabelle, eigene<br />
MAC-Adresse(n)?<br />
2. Wie lautet die <strong>Netzwerk</strong>maske des eigenen Subnetzes und wie kann diese verän<strong>der</strong>t<br />
werden?<br />
4 Dieses setzt jedoch e<strong>in</strong>en funktionierenden Nameservice voraus!<br />
5 weitere Informationen kann man sich über den Aufruf <strong>der</strong> Manualseiten mit man p<strong>in</strong>g anzeigen lassen.<br />
6 das me<strong>in</strong>t e<strong>in</strong>e Meldung wie ”100” packet loss”
92 KAPITEL 6. LINUX IM NETZWERK<br />
3. Warum muss die eigene <strong>Netzwerk</strong>maske zu den <strong>E<strong>in</strong></strong>stellungen des Subnetzes passen,<br />
<strong>in</strong> dem man sich bef<strong>in</strong>det? Was passiert, wenn die Maske des Subnetzes kle<strong>in</strong>er o<strong>der</strong><br />
größer als die auf <strong>der</strong> eigenen Masch<strong>in</strong>e e<strong>in</strong>gestellte ist?<br />
4. Man organisiere sich die IP vom Nachbarn und versuche diesen per P<strong>in</strong>g zu erreichen.<br />
Wie erfährt man se<strong>in</strong>e eigene Default-Gateway-Adresse?<br />
5. Wie erfahre ich die MAC-Adressen me<strong>in</strong>er Kommunikationspartner? Wie lauten die<br />
MAC-Adressen für goe.net o<strong>der</strong> www.spiegel.de?<br />
6.4.2 Datenverkehr zählen<br />
1. Welche ganz e<strong>in</strong>fachen Möglichkeiten hat man, um festzustellen, wieviel Datenverkehr<br />
von e<strong>in</strong>er Masch<strong>in</strong>e <strong>in</strong>s Netz geschickt o<strong>der</strong> empfangen wurde?
Kapitel 7<br />
DHCP<br />
7.1 Automatische IP-Zuweisung<br />
Adm<strong>in</strong>istratoren s<strong>in</strong>d für ihren zugewiesenen IP-Bereich selbst zuständig RZ teilt z.B. das<br />
Uni Class-B-Netz von 132.230.0.0/ 255.255.0.0 mittels Subnett<strong>in</strong>g <strong>in</strong> 256 Class-C Netze<br />
auf. In diesen Netzen s<strong>in</strong>d bis zu 254 Rechner zu verwalten. Ziel ist die Rezentralisierung<br />
<strong>der</strong> netzwerkseitigen Konfiguration - <strong>der</strong> <strong>E<strong>in</strong></strong>satz des DHCP (Dynamic Host Control Protocol)<br />
als <strong>Netzwerk</strong>protokoll <strong>der</strong> Anwendungsschicht, mittels dessen grundlegende Daten zur<br />
Konfiguration e<strong>in</strong>es Clientsystems übertragen werden können.<br />
Dynamic Host Configuration Protocol kann zur automatischen und dynamischen IP-<br />
Zuweisung verwendet werden. Damit kann die Konfiguration auf e<strong>in</strong>em zentralen Rechner<br />
des Teilnetzes erfolgen (bzw. weitere lassen sich aus Redundanzgründen e<strong>in</strong>fügen). Die Rechner<br />
lassen sich fest konfigurieren, aber es kann auch e<strong>in</strong> Pool von Adressen für wechselnde<br />
Hosts verwaltet werden.<br />
Damit kann e<strong>in</strong>e weit höhere Anzahl von Masch<strong>in</strong>en als vorhandene IP-Nummern bedient<br />
werden. DHCP verwendet spezielle IP-Nummern 0.0.0.0 (Host ohne IP-Information)<br />
und 255.255.255.255. Lokaler Broadcast an alle Teilnetze s<strong>in</strong>d durch Router vone<strong>in</strong>an<strong>der</strong><br />
abgegrenzt, damit werden Broadcastpakete nur im eigenen Subnetz sichtbar. 0.0.0.0 wird<br />
nach IP-Bezug sofort wie<strong>der</strong> frei.<br />
7.2 Implementation<br />
DHCP 1 , das ”Dynamic Host Control Protocol” stellt e<strong>in</strong>e Erweiterung und Ergänzung des<br />
BOOTP dar. Die <strong>E<strong>in</strong></strong>schränkungen im BOOTP e<strong>in</strong>erseits und se<strong>in</strong>e anerkannten Vorteile<br />
zur Konfiguration großer Rechnerzahlen an<strong>der</strong>erseits mündeten <strong>in</strong> <strong>der</strong> Entwicklung von<br />
DHCP.<br />
Weiterentwicklungen, wie z.B. dynamisches DNS, f<strong>in</strong>den <strong>in</strong> erster L<strong>in</strong>ie beim dhcpd<br />
statt, die verwendeten bootpd Implementierungen stammen aus den Anfängen <strong>der</strong> 90er<br />
Jahre und werden nur noch im Fall grober Sicherheitsverletzungen gepatcht. Das Internet-<br />
Software-Consortium 2 entwickelte e<strong>in</strong>e Beispielimplementation des DHCP und e<strong>in</strong>iger an-<br />
<strong>der</strong>er Internetprotokolle. Der Sourcecode liegt <strong>in</strong> den meisten Fällen auch <strong>in</strong> e<strong>in</strong>er L<strong>in</strong>uxanpassung<br />
vor, so dass e<strong>in</strong>e e<strong>in</strong>fache Übersetzung für die Zielplattform erfolgen kann. Im<br />
1 Die grundlegenden RFCs für DHCP s<strong>in</strong>d:<br />
RFC1541 : ”Dynamic Host Configuration Protocol”, Oktober 1993<br />
RFC2131 : ”Dynamic Host Configuration Protocol”, März 1997<br />
RFC2132 : ”DHCP Options and BOOTP Vendor Extensions”, März 1997<br />
2 siehe dazu [W6], wobei das ISC neben <strong>der</strong> DHCP-Implementierung weitere Internet-Standards betreut.<br />
93
94 KAPITEL 7. DHCP<br />
Weiteren bezieht sich daher die Beschreibung auf die DHCP-Implementierung des ISC.<br />
Diese liegt <strong>in</strong>zwischen <strong>in</strong> <strong>der</strong> dritten Version vor und unterstützt e<strong>in</strong>e ganze Reihe neuer<br />
Eigenschaften, wie die Unterstützung von Dynamischen DNS o<strong>der</strong> Vendor Code Identifier.<br />
32 bit<br />
OP HTYPE HLEN HOPS<br />
TRANSACTION IDENTIFIER<br />
SECONDS ELAPSED FLAGS<br />
CLIENT IP ADDRESS<br />
YOUR IP ADDRESS<br />
SERVER IP ADDRESS<br />
ROUTER IP ADDRESS<br />
CLIENT HARDWARE ADDRESS (16 OCTETS)<br />
.<br />
.<br />
SERVER HOSTNAME (64 OCTETS)<br />
.<br />
.<br />
OPTIONS (VARIABLE)<br />
.<br />
.<br />
DHCP Message Format<br />
Abbildung 7.1: Aufbau e<strong>in</strong>es DHCP-Paketes<br />
DHCP arbeitet auf Port 67 zur Anfrage an den Server und auf Port 68 zur Rückantwort<br />
an den Client. Solche Informationen f<strong>in</strong>det man <strong>in</strong> <strong>der</strong> /etc/services. Das vorgestellte Protokoll<br />
läßt sich nur s<strong>in</strong>nvoll <strong>in</strong> broadcastfähigen Netzen 3 e<strong>in</strong>setzen. Es ist nicht (bzw. nur<br />
über den Umweg e<strong>in</strong>es DHCP-Gateway-Servers) routebar. DHCP verwendet als Transportprotokoll<br />
UDP, da 3-Wege-Handshake mit den IP-Spezialadressen 4 kaum s<strong>in</strong>nvoll realisiert<br />
werden kann. In den meisten Fällen genügt e<strong>in</strong> Datenpaket pro Konfigurationsschritt <strong>in</strong><br />
jede Richtung. DHCP ist e<strong>in</strong>e Erweiterung des Bootp, welches weniger komplex im Leasehandl<strong>in</strong>g<br />
ist. Es kennt nur statische Adresszuweisungen und weniger vordef<strong>in</strong>ierte Konfigurationsoptionen.<br />
DHCP arbeitet im vierstufigen Verfahren bei <strong>der</strong> Adresszuweisung:<br />
• Client schickt DHCPDISCOVER an 255.255.255.255 Port 67 um Server zu ermitteln<br />
• Server schickt e<strong>in</strong>en Vorschlag mit Parametern als DHCPOFFER an 255.255.255.255<br />
Port 68<br />
• Client sucht sich aus evtl. mehreren ”Offers” nach bestimmten Kriterien e<strong>in</strong>e passende<br />
aus (z.B. nach <strong>der</strong> Länge <strong>der</strong> ”Lease”) und schickt DHCPREQUEST gerichtet an den<br />
passenden Server<br />
• Server bestätigt mit DHCPACK gerichtet an Client<br />
3 Ethernet bzw. TokenR<strong>in</strong>g<br />
4 255.255.255.255 für den lokalen Broadcast im Netz als Anfrage mit <strong>der</strong> eigenen IP 0.0.0.0
7.2. IMPLEMENTATION 95<br />
1<br />
Konfiguration<br />
festlegen<br />
2<br />
3<br />
Konfiguration<br />
annehmen<br />
4<br />
5<br />
Lease<br />
entfernen<br />
Server Client<br />
DHCPDISCOVER<br />
DHCPOFFER<br />
DHCPREQUEST<br />
DHCPACK<br />
DHCPRELEASE<br />
Beg<strong>in</strong>n <strong>der</strong><br />
Initialisierung<br />
Konfiguration<br />
wählen<br />
Initialisierung<br />
abgeschlossen<br />
Sauberes<br />
Beenden<br />
Abbildung 7.2: Ablauf e<strong>in</strong>er DHCP-Anfrage<br />
• Server kann e<strong>in</strong> Request e<strong>in</strong>es Clients ablehnen und e<strong>in</strong> NAK schicken<br />
• Wenn <strong>der</strong> Client e<strong>in</strong> Problem mit <strong>der</strong> zugewiesenen Adresse hat, sendet er e<strong>in</strong> DE-<br />
CLINE<br />
• Der Client kann die erhaltene Adresse vor Ablauf zurückgeben und hierfür e<strong>in</strong> RE-<br />
LEASE senden<br />
• Der Client kann die erhaltene Adresse vor Ablauf verlängern und hierfür e<strong>in</strong> RENEW<br />
schicken<br />
Der DHCP-Server verwaltet den Adresspool und versieht jede Adresse mit <strong>der</strong> ”Verleih”-<br />
Zeit. Er kennt e<strong>in</strong>e Reihe fest def<strong>in</strong>ierter Optionen und bei Bedarf können weitere eigene<br />
Optionen def<strong>in</strong>iert werden. 5<br />
Im Ethereal-Mitschnitt kann man gut den Aufbau e<strong>in</strong>es DHCP-(Request)-Paketes sehen,<br />
wie er schematisch im Bild (DHCP-Paket) gezeigt ist. Das erste Feld gibt den Typ des<br />
Paketes an - hier Boot-Request. Die verwendete Hardware ist e<strong>in</strong> Ethernet, weshalb die<br />
MAC-Adressen 6Byte lang s<strong>in</strong>d. Es traten ke<strong>in</strong>e Hops auf, da die Aktion im selben LAN<br />
stattfand. DHCP arbeitet mit dem verb<strong>in</strong>dungslosen UDP. Deshalb muss es Transaktionen<br />
zuordnen können. Hierfür gibt es e<strong>in</strong>en 32 bittigen Identifier. Darauf folgten die verstrichene<br />
Zeit und Flags.<br />
5 <strong>in</strong>sgesamt s<strong>in</strong>d 255 Optionen möglich
96 KAPITEL 7. DHCP<br />
Abbildung 7.3: DHCP-Session unter <strong>der</strong> Lupe<br />
Interessant s<strong>in</strong>d dann wie<strong>der</strong> die Blöcke <strong>der</strong> IP-Adressen. Der Client kann e<strong>in</strong>e Adresse<br />
von e<strong>in</strong>er noch gültigen Zuweisung besitzen (Client IP). Die vom Server zugewiesene<br />
Adresse steht <strong>in</strong> ”Your IP”. Next Server kann die Adresse des nächsten zu kontaktierenden<br />
Servers beispielsweise TFTP enthalten. Sonst steht hier die Adresse des DHCP-Servers.<br />
Die Adresse des Relay-Agent enthält die IP des beteiligten Routers, wenn die Anfrage über<br />
e<strong>in</strong> DHCP-Relay zum Server gelangte. Im Beispiel s<strong>in</strong>d alle Adressen leer (0.0.0.0). Diese<br />
Informationen entnimmt <strong>der</strong> DHCP-Client nicht dem IP-Hea<strong>der</strong>. So können ”Next Server”<br />
und die Absendeadresse des DHCP-Servers durchaus differieren.<br />
Weitere Fel<strong>der</strong> s<strong>in</strong>d für den Serverhostnamen und e<strong>in</strong> Bootfile (das dann per TFTP<br />
geholt werden könnte - nützlich für Diskless Clients) reserviert. Ab dann geht es weiter mit<br />
den verschiedenen DHCP-Optionen. Interessant ist vielleicht noch die Option 50 (Requested<br />
IP Address). Da <strong>der</strong> Client schone<strong>in</strong>mal e<strong>in</strong>e Lease bezogen hatte, versucht er die gleiche<br />
IP-Nummer wie<strong>der</strong> anzufor<strong>der</strong>n. Das hat den Vorteil, dass die Masch<strong>in</strong>e bestehende IP-<br />
Verb<strong>in</strong>dungen nicht durch Adressenwechsel kappt. Die meisten an<strong>der</strong>en Optionen erklären<br />
sich selbst. <strong>E<strong>in</strong></strong>e Liste aller dem ISC-Server bekannten Optionen liefert die Manpage: man<br />
dhcp-options.<br />
7.3 DHCP-Server<br />
Konfiguriert wird <strong>der</strong> DHCP-Dämon (dhcpd) mittels /etc/dhcpd.conf. Es stehen etliche<br />
weitere <strong>E<strong>in</strong></strong>stellungen zur Verfügung; diese können mit man dhcp-options angezeigt werden.<br />
Die DHCP-Konfigurationsdatei hängt <strong>in</strong> ihrer Ausgestaltung vom verfolgten <strong>E<strong>in</strong></strong>satzziel<br />
ab: So werden für Diskless X-Stations bzw. L<strong>in</strong>ux-Workstations vielleicht e<strong>in</strong>e Reihe zusätz-
7.3. DHCP-SERVER 97<br />
licher Daten übertragen, die für den Betrieb von W<strong>in</strong>dowsmasch<strong>in</strong>en nicht relevant s<strong>in</strong>d.<br />
Entsprechende benutzerdef<strong>in</strong>ierte Optionstr<strong>in</strong>gs werden e<strong>in</strong>geführt, um bestimmte Textfel<strong>der</strong><br />
6 z.B. zur Konfiguration des X-Servers zu kopieren.<br />
Es gibt e<strong>in</strong>e Reihe von Möglichkeiten, um die /etc/dhcpd.conf zu strukturieren. Zusätzlich<br />
zum ”subnet”-Statement hilft das ”group”-Statement dabei - neben <strong>der</strong> Unterteilung<br />
nach Subnetzen - Konfigurationsblöcke mit gleichen Parametern zusammenzufassen. So<br />
muss nicht für jeden Host die gesamte Palette wie<strong>der</strong>holt werden.<br />
<strong>E<strong>in</strong></strong>e Beispielkonfiguration könnte wie folgt aussehen:<br />
option doma<strong>in</strong>-name "subdoma<strong>in</strong>.doma<strong>in</strong>.site second.doma<strong>in</strong>";<br />
filename "/tftpboot/bootimg";<br />
use-host-decl-names on;<br />
default-lease-time 72000;<br />
max-lease-time 144000;<br />
subnet 10.16.60.0 netmask 255.255.252.0 {<br />
option doma<strong>in</strong>-name-servers 10.16.60.21, 10.16.60.100;<br />
option ntp-servers ntps1.doma<strong>in</strong>.site, ntps2.doma<strong>in</strong>.site;<br />
option font-servers fontserver.doma<strong>in</strong>.site;<br />
option x-display-manager x1.doma<strong>in</strong>.site, x2.doma<strong>in</strong>.site;<br />
# option netbios-name-servers 10.16.63.252;<br />
option routers 10.16.63.254;<br />
option broadcast-address 10.16.63.255;<br />
# range 10.16.60.201 10.16.60.253;<br />
}<br />
group {<br />
option lpr-servers 10.16.60.2;<br />
host dxs02 {<br />
hardware ethernet 00:00:1C:D2:87:DF;<br />
fixed-address 10.16.60.64; }<br />
[...]<br />
7.3.1 DHCP-Standardoptionen<br />
DHCP kann aufgrund se<strong>in</strong>er Flexibilität zum zentralen Konfigurationstool avancieren. Man<br />
kann versuchen, über diesen Dienst alle relevanten Informationen zum Betrieb von L<strong>in</strong>ux<br />
Th<strong>in</strong>-Clients zu übertragen. Neben den klassischen Parametern, wie Hostname, IP-Adresse,<br />
Netzmaske und Gateway, zählt dazu e<strong>in</strong>e Reihe von Server-IP’s: X-Display-, Time-, Swap-,<br />
NIS-Server und weitere.<br />
Die DHCP-Konfigurationsdatei /etc/dhcpd.conf hängt <strong>in</strong> ihrem Umfang vom <strong>E<strong>in</strong></strong>satzziel<br />
ab: So werden für Diskless X-Stations vielleicht e<strong>in</strong>e Reihe zusätzlicher Daten, z.B.<br />
über Informationen zum Font-, Pr<strong>in</strong>t-, Swap- und NIS-Server übertragen, die für den X-<br />
Term<strong>in</strong>albetrieb nicht erfor<strong>der</strong>lich s<strong>in</strong>d.<br />
# -- global options -default-lease-time<br />
160000;<br />
max-lease-time 200000;<br />
use-host-decl-names on;<br />
ddns-update-style none;<br />
subnet 192.168.2.0 netmask 255.255.255.192 {<br />
option broadcast-address 192.168.2.63;<br />
option doma<strong>in</strong>-name-servers 192.168.2.22;<br />
option doma<strong>in</strong>-name "test.site, test2.site";<br />
option nis-doma<strong>in</strong> "chnsmi20";<br />
6 Variablentyp ”str<strong>in</strong>g”
98 KAPITEL 7. DHCP<br />
option nis-servers 192.168.2.3;<br />
option log-servers 192.168.2.4;<br />
option netbios-name-servers 192.168.2.5;<br />
option routers 192.168.2.1;<br />
# range 192.168.2.50 192.168.2.62;<br />
}<br />
# -- client specific -group<br />
{<br />
host test1 {<br />
hardware ethernet 00:80:48:C2:DD:6A;<br />
fixed-address 192.168.2.41; }<br />
host test2 {<br />
hardware ethernet 00:E0:4C:39:10:21;<br />
fixed-address 192.168.2.42; }<br />
}<br />
Das ”group” Statement hilft hierbei - neben <strong>der</strong> Unterteilung nach Subnetzen - Konfigurationsblöcke<br />
mit gleichen Parametern zusammenzufassen. So muss nicht für jeden Host die<br />
gesamte Palette wie<strong>der</strong>holt werden.<br />
Das Beispiel zeigt bereits e<strong>in</strong>ige typische Konfigurationsparameter des ISC-DHCP-<br />
Servers. Die ”default-lease-time” und ”max-lease-time” s<strong>in</strong>d Ganzzahlwerte, die <strong>in</strong> Sekunden<br />
angeben, wie lange e<strong>in</strong>e herausgegebene Adresse standardmäßig und maximal gültig ist.<br />
Dieses spielt beson<strong>der</strong>s e<strong>in</strong>e Rolle <strong>in</strong> dynamischen Netzen mit potenziell mehr verwalteten<br />
Masch<strong>in</strong>en als vorhandenen IP-Adressen. Mittels ”use-host-decl-names” wird gesteuert, ob<br />
<strong>der</strong> Rechnername anhand des ”host”-Statements übermittelt o<strong>der</strong> <strong>in</strong> e<strong>in</strong>er eigenen Option<br />
def<strong>in</strong>iert werden soll. Der ”ddns-update-style” bestimmt über die Zusammenarbeit mit dem<br />
Doma<strong>in</strong> Name Server. Soll ke<strong>in</strong>e stattf<strong>in</strong>den, weil alle Rechnernamen fest im DNS verankert<br />
s<strong>in</strong>d, wird wie im Beispiel ”none” gesetzt.<br />
Die meisten DHCP-Optionen s<strong>in</strong>d selbsterklärend. Die komplette Liste aller def<strong>in</strong>ierbaren<br />
Optionen kann <strong>der</strong> Manpage zu ”dhcp-options” entnommen werden. Die <strong>in</strong>nerhalb<br />
<strong>der</strong> dhcpd.conf def<strong>in</strong>ierten Subnetze müssen <strong>in</strong>nerhalb <strong>der</strong> gültigen <strong>Netzwerk</strong>konfiguration<br />
des Servers liegen. Ausserhalb liegende Netze können nicht bedient werden. Innerhalb des<br />
”subnet”-Statements legt die ”range” fest, welche Adressen im def<strong>in</strong>ierten Bereich dynamisch<br />
verwaltet werden. Der Server merkt sich herausgegebene IP-Adressen <strong>in</strong> e<strong>in</strong>er geson<strong>der</strong>ten<br />
Datei, den dhcpd.leases, welche sich unterhalb <strong>der</strong> /var Verzeichnisstruktur <strong>in</strong><br />
Abhängigkeit <strong>der</strong> verwendeten Distribution bef<strong>in</strong>det.<br />
7.3.2 DHCP-DNS-Verb<strong>in</strong>dung<br />
Damit <strong>der</strong> ISC-DHCP-Server dynamische Updates im DNS-Server - es funktioniert nur die<br />
Zusammenarbeit mit BIND - vornehmen kann, s<strong>in</strong>d e<strong>in</strong>ige Vorbereitungen nötig. In <strong>der</strong><br />
Zonendef<strong>in</strong>itionsdatei /etc/named.conf habt man die Möglichkeit dieses zu konfigurieren:<br />
acl mynetwork {<br />
10.16.10.0/24;<br />
127.0.0.1;<br />
};<br />
[ ... ]<br />
zone "mydoma<strong>in</strong>.site" <strong>in</strong> {<br />
type master;<br />
allow-update { WERT; };<br />
file "master/mydoma<strong>in</strong>.site";<br />
};<br />
zone "239.168.192.<strong>in</strong>-addr.arpa" {
7.4. BENUTZERDEFINIERTE OPTIONEN 99<br />
};<br />
type master;<br />
file "master/10.16.10.rev";<br />
allow-update { WERT; };<br />
Dabei kann ”allow-update” verschiedene Werte annehmen: none - ke<strong>in</strong>e Updates s<strong>in</strong>d erlaubt.<br />
127.0.0.1 - Updates s<strong>in</strong>d nur von <strong>der</strong> Masch<strong>in</strong>e selbst (localhost) gestattet. ”allowupdate<br />
mynetwork; ” konfiguriert, dass aus dem e<strong>in</strong>gangs def<strong>in</strong>ierten Quellen Update-<br />
Informationen akzeptiert werden.<br />
In <strong>der</strong> dhcpd.conf sollten m<strong>in</strong>destens die folgenden globalen Optionen auftauchen:<br />
ddns-updates on;<br />
ddns-doma<strong>in</strong>name "mydoma<strong>in</strong>.site";<br />
ddns-update-style ad-hoc;<br />
allow unknown-clients;<br />
[ ... ]<br />
subnet 10.16.10.0 netmask 255.255.255.0 {<br />
range dynamic-bootp 10.10.10.10 10.16.10.250;<br />
option subnet-mask 255.255.255.0;<br />
option routers 10.16.10.254;<br />
allow unknown-clients;<br />
}<br />
Beide Dienste müssen Sie nach erfolgter Konfiguration neu starten. Im Anschluss können<br />
Sie beispielsweise e<strong>in</strong>e W<strong>in</strong>dowsmasch<strong>in</strong>e e<strong>in</strong>e IP-Adresse vom Server beziehen lassen. Dann<br />
sieht man im Logfile die Interaktion von DHCP und DNS:<br />
[ ... ]<br />
Jan 12 21:05:52 hermes named[16798]: client 10.16.10.254#33708: updat<strong>in</strong>g\<br />
zone ’mydoma<strong>in</strong>.site/IN’: add<strong>in</strong>g an RR<br />
Jan 12 21:05:52 hermes named[16798]: journal file master/mydoma<strong>in</strong>.site. \<br />
zone.jnl does not exist, creat<strong>in</strong>g it<br />
Jan 12 21:05:52 hermes dhcpd: if zx-spektrum.mydoma<strong>in</strong>.site IN A rrset \<br />
doesn’t exist add zx-spektrum.mydoma<strong>in</strong>.site 80000 IN A 10.16.10.250:\<br />
success.<br />
Jan 12 21:05:52 hermes named[16798]: client 10.16.10.254#33708: updat<strong>in</strong>g\<br />
zone ’239.168.192.<strong>in</strong>-addr.arpa/IN’: delet<strong>in</strong>g an rrset<br />
Jan 12 21:05:52 hermes named[16798]: client 10.16.10.254#33708: updat<strong>in</strong>g\<br />
zone ’239.168.192.<strong>in</strong>-addr.arpa/IN’: add<strong>in</strong>g an RR<br />
Jan 12 21:05:52 hermes named[16798]: journal file master/10.16.10.rev.jnl\<br />
does not exist, creat<strong>in</strong>g it<br />
[ ... ]<br />
Vielen reicht e<strong>in</strong>e Zugriffssteuerung anhand <strong>der</strong> IP-Nummer nicht. Diese kann oft zu e<strong>in</strong>fach<br />
gefälscht werden. Seit e<strong>in</strong>iger Zeit bietet BIND zur Absicherung sogenannte Transaction<br />
Signatures (TSIG). Sie basieren auf e<strong>in</strong>er <strong>E<strong>in</strong></strong>wege-Hashfunktion. Sie werden über die<br />
komplette DNS-Nachricht berechnet und als Resource Record an die Nachricht angehängt.<br />
7.4 Benutzerdef<strong>in</strong>ierte Optionen<br />
DHCP bietet die Möglichkeit bestimmte, sogenannte Vendoroptionen aufzunehmen, d.h.<br />
es können zusätzliche Optionen zu den bereits vorhandenen def<strong>in</strong>iert werden. Hierfür kann<br />
<strong>der</strong> Codenummernbereich von 128 - 255 verwendet werden. Wenn man umfangreiche Informationen<br />
übertragen will, sollte man die Paketgröße des BOOTP-Reply-Pakets über
100 KAPITEL 7. DHCP<br />
den Standard 7 h<strong>in</strong>aus erhöhen. Die Option kann nur Ganzzahlwerte enthalten, die jedoch<br />
die MTU-Size des <strong>Netzwerk</strong>es nicht überschreiten soll, da die meisten Clients ke<strong>in</strong>e fragmentierten<br />
DHCP-Antworten verarbeiten können. Diese Optionen werden zu Beg<strong>in</strong>n <strong>der</strong><br />
Konfigurationsdateien 8 des dhcpd bzw. dhclient def<strong>in</strong>iert. Die folgende Liste ist eher als<br />
Beispiel denn als vollständige Aufzählung zu verstehen, da für gegebene Aufgaben die notwendigen<br />
Fel<strong>der</strong> auch völlig an<strong>der</strong>s aussehen können.<br />
# -- lot of <strong>in</strong>formation to be transferred -dhcp-max-message-size<br />
1200;<br />
# -- user def<strong>in</strong>ed options -option<br />
o128 code 128 = str<strong>in</strong>g;<br />
option o129 code 129 = str<strong>in</strong>g;<br />
option menudflts code 160 = str<strong>in</strong>g;<br />
option motdl<strong>in</strong>e1 code 184 = str<strong>in</strong>g;<br />
option menul<strong>in</strong>e1 code 192 = str<strong>in</strong>g;<br />
option menul<strong>in</strong>e2 code 193 = str<strong>in</strong>g;<br />
option menul<strong>in</strong>e3 code 194 = str<strong>in</strong>g;<br />
Wobei folgende Variablentypen verwendet werden können: str<strong>in</strong>g, <strong>in</strong>teger, boolean, text, ipnumber.<br />
Diese lassen sich auch zu Arrays zusammenfassen. Das ist das klassische Verfahren,<br />
welches für die vordef<strong>in</strong>ierten Optionen für Listen von IP-Nummern zum <strong>E<strong>in</strong></strong>satz kommt.<br />
Die Option 128 def<strong>in</strong>iert e<strong>in</strong> ”Magic-Packet”, welches die Auswertung von Menu-Optionen<br />
für Etherboot e<strong>in</strong>schaltet. Standardwerte für die Menü-Auswahl, d.h. welches Feld nach<br />
e<strong>in</strong>em gewissen Timeout gestartet werden soll, werden mit <strong>der</strong> Option 160 festgelegt. Die<br />
Zusammensetzung des Menüs, welches nach dem Kontakt von Etherboot mit dem DHCP-<br />
Server angezeigt wird, geschieht durch die Optionen 192 und folgende. Hierbei wird für jede<br />
Menü-Zeile e<strong>in</strong> eigenes Feld benötigt. Mittels <strong>der</strong> Option 129 s<strong>in</strong>d Parameter zum Kernelstart<br />
übermittelbar, die z.B. auch den Root-Verzeichnispfad enthalten . <strong>E<strong>in</strong></strong>e ”Message of<br />
the day” 9 kann durch das Setzen <strong>der</strong> Option 184 erfolgen.<br />
7.5 Die Verwendung von Vendor-Code-Identifiern<br />
Vendor-Code-Identifier s<strong>in</strong>d als feste Optionen für DHCP def<strong>in</strong>iert: ”vendor-class-identifier”<br />
für die Identifizierung des Clients durch den Server und ”vendor-encapsulated-options” zur<br />
Identifizierung des Servers seitens des Clients.<br />
Auf diese Weise lassen sich die DHCP-Anfragen verschiedener booten<strong>der</strong> Rechner vone<strong>in</strong>an<strong>der</strong><br />
differenzieren, so dass es gel<strong>in</strong>gt an e<strong>in</strong>e Masch<strong>in</strong>e <strong>in</strong> Abhängigkeit vom anfragenden<br />
Client verschiedene Werte für die gleiche Option zurückzuliefern. Dieses ist zw<strong>in</strong>gend<br />
notwendig, wenn PXE und Etherboot h<strong>in</strong>tere<strong>in</strong>an<strong>der</strong> verkettet booten sollen, da PXE zwar<br />
die identische IP-Konfiguration erhält, aber anstelle des Kernel-Images das Etherboot-PXE-<br />
Image zur Ausführung laden soll. Dieses sieht man am unten stehendem Beispiel: Es werden<br />
bestimmte Optionen nur gesetzt bzw. die Default-Option überschrieben, wenn <strong>in</strong> <strong>der</strong> Anfrage<br />
des Clients e<strong>in</strong> bestimmter Str<strong>in</strong>g identifiziert werden kann.<br />
Die Interaktion mit PXE und Etherboot mittels VCI ist im folgenden Beispiel demonstriert.<br />
# -- vendor identifier dependend sett<strong>in</strong>gs -class<br />
"Etherboot" {<br />
match if substr<strong>in</strong>g (option vendor-class-identifier,0,9)="Etherboot";<br />
7<br />
Die Standardgröße des Bootp-Paketes beträgt 572 Byte. <strong>E<strong>in</strong></strong>e Erhöhung auf z.B. 1024 Byte kann durch<br />
”dhcp-max-message-size 1024” erreicht werden.<br />
8<br />
üblicherweise /etc/dhcpd.conf für den Server-Dämon sowie /etc/dhclient.conf für den Client<br />
9 Hier das Textfeld über <strong>der</strong> Menu-Auswahl
7.6. DHCP-CLIENT 101<br />
option o128 E4:45:74:68:00:00;<br />
option motdl<strong>in</strong>e1 = "Welcome to Testlabs";<br />
option vendor-encapsulated-options 3c:09:53:74:75:64:69:6e:65:74:7a:ff;<br />
}<br />
class "PXEClient:" {<br />
match if substr<strong>in</strong>g (option vendor-class-identifier,0,10)="PXEClient:";<br />
filename "/nfsroot/dxs/boot/eb-3c905c.pxe";<br />
}<br />
[...]<br />
host dxs03 {<br />
hardware ethernet 00:00:B4:72:D2:4E;<br />
if substr<strong>in</strong>g (option vendor-class-identifier,0,3)="PXE"<br />
{ filename "/nfsroot/dxs/boot/rtl8139.pxe"; }<br />
fixed-address 10.8.4.13;<br />
}<br />
[...]<br />
Die ”class”-Statements zeigen globale Def<strong>in</strong>itionen. Es können aber auch hostspezifische<br />
<strong>E<strong>in</strong></strong>stellungen getroffen werden, wie das untenstehende Beispiel zeigt.<br />
7.6 DHCP-Client<br />
Von schlanken Implementierungen für Embedded Devices mal abgesehen 10 gibt es eigentlich<br />
nur e<strong>in</strong>e wesentliche Serverimplementierung. Dafür gibt es aber verschiedene DHCP-Clients.<br />
<strong>E<strong>in</strong></strong> Client ist beim ISC-Paket dabei, das Programm dhclient. Mit den Kommandos dhcpcd,<br />
dem DHCP-Client-Daemon, und pump stehen alternative Clients zur Verfügung. Letztere<br />
verwendet man, wenn nur e<strong>in</strong>e kle<strong>in</strong>e Anzahl von Standarde<strong>in</strong>stellungen mittels DHCP<br />
vorgenommen werden soll. Im Gegensatz zu dhclient, welches auf e<strong>in</strong> externes Skript zum<br />
Anwenden <strong>der</strong> DHCP-<strong>Netzwerk</strong>konfiguration angewiesen ist, arbeiten die beiden letztgenannten<br />
Kommandos direkt auf den betroffenen Dateien, wie z.B. auf <strong>der</strong> resolv.conf zur<br />
<strong>E<strong>in</strong></strong>stellung <strong>der</strong> DNS-Client-Konfiguration.<br />
dhclient verwendet e<strong>in</strong>e eigene Konfigurationsdatei. Die Konfiguration sollte passend<br />
zum DHCP-Server erfolgen, wenn mit benutzerdef<strong>in</strong>ierten Optionen gearbeitet wird. Die<br />
<strong>E<strong>in</strong></strong>stellungsdatei lautet /etc/dhclient.conf:<br />
# /etc/dhclient.conf<br />
#<br />
send dhcp-max-message-size 1200;<br />
send dhcp-lease-time 18000;<br />
request subnet-mask, broadcast-address, time-offset, routers,<br />
doma<strong>in</strong>-name, doma<strong>in</strong>-name-servers, host-name;<br />
require subnet-mask, doma<strong>in</strong>-name-servers;<br />
timeout 60;<br />
retry 60;<br />
reboot 10;<br />
select-timeout 5;<br />
<strong>in</strong>itial-<strong>in</strong>terval 2;<br />
script "/sb<strong>in</strong>/dhclient-script";<br />
dhclient schreibt, wenn er e<strong>in</strong>e IP-Konfiguration von e<strong>in</strong>em Server erhalten hat, die Daten<br />
<strong>in</strong> die Datei /var/lib/dhcp/dhclient.leases:<br />
lease {<br />
10 ”dnsmasq” ist e<strong>in</strong> solches Programm
102 KAPITEL 7. DHCP<br />
}<br />
<strong>in</strong>terface "eth1";<br />
fixed-address 10.16.10.12;<br />
option subnet-mask 255.255.255.0;<br />
option dhcp-lease-time 3600;<br />
option dhcp-message-type 5;<br />
option doma<strong>in</strong>-name-servers 10.16.10.1;<br />
option dhcp-server-identifier 10.16.10.254;<br />
option broadcast-address 10.16.10.255;<br />
option doma<strong>in</strong>-name "mydoma<strong>in</strong>.site";<br />
renew 5 2004/12/31 16:31:33;<br />
reb<strong>in</strong>d 5 2004/12/31 17:00:14;<br />
expire 5 2004/12/31 17:07:44;<br />
Nachdem dhclient die DHCP-Informationen vom Server bezogen hat, geschieht die<br />
<strong>E<strong>in</strong></strong>tragung bzw. Anwendung dieser mittels dhclient-script, welches im Anhang als Shell-<br />
Skript beispielhaft angeführt ist. dhclient-script wird von dhclient mittels Temporärskript<br />
<strong>in</strong> /tmp mit allen erhaltenen Variablen gestartet. Diese werden als Shell-Variablen <strong>in</strong> <strong>der</strong><br />
aufrufenden Kommandozeile übergeben. Wärend es mit dhclient nicht möglich ist zwei un-<br />
Abbildung 7.4: DHCP-Client unter W<strong>in</strong>dows98<br />
abhängige Instanzen für zwei verschiedene Ethernet-Interfaces zu starten, bietet sichdhcpcd<br />
ethN 11 für e<strong>in</strong>e solche Betriebsart an. Die Lease-Datei des dhcpcd sieht etwas an<strong>der</strong>s aus.<br />
Jedoch f<strong>in</strong>den sich die gleichen Konfigurationsdaten wie<strong>der</strong>:<br />
11 ethN steht für das Interface auf dem die Anfrage geschickt werden soll, beispielsweise dhcpcd eth1 o<strong>der</strong><br />
dhcpcd wlan0
7.6. DHCP-CLIENT 103<br />
IPADDR=10.16.10.12<br />
NETMASK=255.255.255.0<br />
NETWORK=10.16.10.0<br />
BROADCAST=10.16.10.255<br />
DOMAIN=’mydoma<strong>in</strong>.site’<br />
DNS=10.16.10.1<br />
DHCPSID=10.16.10.254<br />
DHCPGIADDR=0.0.0.0<br />
DHCPSIADDR=10.16.10.254<br />
DHCPCHADDR=00:0C:29:5A:B3:E0<br />
DHCPSHADDR=00:50:56:ED:BC:96<br />
DHCPSNAME=’’<br />
LEASETIME=60<br />
RENEWALTIME=720<br />
REBINDTIME=1575<br />
INTERFACE=’eth1’<br />
CLASSID=’L<strong>in</strong>ux 2.6.8-24.11-default i686’<br />
CLIENTID=00:0C:29:5A:B3:E0<br />
Hier können Adm<strong>in</strong>s kontrollieren, welche Daten <strong>der</strong> Client vom Server bezogen hat. dhcpcd<br />
kennt e<strong>in</strong>e Reihe von Optionen, die se<strong>in</strong> Verhalten steuern:<br />
Option Bedeutung<br />
-d Generieren von Debug-Output<br />
-i VCID Schicken e<strong>in</strong>es Vendor Class Identifiers. An<strong>der</strong>e Möglichkeit<br />
Clients anstatt mit <strong>der</strong> MAC-Adresse ause<strong>in</strong>an<strong>der</strong>zuhalten.<br />
-k Schicken e<strong>in</strong>es SIGHUP an laufende dhcpcd Prozesse<br />
Tabelle 7.1: Optionen zur Steuerung des Verhaltens von dhcpcd<br />
Abbildung 7.5: Erneuern e<strong>in</strong>er Lease unter W<strong>in</strong>dows-XP<br />
Unter W<strong>in</strong>dows gibt es das grafische Programm w<strong>in</strong>ipcfg für W<strong>in</strong>dows 98/ME. Mit dem<br />
Klick auf ”Aktualisieren” beschafft sich <strong>der</strong> Benutzer e<strong>in</strong>e neue Lease vom DHCP-Server.<br />
Die Gültigkeit und an<strong>der</strong>e Daten f<strong>in</strong>det man im erweiterten Bereich. ipconfig -renew <strong>in</strong><br />
<strong>der</strong> Kommandozeile regelt die dynamische IP-Beschaffung für die professionelleren Systeme,<br />
wie W<strong>in</strong>dows2000 und XP.
104 KAPITEL 7. DHCP<br />
7.7 DHCP mit LDAP-Backend<br />
In sehr großen Netzen ist die Verwaltung von sehr vielen Masch<strong>in</strong>en <strong>in</strong> e<strong>in</strong>er e<strong>in</strong>fachen<br />
Textdatei (dhcpd.conf) irgendwann nicht mehr zeitgemäß. Es kommt <strong>der</strong> Wunsch auf alle<br />
relevanten Informationen zu den e<strong>in</strong>zelnen Masch<strong>in</strong>en <strong>in</strong> e<strong>in</strong>er Datenbank zu verwalten. Das<br />
Ganze sollte dann auch noch dynamisch funktionieren: Nach e<strong>in</strong>em Update <strong>der</strong> Datenbank<br />
sollte <strong>der</strong> DHCP-Server ohne Neustart mit den aktualisierten Informationen arbeiten.<br />
Hierzu hat Brian Masney 12 e<strong>in</strong>en Patch für den aktuellen ISC DHCP <strong>der</strong> Version 3<br />
gebastelt. Dieser ermöglicht e<strong>in</strong>e Integration mit e<strong>in</strong>em LDAP-Server. Die Struktur <strong>der</strong><br />
DHCP-Konfiguration eignet sich von sich aus gut mit ihren Gruppen- und Subnetz-Abschnitten<br />
<strong>in</strong> e<strong>in</strong>er hierarchischen Datenbank abgebildet zu werden.<br />
Der DHCP-Server <strong>der</strong> aktuellen SuSE-Distributionen ist bereits angepasst, bei Debian<br />
Test<strong>in</strong>g o<strong>der</strong> Unstable Releases muss <strong>der</strong> Patch noch e<strong>in</strong>gefahren werden. Ob das LDAP-<br />
Backend bereits Bestandteil des Servers ist, zeigt das Logfile beim Start:<br />
Jan 12 20:47:26 s2 dhcpd: Internet Systems Consortium DHCP Server V3.0.1<br />
[ ... ]<br />
Jan 12 20:47:26 s2 dhcpd: Not search<strong>in</strong>g LDAP s<strong>in</strong>ce ldap-server, ldap-port<br />
and ldap-base-dn were not specified <strong>in</strong> the config file<br />
[ ... ]<br />
Um dann Ihren DHCP-Server zur Zusammenarbeit mit LDAP zu motivieren, s<strong>in</strong>d e<strong>in</strong>ige<br />
<strong>E<strong>in</strong></strong>tragungen <strong>in</strong> <strong>der</strong> globalen Sektion <strong>der</strong> Konfigurationsdatei notwendig. Dafür können<br />
dann die ”subnet”, ”group” und ”host” Statements entfallen. Diese Informationen wan<strong>der</strong>n<br />
<strong>in</strong> die Datenbank.<br />
ldap-server 10.8.4.254;<br />
ldap-port 389;<br />
ldap-username "cn=dhcpd,ou=users,dc=mydoma<strong>in</strong>,dc=site";<br />
ldap-password "GeheiM";<br />
ldap-base-dn "ou=computers,dc=mydoma<strong>in</strong>,dc=site";<br />
ldap-method dynamic;<br />
Die ersten fünf Deklarationen legen den Zugriff auf den LDAP-Server fest. IP-Nummer<br />
o<strong>der</strong> alternativ <strong>der</strong> Rechnername und die Portnummer s<strong>in</strong>d selbsterklärend. Der ”ldapusername”<br />
gibt an, mit welchem Account sich <strong>der</strong> DHCP-Server an den LDAP-Server<br />
b<strong>in</strong>det. Dieser Account muss über entsprechende Leserechte auf dem ihm zugewiesenen<br />
Abschnitt <strong>der</strong> Datenbank haben. Üblicherweise gehört zum LDAP-Benutzer auch e<strong>in</strong> Passwort<br />
(ldap-passwort).<br />
Die ”ldap-base-dn” ist die Basis für Suchanfragen auf dem LDAP-Baum. Dann müssen<br />
ke<strong>in</strong>e langen Dist<strong>in</strong>guished Names (dn) angegeben werden, son<strong>der</strong>n <strong>der</strong> Teil <strong>in</strong> <strong>der</strong> Base kann<br />
entfallen. Die letzte Option bestimmt mit dem Flag dynamic, dass <strong>der</strong> DHCP-Server bei<br />
je<strong>der</strong> Anfrage den LDAP-Server befragt. Steht hier ”static” holt er sich die Informationen<br />
genau e<strong>in</strong>mal vom LDAP-Server und kappt dann die Verb<strong>in</strong>dung zu diesem.<br />
Der LDAP-Server <strong>in</strong> <strong>der</strong> Standard-Konfiguration kennt zwar schon e<strong>in</strong>e Reihe von Objektklassen,<br />
für die Daten des DHCP-Servers s<strong>in</strong>d jedoch weitere notwendig, z.B. dhcpHost,<br />
dhcpdGroup, dhcpOptions, dhcpServer, ...<br />
Auf die Konfiguration e<strong>in</strong>es LDAP-Servers wird hier nicht weiter e<strong>in</strong>gegangen. Mit LD-<br />
AP beschäftigt sich e<strong>in</strong> eigener Abschnitt des Skriptes. 13 Für das Beispiel existiere bereits<br />
12 http://www.newwave.net/ masneyb<br />
13 Wenn dieser Teil nicht <strong>in</strong> <strong>der</strong> aktuellen Ausgabe enthalten ist, kann dieser über http://goe.net beschafft<br />
werden.
7.7. DHCP MIT LDAP-BACKEND 105<br />
e<strong>in</strong> lauffähiger Server, <strong>der</strong> für den Bereich ”dc=mydoma<strong>in</strong>, dc=site” e<strong>in</strong>gerichtet ist. <strong>E<strong>in</strong></strong><br />
LDIF zum Bestücken e<strong>in</strong>es LDAP-Servers mit DHCP-Daten könnte so aussehen:<br />
# Anlage e<strong>in</strong>es DHCP-Servers im LDAP-Baum<br />
dn: dc=myserver, dc=mydoma<strong>in</strong>, dc=site<br />
objectClass: top<br />
objectClass: dhcpServer<br />
cn: myserver.mydoma<strong>in</strong>.site<br />
dhcpServiceDN: cn=Network, dc=myserver, dc=mydoma<strong>in</strong>, dc=site<br />
# Def<strong>in</strong>ieren e<strong>in</strong>es Knotens "Network" unterhalb dieses Servers<br />
dn: cn=Network, dc=myserver, dc=mydoma<strong>in</strong>, dc=site<br />
cn: Network<br />
objectClass: top<br />
objectClass: dhcpService<br />
objectClass: dhcpOptions<br />
dhcpPrimaryDN: cn=myserver.mydoma<strong>in</strong>.site, dc=myserver, dc=mydoma<strong>in</strong>,<br />
dc=site<br />
dhcpOption: doma<strong>in</strong>-name "myserver.mydoma<strong>in</strong>.site mydoma<strong>in</strong>.site"<br />
dhcpOption: doma<strong>in</strong>-name-servers 10.16.60.1,10.10.10.10<br />
dhcpStatements: default-lease-time 21600<br />
dhcpStatements: max-lease-time 43200<br />
dhcpStatements: ddns-update-style ad-hoc<br />
# Unterhalb des Knotens "Network" <strong>E<strong>in</strong></strong>trag für das Netz 10.16.60.0<br />
# schaffen<br />
dn: cn=10.16.60.0, cn=Network, dc=myserver, dc=mydoma<strong>in</strong>, dc=site<br />
cn: 10.16.60.0<br />
objectClass: top<br />
objectClass: dhcpSubnet<br />
objectClass: dhcpOptions<br />
dhcpNetMask: 24<br />
dhcpOption: routers 10.16.60.254<br />
dhcpOption: subnet-mask 255.255.255.0<br />
# In diesem Netz e<strong>in</strong>zelne Masch<strong>in</strong>en e<strong>in</strong>tragen: ldaphost1<br />
dn: cn=ldaphost1, cn=10.16.60.0, cn=Network, dc=myserver, dc=mydoma<strong>in</strong>,<br />
dc=site<br />
cn: ldaphost1<br />
objectClass: top<br />
objectClass: dhcpHost<br />
dhcpHWAddress: ethernet 00:c0:26:31:6a:13<br />
dhcpStatements: fixed-address 10.16.60.11<br />
# In diesem Netz e<strong>in</strong>zelne Masch<strong>in</strong>en e<strong>in</strong>tragen: ldaphost2<br />
dn: cn=ldaphost2, cn=10.16.60.0, cn=Network, dc=myserver, dc=mydoma<strong>in</strong>,<br />
dc=site<br />
cn: ldaphost2<br />
objectClass: top<br />
objectClass: dhcpHost
106 KAPITEL 7. DHCP<br />
dhcpHWAddress: ethernet 00:c0:26:31:6a:14<br />
dhcpStatements: fixed-address 10.16.60.12<br />
Nach dem Neustart des DHCP-Servers sollte dieser <strong>in</strong> <strong>der</strong> Lage se<strong>in</strong>, die Daten per LDAP zu<br />
beziehen. Für die Fehlersuche empfielt es sich die Debug-Level sowohl des LDAP-Servers als<br />
auch des dhcpd hoch e<strong>in</strong>zustellen. Aus Sicht des Autors ist die Anb<strong>in</strong>dung des DHCP an LD-<br />
AP nicht wirklich optimal. Die Art <strong>der</strong> Datenbank wird kaum ausgenutzt. So gibt es für alle<br />
DHCP-Optionen e<strong>in</strong> e<strong>in</strong>ziges Attribut, welches letztendlich nur e<strong>in</strong>e Zeile <strong>der</strong> Konfigurationsdatei<br />
ohne Semikolon speichert. Wenn <strong>in</strong> <strong>der</strong> dhcpd.conf: option doma<strong>in</strong>-name-servers<br />
10.16.60.1,192.168.10.10; stand, so steht <strong>in</strong> <strong>der</strong> LDAP-Datenbank im Attibut ”dhcpOption”:<br />
”doma<strong>in</strong>-name-servers 10.16.60.1,192.168.10.10”<br />
In vielen Fällen würde man die Computer gerne <strong>in</strong> e<strong>in</strong>er e<strong>in</strong>heitlichen Liste unterhalb e<strong>in</strong>es<br />
Knotens, beispielsweise ”ou=computer” verwalten 14 und alle DHCP-spezifischen Daten<br />
<strong>in</strong> e<strong>in</strong>em eigenen Knoten halten. Das ist <strong>der</strong>zeitig nicht möglich. So erfüllt LDAP lediglich<br />
die Funktion e<strong>in</strong>es dynamischen Backends, kann aber nicht wirklich se<strong>in</strong>e Stärken zu e<strong>in</strong>er<br />
s<strong>in</strong>nvollen Masch<strong>in</strong>enverwaltung ausspielen.<br />
7.8 Aufgaben<br />
7.8.1 DHCP<br />
1) Wor<strong>in</strong> besteht <strong>der</strong> Vorteil von DHCP gegenüber BOOTP? Nennen Sie e<strong>in</strong>ige Eigenschaften<br />
des ISC DHCPv3!<br />
2) Bauen Sie e<strong>in</strong>en DHCP-Server auf, <strong>der</strong> IP-Adressen dynamisch vergibt!<br />
a) Wie sieht <strong>der</strong> entsprechende <strong>E<strong>in</strong></strong>trag <strong>in</strong> <strong>der</strong> /etc/dhcpd.conf aus?<br />
b) Warum bekommt e<strong>in</strong> Rechner häufig dieselbe IP zugeteilt, die dieser schon e<strong>in</strong>mal hatte?<br />
Wo werden diese Informationen abgelegt?<br />
c) Client-Seite: Verän<strong>der</strong>n Sie die MAC-Adresse Ihrer <strong>Netzwerk</strong>karte (Tip: ifconfig ethX hw<br />
ether 00:00:B4:34:35:XY, wobei X, Y Hexadezimalzahlen se<strong>in</strong> sollten, die sich von <strong>der</strong> Wahl<br />
<strong>der</strong> an<strong>der</strong>en Kursteilnehmer unterscheiden.) und starten Sie den Dienst zum dynamischen<br />
Bezug von IP-Nummern neu. Warum bekommen Sie nun e<strong>in</strong>e an<strong>der</strong>e IP als vorher zugeteilt?<br />
3) Wenn man sehr viele Daten (z.B. e<strong>in</strong>e grosse Reihe von Server-IP-Nummern) übergeben<br />
möchte, könnte <strong>der</strong> Platz im DHCP-Antwort-Paket nicht mehr ausreichen. Wäre es s<strong>in</strong>nvoll<br />
deshalb TCP statt UDP e<strong>in</strong>zusetzen, um e<strong>in</strong>e gesicherte Übertragung mehrerer Pakete zu<br />
erreichen? Welche an<strong>der</strong>en Möglichkeiten gibt es noch?<br />
4) Nennen Sie verschiedene Hierarchielevel <strong>der</strong> def<strong>in</strong>ierten Optionen! Welche Level überschreiben<br />
welche? Wozu kann dieses nützlich se<strong>in</strong>?<br />
14 Siehe das Beispiel Samba-LDAP für PDC
Kapitel 8<br />
DNS<br />
8.1 <strong>E<strong>in</strong></strong>stieg<br />
Das Doma<strong>in</strong> Name System (DNS) hatte es zu Zeiten des Internet-Booms bis <strong>in</strong> die Hauptnachrichten<br />
geschafft: Immer dann, wenn es juristische Ause<strong>in</strong>an<strong>der</strong>setzungen über bekannte<br />
Namen und Marken gab. Wenn jemand im Internet was zu Gött<strong>in</strong>gen sucht, probiert<br />
er es am besten unter dem Namen <strong>der</strong> Stadt, also www.goett<strong>in</strong>gen.de. Ke<strong>in</strong>er kennt die<br />
IP-Adresse des Auftritts - 134.76.251.205.<br />
Auch wenn es an <strong>der</strong> gerichtlichen Front ruhiger geworden ist, kommen täglich neue<br />
Doma<strong>in</strong>s h<strong>in</strong>zu. Viele haben sich vielleicht schon vor e<strong>in</strong>iger Zeit e<strong>in</strong>e eigene Webpräsenz<br />
mit eigenem Namen bei irgende<strong>in</strong>em Provi<strong>der</strong> e<strong>in</strong>richten lassen o<strong>der</strong> denken darüber nach<br />
e<strong>in</strong>e Doma<strong>in</strong> zu registrieren. Man frage e<strong>in</strong>fach mal im eigenen Umfeld herum - bestimmt<br />
f<strong>in</strong>den sich Bekannte und Verwandte als Inhaber e<strong>in</strong>er Internet-Doma<strong>in</strong>.<br />
Ebenfalls erweitert sich die Zahl <strong>der</strong> sogenannten Toplevel-Doma<strong>in</strong>s ständig. So ist die<br />
Landes-Toplevel-Doma<strong>in</strong> de die weltweit zweitgrößte nach <strong>der</strong> generischen Doma<strong>in</strong> com.<br />
Irgendjemand muss diese ganzen Namen auch verwalten. Darum kümmert sich <strong>der</strong> Doma<strong>in</strong><br />
Name Server. Auch für diese Aufgabe bietet sich L<strong>in</strong>ux an.<br />
8.1.1 Enstehungsgeschichte<br />
DNS ist <strong>in</strong>zwischen untrennbar mit dem Internet verknüpft. Rechner im weltweiten Internet<br />
werden <strong>in</strong> <strong>der</strong> überwiegenden Zahl über ihren Namen und nicht über ihre IP-Adresse<br />
angesprochen. Es ist jedoch so, dass das Internet-Protokoll ohne Probleme ohne DNS klarkommt,<br />
DNS jedoch als Dienst direkt auf IP angewiesen ist.<br />
Menschen können sich schliesslich Namen besser merken als Telefonnummern. Wenn<br />
auch das Beispiel sich nicht direkt übertragen lässt, zeigt es die Bedeutung. Je<strong>der</strong> kennt<br />
www.google.de. Kaum aber jemand weiss, dass beim Ansurfen <strong>der</strong> Seite aus Deutschland 1<br />
<strong>der</strong> Browser e<strong>in</strong>e Verb<strong>in</strong>dung zu IP 66.102.9.99 o<strong>der</strong> 66.102.9.104 aufbaut. Wer wissen<br />
möchte, wie <strong>der</strong> Browser den Namen zur Adresse mit Hilfe <strong>der</strong> Systembibliotheken auflöst,<br />
gibt e<strong>in</strong>fachmal das Kommando host e<strong>in</strong>.<br />
dirk@l<strong>in</strong>ux:~> host www.google.de<br />
www.google.de is an alias for www.google.com.<br />
www.google.com is an alias for www.google.akadns.net.<br />
www.google.akadns.net has address 66.102.9.99<br />
www.google.akadns.net has address 66.102.9.104<br />
Das Netz kann aber ausschliesslich mit B<strong>in</strong>äradressen umgehen - auch die besser lesbare<br />
Dotted Quad Notation aus dem Beispiel ist nur e<strong>in</strong>e Übersetzung für den menschlichen<br />
1 je nach Provi<strong>der</strong>, da es oft erstmal e<strong>in</strong> Proxy ist<br />
107
108 KAPITEL 8. DNS<br />
Benutzer. Deshalb wird e<strong>in</strong> System für die Zuordnung von Namen zu Adressen - und umgekehrt<br />
benötigt. Am Anfang g<strong>in</strong>g es mit e<strong>in</strong>er e<strong>in</strong>fachen Textdatei los. Diese Textdatei gibt<br />
es immer noch. In kle<strong>in</strong>en Netzen o<strong>der</strong> zu Zeiten <strong>in</strong> denen Ihre Masch<strong>in</strong>e ke<strong>in</strong>e <strong>Netzwerk</strong>verb<strong>in</strong>dung<br />
zu e<strong>in</strong>em DNS-Server hat, soll sie trotzdem Namen und IPs zuordnen können:<br />
# /etc/hosts<br />
# Syntax:<br />
# IP-Address Full-Qualified-Hostname Short-HostnamePv6 addresses<br />
::1 ipv6-localhost ipv6-loopback<br />
fe00::0 ipv6-localnet<br />
ff00::0 ipv6-mcastprefix<br />
ff02::1 ipv6-allnodes<br />
ff02::2 ipv6-allrouters<br />
127.0.0.1 localhost<br />
10.8.4.101 dionysos.mydoma<strong>in</strong>.site dionysos<br />
# resolv other mach<strong>in</strong>es without DNS<br />
10.8.4.205 aphrodite.wg.site aphrodite<br />
10.8.4.206 athene.wg.site athene<br />
[ ... ]<br />
10.8.4.250 thetis.wg.site thetis<br />
Üblicherweise steht da nur noch die eigene Masch<strong>in</strong>e dr<strong>in</strong>, im Beispiel dionysos. Diese <strong>E<strong>in</strong></strong>stellung<br />
landet <strong>in</strong> dieser Datei, wenn man die Masch<strong>in</strong>e mit dem Installationstool <strong>der</strong> gerade<br />
verwendeten Distribution e<strong>in</strong>richtet Alle an<strong>der</strong>en <strong>E<strong>in</strong></strong>träge gelten für spezielle Adressen,<br />
wie das lokale Loopback (127.0.0.1). In e<strong>in</strong>em kle<strong>in</strong>en <strong>Netzwerk</strong>, <strong>in</strong> dem sich wenig än<strong>der</strong>t,<br />
könnte man e<strong>in</strong>fach weitere Rechner <strong>in</strong> diese Datei e<strong>in</strong>tragen und diese anschliessend auf<br />
alle Masch<strong>in</strong>en verteilen. Im Beispiel lassen sich so aphrodite, athene ... ohne Zurhilfenahme<br />
von DNS auflösen.<br />
Da gehen dann schnell die Probleme los: Nicht immer s<strong>in</strong>d alle Rechner gleichzeitig<br />
an. Dann ist die Verteilung unvollständig. Bei häufigen Updates steigt mit <strong>der</strong> Zahl <strong>der</strong><br />
Rechner und <strong>der</strong> <strong>E<strong>in</strong></strong>träge die Fehlerwahrsche<strong>in</strong>lichkeit und ziemlich schnell hat <strong>der</strong> Adm<strong>in</strong><br />
ke<strong>in</strong>e Lust mehr. Das g<strong>in</strong>g den Betreibern <strong>der</strong> frühen IP-Netze genau so. Das frühe Internet<br />
bestand aus wenigen Hosts und die Adm<strong>in</strong>istratoren dieser Masch<strong>in</strong>en kannten sich alle<br />
persönlich.<br />
Das hörte mit <strong>der</strong> steigenden Zahl vernetzter Rechner irgendwann auf. Das Konzept<br />
e<strong>in</strong>er e<strong>in</strong>zigen ”flachen” Datei liess nicht mehr aufrecht erhalten. Fragen <strong>der</strong> Übersichtlichkeit,<br />
Ausfallsicherheit und Redundanz liessen sich mit dem Dateikonzept nicht überzeugend<br />
lösen. <strong>E<strong>in</strong></strong> weiteres Problem tritt auf, wenn die User <strong>in</strong> gewissem Rahmen ihre Rechnernamen<br />
selbst verwalten wollen.<br />
Informatiker an <strong>der</strong> University of California <strong>in</strong> Berkeley machten sich Gedanken, wie sich<br />
das Problem lösen liesse. Das neue System sollte dabei dezentral verteilt, ausfallsicher se<strong>in</strong><br />
und die Datenbestände schnell konvergieren. Die Berkeley Internet Name Doma<strong>in</strong> Software<br />
- daher <strong>der</strong> Name BIND - ist <strong>der</strong> Standard auf den meisten L<strong>in</strong>ux-/<strong>Unix</strong>-Systemen. Die<br />
Software ist OpenSource und <strong>der</strong>zeit <strong>in</strong> <strong>der</strong> Version 9.X verfügbar. Die aktuelle Version<br />
verrät e<strong>in</strong>em das Kommando /usr/sb<strong>in</strong>/named -v.<br />
DNS war nicht <strong>der</strong> e<strong>in</strong>zige Versuch. Viele Adm<strong>in</strong>s kennen sicherlich WIN¿, das W<strong>in</strong>dows<br />
Name System. Dieses kann im P2P- o<strong>der</strong> Servermodus arbeiten, kennt aber nur e<strong>in</strong>e<br />
flache Namenshierarchie, welche <strong>in</strong> früheren Versionen auf 255 Masch<strong>in</strong>en beschränkt war.<br />
WINS ist e<strong>in</strong> System für LANs - ohne große Benutzere<strong>in</strong>griffe verständigen sich die beteiligten<br />
Masch<strong>in</strong>en über ihre Namen. Sie verursachen dabei aber e<strong>in</strong>en nicht unerheblichen
8.1. EINSTIEG 109<br />
<strong>Netzwerk</strong>verkehr. Mit W<strong>in</strong>dows2000 und dem Active Directory, welches als unterliegende<br />
Struktur DNS verwendet, verliert WINS weiter an Bedeutung.<br />
8.1.2 DNS - Das virtuelle IP-Telefonbuch<br />
DNS ist e<strong>in</strong> hierarchisches System mit e<strong>in</strong>er e<strong>in</strong>zigen geme<strong>in</strong>samen Wurzel. Diese wird durch<br />
e<strong>in</strong>en Punkt ”.” symbolisiert. Dann folgen die sogenannten Toplevel-Doma<strong>in</strong>s. Hiervon gibt<br />
es zwei Typen: generische Doma<strong>in</strong>s und Län<strong>der</strong>kürzel. Die generischen Toplevel Doma<strong>in</strong>s,<br />
wie org, gov, com, mil, arpa und edu wurden schon im Herbst 1984 vorgeschlagen. net folgte<br />
e<strong>in</strong> Jahr später. H<strong>in</strong>zu kamen auf dem obersten Level die zweibuchstabigen Län<strong>der</strong>kürzel<br />
nach ISO 3166. <strong>E<strong>in</strong></strong>e vollständige Liste ist unter [1] erhältlich. Unterhalb dieser Hierarchiestufe<br />
kann man selbst, Organisationen o<strong>der</strong> Firmen Doma<strong>in</strong>s registrieren. Ab den folgenden<br />
Hierarchiestufen habt <strong>der</strong> Adm<strong>in</strong> dann fast volle Freiheit, wenn er sich nur an die Benennungsstandards<br />
hält.<br />
Das Konzept des umgekehrten hierarchischen Baumes kennt man von den gängigen<br />
Dateisystemen her. Verfolgt man e<strong>in</strong>en Pfad von Wurzel zu e<strong>in</strong>em Knoten, so ergibt sich<br />
<strong>der</strong> jeweilige Verzeichnis- bzw. Date<strong>in</strong>amen. Die e<strong>in</strong>zelnen Ebenen werden beispielsweise<br />
bei <strong>Unix</strong> durch e<strong>in</strong>en Schrägstrich (/), durch e<strong>in</strong>en Backslash () bei W<strong>in</strong>dows vone<strong>in</strong>an<strong>der</strong><br />
getrennt. Diese Struktur f<strong>in</strong>det sich <strong>in</strong> weiteren Bereichen. Telefonnummern folgen <strong>in</strong>ternational<br />
e<strong>in</strong>em ähnlichen Pr<strong>in</strong>zip: Zuerst f<strong>in</strong>det man den Län<strong>der</strong>code (+49), dann die<br />
Orts-Vorwahl (551) und schliesslich die Anschlussnummer (654321).<br />
Genauso setzt sich <strong>der</strong> komplette Rechnername 2 aus mehreren Teilen zusammen. Ausser<br />
dass als Trennelement <strong>der</strong> e<strong>in</strong>zelnen Ebenen <strong>der</strong> Punkt (.) verwendet wird. An<strong>der</strong>s als <strong>in</strong><br />
den beiden vorgenannten Beispielen dreht sich die Reihenfolge von Allgeme<strong>in</strong> zu Speziell<br />
um: Der Rechnername steht l<strong>in</strong>ks, gefolgt von den Zwischenebenen bis zur Wurzel, die<br />
rechts steht. So ist beispielsweise <strong>in</strong> www.goe.net ”www” e<strong>in</strong> Name für e<strong>in</strong>en konkreten<br />
Rechner. Dieser Rechner ist Mitglied <strong>in</strong> <strong>der</strong> Second-Level-Doma<strong>in</strong> ”goe”, die unterhalb <strong>der</strong><br />
Toplevel-Doma<strong>in</strong> ”net” registriert wurde.<br />
8.1.3 Regeln für die Namensgebung<br />
Damit am Ende die selbstgetauften Rechner <strong>der</strong> eigenen Doma<strong>in</strong> im weltweiten Netz auch<br />
gefunden werden können, geht es nicht ohne Standards ab. Für die Zusammensetzung e<strong>in</strong>es<br />
gültigen FQDN gelten e<strong>in</strong>ige Regeln:<br />
• Je<strong>der</strong> Teilname (label) umfasst maximal 63 Zeichen. Es muss m<strong>in</strong>destens e<strong>in</strong> Buchstabe<br />
enthalten se<strong>in</strong>, damit e<strong>in</strong> Verwechseln mit IP-Adressen ausgeschlossen wird.<br />
• Die Gesamtlänge des FQDN darf 255 Zeichen <strong>in</strong>klusive <strong>der</strong> Punkte nicht überschreiten.<br />
• Erlaubt s<strong>in</strong>d die alphanumerischen Zeichen 0-9 und a-z. Groß- und Kle<strong>in</strong>schreibung<br />
spielt ke<strong>in</strong>e Rolle. Zusätzlich möglich ist die Verwendung des B<strong>in</strong>destrichs ”-”. Er<br />
kann im Gegensatz zu den an<strong>der</strong>en Zeichen nicht am Anfang o<strong>der</strong> Ende e<strong>in</strong>es Namens<br />
stehen. Inzwischen s<strong>in</strong>d auch Umlaute im Namen erlaubt. Hierfür gelten jedoch<br />
spezielle Regeln.<br />
• Je<strong>der</strong> FQDN endet mit e<strong>in</strong>em Punkt. Das macht normalerweise ke<strong>in</strong>er und ist ausserhalb<br />
<strong>der</strong> Zonendateien des BIND auch ke<strong>in</strong> Problem.<br />
2 <strong>in</strong> <strong>der</strong> Fachsprache mit FQDN - Full Qualified Doma<strong>in</strong> Name bezeichnet
110 KAPITEL 8. DNS<br />
Für Umlautdoma<strong>in</strong>s, sogenannte International Doma<strong>in</strong> Names (IDN) wird die sogenannte<br />
ACE-Umschrift verwendet. Anwen<strong>der</strong> geben <strong>in</strong> ihrem Browser beispielsweise jörg.hänßler.de<br />
e<strong>in</strong>. Diesen Str<strong>in</strong>g wandelt <strong>der</strong> Browser dann <strong>in</strong>tern <strong>in</strong> ACE für die Abfrage an den Nameserver<br />
um. Das Ergebnis des Beispiels sieht dann so aus xn–jrg-sna.xn–hnssler-5wa.de.<br />
Viele Web-Browser beherrschen <strong>in</strong>zwischen den Umgang mit IDN, viele an<strong>der</strong>e Client-<br />
Programme jedoch nicht. So liefert zwar www.müller.de e<strong>in</strong> Ergebnis im Konqueror, e<strong>in</strong><br />
p<strong>in</strong>g www.müller.de jedoch nur e<strong>in</strong> lapidares ”unknown host www.müller.de”.<br />
<strong>E<strong>in</strong></strong> p<strong>in</strong>g auf die ACE-Umschrift (hier www.xn–mller-kva.de) klappt natürlich. Die Längenbegrenzung<br />
des Teilstr<strong>in</strong>gs bleibt bestehen. So können Umlautdoma<strong>in</strong>s nicht die Länge<br />
von 63 Zeichen erreichen, da noch Platz für die Umschrift e<strong>in</strong>zuplanen ist.<br />
Für nicht öffentliche Netze ist man nicht zwangsläufig an vorgegebene Toplevel-Doma<strong>in</strong>s<br />
gebunden, man kann sich e<strong>in</strong>fach e<strong>in</strong>e aussuchen. Wenn man jedoch für se<strong>in</strong> privates Netz<br />
e<strong>in</strong>fach e<strong>in</strong>e offizielle Doma<strong>in</strong> wählt, wie beispielsweise testnetz.de, dann könnten Nutzer<br />
verwirrt werden. Sie würden dann unter Umständen versucht se<strong>in</strong>, diese Doma<strong>in</strong> auch von<br />
an<strong>der</strong>en Orten als dem eigenen privaten nach aussen abgeschotteten Netz zu erreichen.<br />
<strong>E<strong>in</strong></strong> Name, wie hermes.wg.site macht durch den Toplevel ”.site” klar, dass es diese Doma<strong>in</strong><br />
nicht offiziell gibt. Bis vor e<strong>in</strong>iger Zeit war stattdessen die Pseudo-Toplevel-Doma<strong>in</strong> ”.local”<br />
Quasistandard. Sie ist aber für selbstkonfigurierende lokale Netze 3 gedacht<br />
8.1.4 Registrieren und Verwalten von Doma<strong>in</strong>s<br />
Organisationen, Privatpersonen, Firmen registrieren immer e<strong>in</strong>e Second-Level-Doma<strong>in</strong>, die<br />
unterhalb e<strong>in</strong>er dieser Toplevel-Namen liegt. Mit <strong>der</strong> Registrierung beispielsweise von ”goe”<br />
unterhalb von ”net” wurde dem Autor die Doma<strong>in</strong> goe.net zugeordnet. Damit folgt nicht<br />
automatisch auch die Existenz von Doma<strong>in</strong>s, wie goe.org o<strong>der</strong> das Nutzungsrecht darauf. So<br />
musste beispielsweise die Firma Google die verschiedenen Doma<strong>in</strong>s google.com, google.net,<br />
google.de o<strong>der</strong> google.us e<strong>in</strong>zeln registrieren. Die Abbildung zeigt e<strong>in</strong>en symbolischen Aus-<br />
country generic<br />
de fr uk<br />
Toplevel<br />
Doma<strong>in</strong>s<br />
net mil org com edu<br />
Second Level<br />
gwdg Doma<strong>in</strong>s<br />
uni-freiburg<br />
goe kernel google<br />
ftp<br />
www www ftp www l<strong>in</strong>ux<br />
www ftp ks<br />
Part of Doma<strong>in</strong> Name Space<br />
www<br />
Abbildung 8.1: Ausschnitt aus dem Namensraum<br />
schnitt aus dem DNS-Namensraum des Internets. Neben den ursprünglich festgelegten dreibuchstabigen<br />
generischen Toplevel-Doma<strong>in</strong>s und den Län<strong>der</strong>kürzeln s<strong>in</strong>d <strong>in</strong> jüngster Zeit<br />
weitere Doma<strong>in</strong>-Endungen h<strong>in</strong>zugekommen. Durch die Mo<strong>der</strong>ation von ICANN wurden<br />
weitere Toplevel-Doma<strong>in</strong>s vorgeschlagen: aero, biz, coop, <strong>in</strong>fo, museum, name, pro o<strong>der</strong> eu.<br />
Unterhalb dieser neuen Toplevel-Doma<strong>in</strong>s können zum Teil schon (m<strong>in</strong>destens <strong>in</strong>fo, biz,<br />
name) Doma<strong>in</strong>s über verschiedene Registrare e<strong>in</strong>getragen werden.<br />
3 Apple nennt diesen Dienst Rendevouz. Unter L<strong>in</strong>ux gibt es dafür den mdnsd Dienst, <strong>der</strong> dynamisches<br />
DNS <strong>in</strong> lokalen Netzen bereitstellt.
8.2. IMPLEMENTATION 111<br />
Für die e<strong>in</strong>zelnen Toplevel-Doma<strong>in</strong>s ist nicht e<strong>in</strong>e Organisation o<strong>der</strong> Firma zuständig.<br />
Für die Toplevel-Doma<strong>in</strong> de regelt dieses DENIC. Sie ist e<strong>in</strong>e e<strong>in</strong>getragene Genossenschaft.<br />
In ihr s<strong>in</strong>d beispielsweise große Internet-Service-Provi<strong>der</strong> und Diensteanbieter Mitglied.<br />
Diese können im Auftrag ihrer Kunden Doma<strong>in</strong>s registrieren. Die Informationen wem e<strong>in</strong>e<br />
Doma<strong>in</strong> gehört, wer für den Betrieb des Nameservers dieser Doma<strong>in</strong> zuständig ist und<br />
weitere Daten s<strong>in</strong>d <strong>in</strong> <strong>der</strong> sogenannten whois-Datenbank gespeichert. Früher liessen sich<br />
diese Informationen per Kommandozeilen-Tool direkt abfragen, nun geht es nur noch über<br />
die Webschnittstellen <strong>der</strong> Registrare o<strong>der</strong> auch direkt bei www.denic.de. Doma<strong>in</strong>-Inhaber,<br />
adm<strong>in</strong>istrativer o<strong>der</strong> technischer Ansprechpartner und Zonenverwalter können durchaus<br />
verschiedene Personen se<strong>in</strong>.<br />
Die meisten Registrare stellen zwei Möglichkeiten zur Verfügung e<strong>in</strong>e Doma<strong>in</strong> zu ”konnektieren”,<br />
d.h. im Internet erreichbar zu machen. Der übliche Weg ist die ”Delegation”.<br />
Das bedeutet, dass <strong>in</strong> den DENIC-Datenbanken die Adressen von m<strong>in</strong>destens zwei (maximal<br />
fünf) Nameservern vermerkt werden. Üblicherweise stellen die Registrare bei <strong>der</strong> Erste<strong>in</strong>tragung<br />
von Nameservern sicher, dass diese funktionieren. Die Daten des zugehörigen<br />
SOA-Records (SOA=Start Of Authority) des Nameservers sollten ich deshalb <strong>in</strong> folgendem<br />
Spektrum bewegen (Angaben <strong>in</strong> Sekunden): <strong>E<strong>in</strong></strong>e alternative Möglichkeit e<strong>in</strong>e Doma<strong>in</strong><br />
Variable Gefor<strong>der</strong>te Zeiten <strong>in</strong> Sekunden<br />
refresh 10000 - 86400<br />
retry 1800 -28800<br />
expire 604800 - 3600000<br />
ttl 180 - 345600<br />
Tabelle 8.1: <strong>E<strong>in</strong></strong>stellungen im SOA<br />
zu konnektieren besteht dar<strong>in</strong>, dass auf dem Nameserver des Registrars e<strong>in</strong> bis zu e<strong>in</strong>ige<br />
”Dienste”, die mit dieser Doma<strong>in</strong> zusammenhängen direkt e<strong>in</strong>getragen werden. So können<br />
beispielsweise www.¡Name <strong>der</strong> Doma<strong>in</strong>¿.de o<strong>der</strong> ftp.¡Name <strong>der</strong> Doma<strong>in</strong>¿.de direkt mit e<strong>in</strong>er<br />
IP-Adresse registriert werden. Dieses Verfahren wird als Konnektierung mittels NSentry-<br />
<strong>E<strong>in</strong></strong>trägen bezeichnet. Das spart den eigenen Nameserver und macht bei kle<strong>in</strong>en Doma<strong>in</strong>s<br />
mit wenigen Diensten S<strong>in</strong>n.<br />
8.2 Implementation<br />
<strong>E<strong>in</strong></strong> Nameserver ist niemals für das gesamte Internet verantwortlich, son<strong>der</strong>n verwaltet lediglich<br />
e<strong>in</strong>en Teil des Namensraumes. Bevor es jedoch um die Frage geht, welcher Nameserver<br />
sich um welchen Bereich des Namensraumes kümmert, s<strong>in</strong>d e<strong>in</strong>ige Begriffe zu klären. Bisher<br />
kam <strong>der</strong> Ausdruck ”Doma<strong>in</strong>”, deutsch ”Domäne” schon häufiger vor. Diesen sollte man<br />
nicht mit e<strong>in</strong>er (W<strong>in</strong>dows-)NT-Domäne verwechseln. <strong>E<strong>in</strong></strong>e solche fasst auch Gruppen von<br />
Rechnern organisatorisch zusammen. Es stecken jedoch komplett an<strong>der</strong>e Pr<strong>in</strong>zipien h<strong>in</strong>ter<br />
e<strong>in</strong>er DNS- o<strong>der</strong> W<strong>in</strong>dows-Doma<strong>in</strong>.<br />
8.2.1 Nameserver und Zuständigkeiten<br />
Bezogen auf den DNS-Namensraum ist e<strong>in</strong> Doma<strong>in</strong> e<strong>in</strong> Knoten des Baumes mit allen darunter<br />
folgenden Verzweigungen. So s<strong>in</strong>d die Masch<strong>in</strong>en ftp.uni-freiburg.de und www.ks.unifreiburg.de<br />
Teile <strong>der</strong> Doma<strong>in</strong> uni-freiburg.de. Die Rechner mit <strong>der</strong> geme<strong>in</strong>samen Doma<strong>in</strong><br />
können, müssen aber nicht <strong>in</strong> e<strong>in</strong>em geme<strong>in</strong>samen IP-Subnetz liegen. Sie haben auch sonst<br />
nicht viel geme<strong>in</strong> o<strong>der</strong> müssen <strong>in</strong> irgende<strong>in</strong>er weitergehenden Beziehung zue<strong>in</strong>an<strong>der</strong> stehen.
112 KAPITEL 8. DNS<br />
Im Beispiel stehen <strong>der</strong> Rechner ftp.uni-freiburg.de und die Subdoma<strong>in</strong> ks.uni-freiburg.de auf<br />
e<strong>in</strong>er Hierarchiestufe. Unterhalb von ”ks” können wie<strong>der</strong>um Rechner (im Beispiel ”www”)<br />
e<strong>in</strong>getragen se<strong>in</strong> o<strong>der</strong> weitere Subdoma<strong>in</strong>s folgen. Der Begriff Domian ist e<strong>in</strong>e Frage <strong>der</strong> Organisation:<br />
”Welche Hosts be<strong>in</strong>haltet die DNS-Doma<strong>in</strong> D?” o<strong>der</strong> ”Unter welcher Doma<strong>in</strong><br />
ist die Person P o<strong>der</strong> Organisation O erreichbar?”<br />
Ist man nun für e<strong>in</strong>e solche Doma<strong>in</strong> zuständig o<strong>der</strong> <strong>der</strong>en Eigentümer, betreibt man<br />
e<strong>in</strong>en Nameserver. In diesem kann man dann beliebige Rechnernamen e<strong>in</strong>tragen o<strong>der</strong> Sub-<br />
Doma<strong>in</strong>s festlegen. So ist ks.uni-freiburg.de e<strong>in</strong>e Subdoma<strong>in</strong> von uni-freiburg.de. Wenn man<br />
sich diese Organisation näher anschaut, stellt man fest, dass die Doma<strong>in</strong>names hierarchisch<br />
aufgebaut s<strong>in</strong>d. Trotzdem ist nur e<strong>in</strong> Nameserver für diese Doma<strong>in</strong> verantwortlich. Dieser<br />
Nameserver ist ”autoritativ”. Die bis zu vier weiteren Nameserver, die man bei <strong>der</strong><br />
Registrierung angeben kann, erfüllen Backup- und Redundanzfunktionen.<br />
<strong>E<strong>in</strong></strong> zentrales Konzept des DNS ist die Delegation. Die hierarchische Struktur des DNS<br />
erlaubt die Verteilung von Informationen. Das hat e<strong>in</strong>ige Vorteile: Die Daten werden an den<br />
Stellen gepflegt, wo sie bekannt s<strong>in</strong>d. Oft kommunizieren <strong>in</strong> lokalen Netzen gerade die lokalen<br />
Masch<strong>in</strong>en direkt mite<strong>in</strong>an<strong>der</strong>. Namensanfragen können direkt vor Ort mit kürzester<br />
Verzögerung beantwortet werden. Durch Delegation wird die Autorität für Subdoma<strong>in</strong>s auf<br />
an<strong>der</strong>e Nameserver übertragen. Das passiert bei <strong>der</strong> Registrierung e<strong>in</strong>er DE-Doma<strong>in</strong> beim<br />
DENIC, wenn man eigene Nameserver angibt. Die neu e<strong>in</strong>getragene Doma<strong>in</strong> ist e<strong>in</strong>e Subdoma<strong>in</strong><br />
von DE. Bei <strong>der</strong> Delegation kann <strong>der</strong> Adm<strong>in</strong>istrator entscheiden, welche Bereiche<br />
se<strong>in</strong>er Doma<strong>in</strong> auf an<strong>der</strong>e Nameserver übertragen werden sollen. In solchen Fällen spricht<br />
man von Zonen. <strong>E<strong>in</strong></strong>e Zone ist alle<strong>in</strong> durch Delegation def<strong>in</strong>iert. Dieser Begriff bezeichnet<br />
deshalb meist die physikalischen Realisierung. An <strong>der</strong> Universität Freiburg ist beispielsweise<br />
die Subdoma<strong>in</strong> <strong>in</strong>formatik.uni-freiburg.de an e<strong>in</strong>en eigenen Nameserver delegiert. Alles<br />
<strong>in</strong>nerhalb dieser Subdoma<strong>in</strong> bildet e<strong>in</strong>e eigene Zone. Die Subdoma<strong>in</strong> ks.uni-freiburg.de wird<br />
auf dem zentralen Nameserver <strong>der</strong> Doma<strong>in</strong> uni-freiburg.de verwaltet. ”ks” ist also Bestandteil<br />
<strong>der</strong> Zone uni-freiburg.de.<br />
Die Nameserver <strong>der</strong> Doma<strong>in</strong> uni-freiburg.de wissen um ihre Schäfchen o<strong>der</strong> kennen jemanden,<br />
<strong>der</strong> um Teilmengen weiss (delegierte Subdoma<strong>in</strong>s). Was ist aber, wenn ganz allgeme<strong>in</strong><br />
irgende<strong>in</strong>e Doma<strong>in</strong> aufgelöst werden soll? Die oberste Ebene bei den Nameservern<br />
bilden die sogenannten Root-Nameserver. Sie s<strong>in</strong>d gleichzeitig autoritativ für die Top Level<br />
Doma<strong>in</strong>s. Diese kennen wie<strong>der</strong>um die verantwortlichen Nameserver für die zweite Ebene,<br />
z.B. goe.net o<strong>der</strong> uni-goett<strong>in</strong>gen.de. Soll e<strong>in</strong> beliebiger Hostnamen aufgelöst werden, kommt<br />
e<strong>in</strong>er <strong>der</strong> Root-Nameserver <strong>in</strong>s Spiel. Nur dieser kennt den autoritativen Nameserver <strong>der</strong><br />
Second-Level Ebene. Die Erreichbarkeit <strong>der</strong> Root-Nameserver ist zentrales Element des<br />
DNS. <strong>E<strong>in</strong></strong> Ausfall dieser zentralen Masch<strong>in</strong>en hätte katastrophale Auswirkungen auf die<br />
Funktion des Internets. Diese mag dann zwar immer noch wie vorher funktionieren. Aber<br />
<strong>in</strong> dem Augenblick, wo IP-Adressen nicht mehr von Namen ermittelt werden können, ist<br />
die Kommunikation schnell nicht mehr möglich. Deshalb werden Root-Nameserver durch<br />
Cach<strong>in</strong>g entlastet und arbeiten ausschliesslich iterativ.<br />
Bisher g<strong>in</strong>g es immer um die Auflösung von Namen zu IP-Adressen. Im Beispiel oben<br />
wurde auch schon kurz <strong>der</strong> umgekehrte Fall angesprochen. Was macht man aber, wenn man<br />
die IP-Adresse kennt und den zugehörigen Hostnamen o<strong>der</strong> die Doma<strong>in</strong> wissen möchte?<br />
IP-Adressen <strong>in</strong> <strong>der</strong> ”dotted-quad-notation”, also sowas wie 134.76.60.86 ähneln sich vom<br />
Aufbau her den Doma<strong>in</strong>names. Das gilt ebenfalls für e<strong>in</strong>e gewisse Hierarchie (solange die<br />
Subnetzaufteilung entlang <strong>der</strong> Punkte erfolgt) <strong>der</strong> IP-Adressen: 134.76.0.0 ist als IP-Netz<br />
an die Universität Gött<strong>in</strong>gen zugewiesen. Innerhalb dieses Netzes lassen sich beispielsweise<br />
Subnetze <strong>der</strong> Form 134.76.0.0 - 134.76.255.0 festlegen.<br />
Das wird e<strong>in</strong>fach dazu benutzt auch für die umgekehrte Auflösung das Konzept <strong>der</strong> hier-
8.3. DNS-SERVER MIT LINUX 113<br />
archischen Datenbank und Delegation zu nutzen. Es stößt aber schneller an se<strong>in</strong>e Grenzen<br />
<strong>in</strong> dem Augenblick, wo e<strong>in</strong> Netz <strong>der</strong> Form 134.76.60.0/255.255.255.0 <strong>in</strong> mehrere Teilnetze<br />
aufgeteilt werden soll, die unterschiedlichen Subdoma<strong>in</strong>s zugeordnet s<strong>in</strong>d.<br />
8.2.2 Cach<strong>in</strong>g<br />
Nameserver können selbstständig Anfragen weiterleiten, falls sie nicht selbst für die nachgefragte<br />
Zone autoritativ s<strong>in</strong>d. Trotzdem ist es <strong>in</strong> den meisten Fällen <strong>in</strong>effektiv, wenn bei<br />
gleichen Anfragen jedes Mal e<strong>in</strong>e Weiterleitung erfolgt. Deshalb speichert <strong>der</strong> Server Namensauflösungen<br />
für e<strong>in</strong>e gewisse Zeit zwischen (Cach<strong>in</strong>g). Die Aufbewahrungsdauer für<br />
e<strong>in</strong>en <strong>E<strong>in</strong></strong>trag ist jedoch nicht trivial zu bestimmen. Es gibt Server <strong>der</strong>en IP-Adressen sich<br />
jahrelang nicht än<strong>der</strong>n. Es gibt aber auch Masch<strong>in</strong>en, die beispielsweise per DHCP e<strong>in</strong>e<br />
dynamische Adresse beziehen und nur für e<strong>in</strong>e gewisse (kurze) Zeit aktiv s<strong>in</strong>d. O<strong>der</strong><br />
Site-Betreiber nutzen DNS zur Lastverteilung verschiedene Server und reichen deshalb verschiedene<br />
IPs für dieselbe Adresse heraus 4 .<br />
Wie lange dieser <strong>E<strong>in</strong></strong>trag beibehalten werden soll, legt <strong>der</strong> verantwortliche Serverbetreiber<br />
<strong>der</strong> Zone mit <strong>der</strong> Time-To-Live (TTL) fest. Welche Möglichkeiten e<strong>in</strong>em hier zur<br />
Verfügung stehen, klärt <strong>der</strong> Abschnitt zur <strong>E<strong>in</strong></strong>richtung e<strong>in</strong>es BIND DNS-Servers. Darüber<br />
h<strong>in</strong>aus merkt sich <strong>der</strong> anfragende Server den autoritativen Nameserver für die jeweiligen<br />
Zonen. So vermeidet er, dass bei <strong>der</strong> Auflösung nicht alle Instanzen <strong>der</strong> Hierarchie durchlaufen<br />
werden müssen. Das hat den Vorteil bei unterschiedlichen Hosts <strong>der</strong> gleichen Zone<br />
sofort <strong>der</strong> verantwortlichen Server zu kennen. DNS kennt auch negatives Cach<strong>in</strong>g: In diesem<br />
Fall werden nicht existierende FQDN für e<strong>in</strong>en bestimmten Zeitraum gemerkt, damit<br />
nicht jedes Mal auf e<strong>in</strong> Timeout gewartet werden muss - diese Zeit wird allerd<strong>in</strong>gs vom<br />
ursprünglich befragten Nameserver selbst vorgegeben.<br />
8.2.3 Primärer und sekundäre Nameserver<br />
Beim Entwurf von DNS wurde sehr viel Wert auf Ausfallsicherheit gelegt. Aus diesem<br />
Grund ist es üblich, statt e<strong>in</strong>es e<strong>in</strong>zigen gleich mehrere Nameserver für e<strong>in</strong>e Zone zu betreiben.<br />
Sekundäre Nameserver werden bei Än<strong>der</strong>ungen <strong>der</strong> Zonendaten durch den primären<br />
benachrichtigt. Sie holen sich dann die aktuellen Zonen<strong>in</strong>formationen (Zonentransfer). Generell<br />
gilt: Es gibt immer nur e<strong>in</strong> primärer aber bis zu vier sekundäre Nameserver.<br />
Heute haben sich allerd<strong>in</strong>gs für den primären Master-Nameserver die Bezeichnung Master<br />
und für die sekundären Master-Nameserver die Bezeichnung Slaves durchgesetzt. ”Slave”<br />
kl<strong>in</strong>gt etwas nachgeordnet. Trotzdem verbirgt sich h<strong>in</strong>ter dieser Bezeichnung e<strong>in</strong> vollwertiger<br />
Nameserver. Da e<strong>in</strong> e<strong>in</strong>zelner physikalischer Nameserver sowohl Master als auch Slave<br />
für unterschiedliche Zonen se<strong>in</strong> kann, ist diese Unterscheidung nicht immer e<strong>in</strong>deutig.<br />
8.3 DNS-Server mit L<strong>in</strong>ux<br />
Nameserver gehören zu den wichtigsten Diensten des Internets. An<strong>der</strong>s als Webserver agieren<br />
sie jedoch im H<strong>in</strong>tergrund. Wer irgendwelche Dienste im Netz anbietet, ist nicht nur<br />
darauf angewiesen, dass <strong>der</strong> Webauftritt attraktiv gestaltet ist und die Wartezeiten kurz<br />
s<strong>in</strong>d, son<strong>der</strong>n auch, dass <strong>der</strong> Server überhaupt gefunden wird. Damit ist nicht <strong>der</strong> <strong>E<strong>in</strong></strong>trag<br />
<strong>in</strong> Suchmasch<strong>in</strong>en geme<strong>in</strong>t, son<strong>der</strong>n die Auflösung des Doma<strong>in</strong>-Namens <strong>in</strong> e<strong>in</strong>e IP-Adresse.<br />
Für e<strong>in</strong>e ganze Reihe von Anwendungen, wie Mail ist auch die umgekehrte Auflögung von<br />
e<strong>in</strong>er IP zu e<strong>in</strong>em FQDN erwünscht.<br />
4 siehe das <strong>E<strong>in</strong></strong>gangsbeispiel für google.de
114 KAPITEL 8. DNS<br />
<strong>E<strong>in</strong></strong> Großteil <strong>der</strong> weltweiten DNS-Server laufen <strong>in</strong>zwischen auf e<strong>in</strong>er Komb<strong>in</strong>ation von<br />
L<strong>in</strong>ux und BIND. B<strong>in</strong>d9 besteht aus mehreren Paketen und ist für alle aktuellen L<strong>in</strong>ux-<br />
Distributionen verfügbar.<br />
8.3.1 Der Dämon<br />
Üblicherweise wird für den DNS <strong>der</strong> B<strong>in</strong>d verwendet. Der Dienst, <strong>der</strong> später als Daemon<br />
im H<strong>in</strong>tergrund läuft heisst named. Das dazugehörige Startskript /etc/<strong>in</strong>it.d/b<strong>in</strong>d9 unter<br />
Debian und /etc/<strong>in</strong>it.d/named für an<strong>der</strong>en Distributionen. Oft f<strong>in</strong>det man noch weitere<br />
Dateien im Sysconfig- o<strong>der</strong> Defaultsverzeichnis, die das Verhalten des Daemons steuern,<br />
ihn beispielsweise mit e<strong>in</strong>er an<strong>der</strong>en UserID als ”root” starten. Konfiguriert wird <strong>der</strong> named<br />
durch die /etc/named.conf bzw. /etc/b<strong>in</strong>d/named.conf. Im folgenden bezieht sich die<br />
Beschreibung auf e<strong>in</strong>e Debian-Installation. 5<br />
named.conf ist die zentrale Konfiguration zum Verhalten des Servers und <strong>der</strong> Def<strong>in</strong>ition<br />
<strong>der</strong> verschiedenen Master- und Slave-Zonen. Die Server-Optionen s<strong>in</strong>d für die bessere Übersichtlichkeit<br />
<strong>in</strong> e<strong>in</strong>e weitere Datei named.conf.options o<strong>der</strong> ähnliche ausgelagert. In dieser<br />
Datei kann man beispielsweise die Forwar<strong>der</strong> def<strong>in</strong>ieren und ACLs für den Zugriff auf den<br />
Server festlegen.<br />
Auf diese Weise legt beispielsweise das Keyword ”listen-on” für das üblicherweise benutzte<br />
IPv4 fest, auf welchem Port und auf welchen IP-Adressen <strong>der</strong> Server auf Anfragen<br />
lauscht. So läßt verh<strong>in</strong><strong>der</strong>n, dass e<strong>in</strong> lediglich <strong>in</strong>terner Server, <strong>der</strong> auf e<strong>in</strong>em Gateway läuft<br />
auch für externe Anfragen offen ist. So können Angreifer nicht per DNS erfahren, wie das <strong>in</strong>terne<br />
Netz strukturiert se<strong>in</strong> könnte. Statt <strong>der</strong> Angaben von IP-Adressen o<strong>der</strong> Netzen lassen<br />
sich vor dem ”options”-Block auch Access Control Lists (ACLs) def<strong>in</strong>ieren: acl localnet<br />
10.8.4.0/24; 10.8.10.0/24; ; Diese trägt man dann direkt e<strong>in</strong>: listen-on port 53 localnet;<br />
; Das Keyword ”listen-on-v6” regelt das Ganze für IPv6.<br />
”forwar<strong>der</strong>s” def<strong>in</strong>iert e<strong>in</strong>e Liste von Servern, an die Anfragen weitergeleitet werden,<br />
wenn <strong>der</strong> Server diese nicht selbst beantworten kann. So kann man vom Cache Ihres Internetprovi<strong>der</strong>s<br />
profitieren. Normalerweise sucht e<strong>in</strong> Nameserver das Internet rekursiv ab,<br />
bis er die gesuchte Antwort f<strong>in</strong>det. Durch diese Option wird stets <strong>der</strong> Nameserver Ihres<br />
Internetprovi<strong>der</strong>s zuerst befragt. Wenn es sich dabei um e<strong>in</strong>en schnellen, viel benutzten<br />
Nameserver handelt, kann dies zu e<strong>in</strong>er Geschw<strong>in</strong>digkeitssteigerung führen.<br />
; /etc/b<strong>in</strong>d/named.conf<br />
<strong>in</strong>clude "/etc/b<strong>in</strong>d/named.conf.options";<br />
zone "." {<br />
type h<strong>in</strong>t;<br />
file "/etc/b<strong>in</strong>d/db.root";<br />
};<br />
zone "localhost" {<br />
type master;<br />
file "/etc/b<strong>in</strong>d/db.local";<br />
};<br />
zone "127.<strong>in</strong>-addr.arpa" {<br />
type master;<br />
file "/etc/b<strong>in</strong>d/db.127";<br />
};<br />
zone "0.<strong>in</strong>-addr.arpa" {<br />
type master;<br />
file "/etc/b<strong>in</strong>d/db.0";<br />
5 An<strong>der</strong>e Distributionen legen die Konfigurationsdateien und Daten oft woan<strong>der</strong>s ab, beispielsweise unterhalb<br />
von /var/lib/named. Wenn man sich an <strong>der</strong> named.conf orientiert, f<strong>in</strong>det man alle weiteren Dateien<br />
schnell, weshalb <strong>in</strong> <strong>der</strong> Darstellung nicht weiter auf Spezialitäten e<strong>in</strong>zelner Distributionen e<strong>in</strong>gegangen wird.
8.3. DNS-SERVER MIT LINUX 115<br />
};<br />
zone "255.<strong>in</strong>-addr.arpa" {<br />
type master;<br />
file "/etc/b<strong>in</strong>d/db.255";<br />
};<br />
<strong>in</strong>clude "/etc/b<strong>in</strong>d/named.conf.local";<br />
In <strong>der</strong> named.conf s<strong>in</strong>d e<strong>in</strong>e Reihe spezieller Zonen bereits def<strong>in</strong>iert. So enthält die Datei<br />
db.root die Liste aller 16 Root-Nameserver. <strong>E<strong>in</strong></strong> Großteil dieser Masch<strong>in</strong>en steht <strong>in</strong> den USA,<br />
e<strong>in</strong>ige <strong>in</strong> Europa und e<strong>in</strong>e Masch<strong>in</strong>e <strong>in</strong> Japan. Ihre IP-Adressen s<strong>in</strong>d fix. Diese Server werden<br />
iterativ befragt, wenn <strong>der</strong> eigene DNS e<strong>in</strong>e Adresse nicht auflösen kann. Die Zone ”.” ist<br />
deshalb vom Typ ”h<strong>in</strong>t” - <strong>der</strong> Nameserver ist für diese Zone nicht authoritativ, erfährt hier<br />
aber, wo er weiterfragen kann.<br />
Weiterh<strong>in</strong> gibt es e<strong>in</strong>ige spezielle Zonen, wie localhost o<strong>der</strong> ”127.<strong>in</strong>-addr.arpa”. Für diese<br />
Zonen ist e<strong>in</strong> Server immer authoritativ. Das verh<strong>in</strong><strong>der</strong>t, dass von schlecht konfigurierten<br />
Masch<strong>in</strong>en Anfragen auf e<strong>in</strong>en Namen wie localhost o<strong>der</strong> e<strong>in</strong>e IP aus 127.0.0.0/255.0.0.0<br />
überhaupt <strong>in</strong>s Netz gelangen. Je<strong>der</strong> Rechner mit <strong>in</strong>stalliertem IP-Stack hat auf dem Loopback-Interface<br />
üblicherweise die IP-Adresse 127.0.0.1 def<strong>in</strong>iert. Auch mit solchen Anfragen<br />
sollten ke<strong>in</strong>e entfernten Nameserver behelligt werden. Das gilt ebenfalls für IP-Adressen, die<br />
mit e<strong>in</strong>er 06 und mit 255 beg<strong>in</strong>nen. So fangen die lokale Broadcast-Adresse o<strong>der</strong> die meisten<br />
Netzmasken an. Alle diese speziellen Zonenfiles werden bei <strong>der</strong> Installation automatisch<br />
angelegt.<br />
Die eigenen Zonen def<strong>in</strong>ieren Sie <strong>der</strong> Übersichtlichkeit halber am besten <strong>in</strong> <strong>der</strong> Datei<br />
/etc/b<strong>in</strong>d/named.conf.local o<strong>der</strong> dem Konzept <strong>der</strong> gewählten Distribution entsprechend.<br />
8.3.2 Die DNS-Datenbank<br />
Es gibt zwei Arten von Zonen: Für die Master-Zonen ist <strong>der</strong> Server authoritativ, die Slave-<br />
Zonen kopiert er def<strong>in</strong>iert durch die Update-Festsetzungen vom für die Zone authoritativen<br />
Server.<br />
zone "wg.site" <strong>in</strong> {<br />
type master;<br />
file "/etc/b<strong>in</strong>d/db.wg.site";<br />
allow-update { 127.0.0.1; 10.8.4.254; };<br />
};<br />
zone "4.8.10.<strong>in</strong>-addr.arpa" <strong>in</strong> {<br />
type master;<br />
file "/etc/b<strong>in</strong>d/db.10.8.4";<br />
allow-update { 127.0.0.1; 10.8.4.254; };<br />
};<br />
Die DNS-Datenbanken enthalten recht unterschiedliche <strong>E<strong>in</strong></strong>träge: Zum e<strong>in</strong>en muss e<strong>in</strong>e<br />
Auflösung von FQDN <strong>in</strong> Richtung IP-Adressen und umgekehrt möglich se<strong>in</strong>, weiterh<strong>in</strong><br />
sollten Informationen zu Nameservern vermerkt se<strong>in</strong>. Unter Umständen legt man ebenfalls<br />
Zonenfiles für die Rückwärtsauflösung von IPv6-Adressen und Telefonnummern nach<br />
ENUM an.<br />
Die Informationse<strong>in</strong>heit <strong>in</strong> e<strong>in</strong>er DNS-Datenbank wird Resource Record (RR) genannt.<br />
Zu jedem <strong>E<strong>in</strong></strong>trag korrespondiert e<strong>in</strong> Typ, <strong>der</strong> die Art <strong>der</strong> enthaltenen Daten beschreibt, und<br />
e<strong>in</strong>e Klasse, die den <strong>Netzwerk</strong>typ beschreibt, für den <strong>der</strong> Record gilt. Der Prototyp e<strong>in</strong>es<br />
RR ist <strong>der</strong> A-Record, bei dem e<strong>in</strong> voll qualifizierter Doma<strong>in</strong>name mit e<strong>in</strong>er IP-Adresse<br />
assoziiert ist.<br />
6 0.0.0.0 ist e<strong>in</strong>e spezielle Adresse zur DHCP-Anfrage
116 KAPITEL 8. DNS<br />
Wie bereits erwähnt wurde, ist es möglich e<strong>in</strong>em Host mehr als e<strong>in</strong>en Namen zuzuordnen<br />
(Alias<strong>in</strong>g). <strong>E<strong>in</strong></strong>er dieser Namen ist <strong>der</strong> offizielle Hostname, während alle weiteren nur Aliase<br />
s<strong>in</strong>d, die mit dem offiziellen Namen verknüpft werden. Der Unterschied <strong>in</strong> <strong>der</strong> <strong>E<strong>in</strong></strong>tragung<br />
liegt <strong>in</strong> <strong>der</strong> Bezeichnung: Der kanonische Hostname besitzt e<strong>in</strong>en A-Record, während die<br />
an<strong>der</strong>en nur e<strong>in</strong>en Record vom Typ CNAME verwenden.<br />
<strong>E<strong>in</strong></strong> Beispiele<strong>in</strong>trag für die Auflösung von Hostnamen nach IP-Nummern:<br />
; /etc/b<strong>in</strong>d/wg.site<br />
$TTL 360 ; 6 m<strong>in</strong>utes<br />
@ IN SOA ns.wg.site. dirk.wg.site. (<br />
2005011002 ; serial<br />
28800 ; refresh (8 hours)<br />
1800 ; retry (30 m<strong>in</strong>utes)<br />
3600000 ; expire (5 weeks 6 days \<br />
16 hours)<br />
86400 ; m<strong>in</strong>imum (1 day)<br />
)<br />
IN NS ns.wg.site.<br />
IN MX 10 mail.wg.site.<br />
IN MX 20 mail-backup.wg.site.<br />
ns IN A 10.8.4.25<br />
nameserver IN CNAME ns<br />
$TTL 86400 ; 1 day<br />
mail IN A 10.8.4.21<br />
mail-backup IN A 10.8.4.22<br />
anphrodite IN A 10.8.4.203<br />
dionysos IN A 10.8.4.204<br />
$TTL 360 ; 6 m<strong>in</strong>utes<br />
demeter IN A 10.8.4.251<br />
hermes IN A 10.8.4.252<br />
IN HINFO "AMD Opteron" "L<strong>in</strong>ux"<br />
IN TXT "WG-DNS for PE28"<br />
In den Zonendateien ist je<strong>der</strong> mit e<strong>in</strong>em Punkt ”.” endende Rechnername e<strong>in</strong> exakter Rechnername.<br />
Alles, was ohne den abschließenden Punkt geschrieben wird, bezieht sich auf den<br />
Ursprung (hier wg.site). Damit würde aus dem Namen ns.wg.site für BIND ns.wg.site.wg.site<br />
werden, sicherlich nicht die Intention des Zonenadm<strong>in</strong>s.<br />
hermes steht daher für ”hermes.Ursprung”. In <strong>der</strong> Beispielzonendatei ist wg.site. <strong>der</strong> Ursprung,<br />
damit wird aus hermes hermes.wg.site.<br />
<strong>E<strong>in</strong></strong> Beispiele<strong>in</strong>trag für die umgekehrte Auflösung:<br />
$TTL 360 ; 6 m<strong>in</strong>utes<br />
@ IN SOA ns.wg.site. dirk.goe.net. (<br />
2005011002 ; serial<br />
28800 ; refresh (8 hours)<br />
1800 ; retry (30 m<strong>in</strong>utes)<br />
3600000 ; expire (5 weeks 6 days 16 hours)<br />
86400 ; m<strong>in</strong>imum (1 day)<br />
)<br />
IN NS ns.wg.site.<br />
254 IN PTR ns.wg.site.<br />
$TTL 86400 ; 1 day<br />
21 IN PTR mail.wg.site.<br />
22 IN PTR mail-backup.wg.site.<br />
203 IN PTR aphrodite.wg.site.
8.3. DNS-SERVER MIT LINUX 117<br />
204 IN PTR dionysos.wg.site.<br />
$TTL 360 ; 6 m<strong>in</strong>utes<br />
251 IN PTR demeter.wg.site.<br />
252 IN PTR hermes.wg.site.<br />
TTL gibt die Lebensdauer aller <strong>E<strong>in</strong></strong>träge <strong>in</strong> <strong>der</strong> Zone an, die ke<strong>in</strong> ausdrückliches TTL<br />
besitzen, welches vor dem IN als Integer-Sekunden-Wert e<strong>in</strong>getragen werden würde.<br />
8.3.3 Starten und Anhalten des Nameservers<br />
Nachdem Sie Ihre Zonendateien für die Vorwärts- und Rückwärtsauflösung angelegt und<br />
diese <strong>in</strong> <strong>der</strong> named.conf(.local) e<strong>in</strong>getragen haben, steht nun <strong>der</strong> Start des Servers an:<br />
l<strong>in</strong>ux04:/etc/b<strong>in</strong>d# /etc/<strong>in</strong>it.d/b<strong>in</strong>d9 start<br />
Das Stoppen des Dienstes o<strong>der</strong> den Neustart regeln Sie entsprechend über ”stop” o<strong>der</strong><br />
”restart”. Eventuell auftretende Fehlermeldungen liefert named <strong>in</strong> <strong>der</strong> Datei /var/log/syslog<br />
ab. Hier überprüft man, ob alle Ihre Zonenfiles ohne Beschwerden akzeptiert wurden. Im<br />
Logfile liefert named Informationen auf welchen Interfaces er lauscht, wieviele Prozessoren er<br />
<strong>in</strong> Anspruch nimmt und welche Zonenfiles er erfolgreich e<strong>in</strong>gelesen hat. Wenn Sie den Dienst<br />
automatisch beim Hochfahren <strong>der</strong> Masch<strong>in</strong>e starten wollen, sollten Sie e<strong>in</strong>en entsprechenden<br />
L<strong>in</strong>k <strong>in</strong> den Runlevelverzeichnissen auf das Startskript /etc/<strong>in</strong>it.d/b<strong>in</strong>d9 anlegen.<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13692]: start<strong>in</strong>g BIND 9.2.4 -u b<strong>in</strong>d<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13692]: us<strong>in</strong>g 1 CPU<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: load<strong>in</strong>g configuration from<br />
’/etc/b<strong>in</strong>d/named.conf’<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: no IPv6 <strong>in</strong>terfaces found<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: listen<strong>in</strong>g on IPv4 <strong>in</strong>terface lo,<br />
127.0.0.1#53<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: listen<strong>in</strong>g on IPv4 <strong>in</strong>terface eth0,<br />
10.8.4.254#53<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: listen<strong>in</strong>g on IPv4 <strong>in</strong>terface eth0:1,<br />
192.168.1.2#53<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone ’wg.site’ allows updates by<br />
IP address, which is <strong>in</strong>secure<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone ’4.8.10.<strong>in</strong>-addr.arpa’ allows<br />
updates by IP address, which is <strong>in</strong>secure<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: command channel listen<strong>in</strong>g on<br />
127.0.0.1#953<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone 0.<strong>in</strong>-addr.arpa/IN: loaded<br />
serial 1<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone 4.8.10.<strong>in</strong>-addr.arpa/IN: loaded<br />
serial 2002100405<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone 127.<strong>in</strong>-addr.arpa/IN: loaded<br />
serial 1<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone 255.<strong>in</strong>-addr.arpa/IN: loaded<br />
serial 1<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone localhost/IN: loaded serial 1<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: zone wg.site/IN: loaded serial<br />
2002100405<br />
Feb 11 21:17:57 l<strong>in</strong>ux04 named[13694]: runn<strong>in</strong>g<br />
8.3.4 Slave-Server<br />
Bisher beschäftigte sich die Darstellung mit dem Aufsetzen e<strong>in</strong>es primären DNS und dem<br />
Anlegen <strong>der</strong> Zonen-Dateien. Wenn nicht lediglich e<strong>in</strong> privater DNS betrieben wird, sollte
118 KAPITEL 8. DNS<br />
man unbed<strong>in</strong>gt aus Gründen <strong>der</strong> Redundanz Slaves vorsehen. Hier fällt <strong>der</strong> Aufwand jedoch<br />
bedeutend ger<strong>in</strong>ger aus, da man lediglich die namd.conf.local anpassen muss. Trägt man hier<br />
alle Zonen e<strong>in</strong>, für die diese Masch<strong>in</strong>e als Slave zuständig se<strong>in</strong> soll.<br />
zone "wg.site" IN {<br />
type slave;<br />
masters { 10.8.4.254; };<br />
file /etc/named/secondary/db.wg.site;<br />
}<br />
Man starte den Slave neu, nachdem <strong>der</strong> Master bereits läuft. Damit alles klappt muss named<br />
im Verzeichnis /etc/named/secondary über Schreibrechte verfügen. Hier landen die Daten<br />
e<strong>in</strong>es erfolgreichen Doma<strong>in</strong>-Transfers. Im Logfile des Masters f<strong>in</strong>det sich e<strong>in</strong> H<strong>in</strong>weis auf<br />
diesen Vorgang:<br />
Feb 11 22:18:02 l<strong>in</strong>ux04 named[13722]: client 132.230.4.44#36606: transfer of<br />
’wg.site/IN’: AXFR started<br />
Anhand <strong>der</strong> Seriennummer <strong>der</strong> Datei stellt <strong>der</strong> Slave fest, ob sich Daten auf dem Server<br />
geän<strong>der</strong>t haben (sollten). Sie muss daher stets <strong>in</strong>krementiert werden, wenn e<strong>in</strong>e Än<strong>der</strong>ung<br />
vorgenommen wurde. Quasistandard ist e<strong>in</strong> JJJJMMTTRR-Format, um die Seriennummer<br />
festzulegen. 2005011002 steht also für den 10.01.2005, die beiden letzten Stellen für die<br />
zweite Modifikation <strong>der</strong> Zonendatei an diesem Tag. Nun ist diese Zahl oft nicht so übersichtlich,<br />
als dass man nicht versehentlich e<strong>in</strong>en Fehler macht und e<strong>in</strong>e Stelle zuviel dr<strong>in</strong> hat.<br />
Wenn die Slaves e<strong>in</strong>e solche Seriennummer übernommen haben und anschliessend auf dem<br />
Master wie<strong>der</strong> e<strong>in</strong>e korrigierte Nummer e<strong>in</strong>getragen ist, bekommen sie ke<strong>in</strong> Update mehr<br />
mit. Ihre Nummer ist immer größer als die des Masters. Um dieses Dilemma <strong>in</strong> den Griff<br />
zu bekommen, kann man den folgenden Trick anwenden: Man trage 2 31 −1 (=2147483647)<br />
e<strong>in</strong>. BIND arbeitet mit vorzeichenbehafteten 32 bit Zahlen. So ist diese <strong>der</strong> größtmögliche<br />
Wert und <strong>in</strong> <strong>der</strong> nächsten Runde wird wie<strong>der</strong> jede beliebige Seriennummer von den Slaves<br />
als Grund für e<strong>in</strong> Update akzeptiert.<br />
In den Beispielen wurde e<strong>in</strong>e strenge Trennung von Master- und Slave-Servern angenommen.<br />
Das muss natürlich <strong>in</strong> <strong>der</strong> Realität nicht so se<strong>in</strong>. Hier s<strong>in</strong>d viele Server authoritativ<br />
für e<strong>in</strong>e Reihe von Zonen und sekundär für e<strong>in</strong>e Anzahl an<strong>der</strong>er Zonen.<br />
8.3.5 Delegation e<strong>in</strong>er Subdoma<strong>in</strong><br />
In den bisherigen Beispielen stimmte e<strong>in</strong>e Zone immer mit e<strong>in</strong>er Doma<strong>in</strong> übere<strong>in</strong>. <strong>E<strong>in</strong></strong> Nameserver<br />
war für den gesamten Namensraum zuständig. Dieser war e<strong>in</strong>fach strukturiert:<br />
masch<strong>in</strong>enname.doma<strong>in</strong>.topleveldoma<strong>in</strong>, z.B. hermes.wg.site. Nun erlaubt DNS aber Teile<br />
se<strong>in</strong>es Namensraumes an an<strong>der</strong>e Nameserver zu delegieren. So können Adm<strong>in</strong>s bestimmter<br />
organisatorischer <strong>E<strong>in</strong></strong>heiten ”ihre” Zone verwalten. Mit folgendem <strong>E<strong>in</strong></strong>trag <strong>in</strong> <strong>der</strong> Zonendatei<br />
des Beispiels (/etc/b<strong>in</strong>d/db.wg.site) delegiert <strong>der</strong> Nameserver die Zone, <strong>in</strong> diesem Fall<br />
die Subdoma<strong>in</strong> sub.wg.site an die Server ns1.sub.wg.site und ns2.sub.wg.site.<br />
[ ... ]<br />
sub IN NS ns1.sub.wg.site.<br />
IN NS ns2.sub.wg.site.<br />
ns1.sub IN A 10.8.5.1<br />
ns2.sub IN A 10.8.5.2<br />
[ ... ]<br />
Der Resource-Record NS regelt die Delegation. Damit weiss <strong>der</strong> Nameserver, dass Anfragen<br />
auf *.sub.wg.site an die dafür zuständigen Server ns1 und ns2.sub.wg.site weitergereicht<br />
werden. Deren Namen müssen natürlich ebenfalls zu IP-Adressen aufgelöst werden können.<br />
Deshalb s<strong>in</strong>d die beiden Nameserver ebenfalls mit e<strong>in</strong>em A-Record vertreten.
8.4. DYNAMISCHE UPDATES DER ZONENDATEIEN 119<br />
8.4 Dynamische Updates <strong>der</strong> Zonendateien<br />
Mit steigen<strong>der</strong> Anzahl verwalteter Zonen und Hosts wird das Verfahren <strong>der</strong> händischen<br />
Manipulation <strong>der</strong> Zonendateien für Adm<strong>in</strong>s schnell aufwändig. Nebenher hat sich die Zahl<br />
mobiler Endgeräte deutlich ausgeweitet. Das s<strong>in</strong>d Hosts, die oft <strong>in</strong> verschiedenen Netzen<br />
betrieben. Zudem s<strong>in</strong>d sie oft nicht sehr lange angemeldet. Hier wünscht man sich e<strong>in</strong><br />
Verahren, was ähnlich zu WINS dynamisch arbeitet.<br />
Mit BIND seit Version 8 kann man dynamische Än<strong>der</strong>ungen an den Resource Records<br />
vornehmen (lassen), ohne dafür Dateien editieren und diese neu laden zu müssen. Solche<br />
Än<strong>der</strong>ungen können auch durch externe Dienste, wie DHCP angestoßen werden. Um dieses<br />
zu erlauben, muss <strong>der</strong> Adm<strong>in</strong> e<strong>in</strong>e zusätzliche Zeile <strong>in</strong> die Zonendef<strong>in</strong>ition e<strong>in</strong>fügen:<br />
zone "wg.site." IN {<br />
...<br />
allow update { 172.0.0.1; };<br />
}<br />
Im Beispiel ist nur das Update von <strong>der</strong> Loopbackadresse erlaubt. Man kann natürlich auch<br />
Listen von IP-Adressen o<strong>der</strong> ACLs angeben. Dabei ist jedoch zu beachten, dass bei <strong>der</strong><br />
Datenübertragung über das Netz DNS nicht automatisch verschlüsselt. Wie man dieses<br />
e<strong>in</strong>schaltet, wird im folgenden Abschnitt erklärt.<br />
Um das neue Feature gleich mal auszuprobieren, kann nsupdate verwendet werden.<br />
Dieses Programm ist im BIND-Paket enthalten. Es arbeitet <strong>in</strong>teraktiv ähnlich wie nslookup.<br />
Man gebe zuerst den DNS-Server an und dann e<strong>in</strong>en <strong>E<strong>in</strong></strong>trag <strong>der</strong> h<strong>in</strong>zugefügt o<strong>der</strong><br />
gelöscht werden soll. Nach dem <strong>E<strong>in</strong></strong>trag ist e<strong>in</strong> zweimaliges ”Enter” erfor<strong>der</strong>lich.<br />
l<strong>in</strong>ux:~ > nsupdate<br />
> server 127.0.0.1<br />
> update add newhost.wg.site 300 A 10.8.4.51<br />
><br />
> update delete newhost.sg.site 300 A 10.8.4.51<br />
Damit die ganze Geschichte auch funktioniert, muss <strong>der</strong> Nameserver das Recht haben das<br />
Verzeichnis <strong>der</strong> Zonendateien und diese selbst zu schreiben. Im Beispiel wurde e<strong>in</strong>e Datei<br />
/etc/b<strong>in</strong>d/db.wg.site.jnl beim H<strong>in</strong>zufügen e<strong>in</strong>es <strong>E<strong>in</strong></strong>trages angelegt. Alle 15 M<strong>in</strong>uten macht<br />
BIND e<strong>in</strong>en Dump <strong>der</strong> Zonendatei mit den neuen o<strong>der</strong> ohne die zwischendurch entfernten<br />
<strong>E<strong>in</strong></strong>träge und erhöht dabei die Seriennummer automatisch.<br />
8.4.1 Sicherheit<br />
Wie man im Beispiel sehen konnte, benötigte nsupdate ke<strong>in</strong>e beson<strong>der</strong>e Authentifizierung,<br />
um Än<strong>der</strong>ungen an den DNS-Daten vorzunehmen. <strong>E<strong>in</strong></strong>e Absendeadresse ist leicht<br />
zu fälschen, weshalb man sich schnell e<strong>in</strong>en besseren Schutz wünscht. Ebenfalls will ke<strong>in</strong><br />
Adm<strong>in</strong>istrator ernsthaft, dass je<strong>der</strong> beliebige Host im Internet vom eigenen DNS e<strong>in</strong> Zonentransfer<br />
anfor<strong>der</strong>n kann. Dieser ist normalerweise den Slaves vorbehalten, um ihre Daten<br />
zu aktualisieren.<br />
Ebenfalls seit Version 8 implementiert BIND zur Erhöhung <strong>der</strong> Sicherheit sogenannte<br />
Transaction Signatures (TSIGs). Dieses s<strong>in</strong>d digitale Signaturen, die HMAC-MD5 als<br />
<strong>E<strong>in</strong></strong>wege-Hashfunktionen benutzt. Die Signatur ist dabei nicht nur von <strong>der</strong> Nachricht, son<strong>der</strong>n<br />
auch von e<strong>in</strong>em Schlüssel abhängig. Der Hashwert wird über die komplette b<strong>in</strong>äre<br />
Nachricht berechnet und als Resource Record (Typ TSIG) angehängt. Zur Verh<strong>in</strong><strong>der</strong>ung<br />
von Replay-Attacken ist das Datum Bestandteil <strong>der</strong> Signatur.
120 KAPITEL 8. DNS<br />
Das Bastelset zum Erzeugen <strong>der</strong> Schlüssel liefert BIND mit dnssec-keygen. Der Aufruf<br />
dnssec-keygen -b 128 -a HMAC-MD5 -n HOST hermes.wg.site generiert e<strong>in</strong>en 128bit-<br />
Schlüssel, <strong>der</strong> genau e<strong>in</strong>er Masch<strong>in</strong>e zugeordnet ist.<br />
l<strong>in</strong>ux04:~# dnssec-keygen -b 128 -a HMAC-MD5 -n HOST hermes.wg.site<br />
Khermes.wg.site.+157+23873<br />
l<strong>in</strong>ux04:~# ls Khermes.wg.site.+157+23873.*<br />
Khermes.wg.site.+157+23873.key Khermes.wg.site.+157+23873.private<br />
l<strong>in</strong>ux04:~# cat Khermes.wg.site.+157+23873.key<br />
hermes.wg.site. IN KEY 512 3 157 ynhDhu8MM0vNsdWivlTFow==<br />
l<strong>in</strong>ux04:~# cat Khermes.wg.site.+157+23873.private<br />
Private-key-format: v1.2<br />
Algorithm: 157 (HMAC_MD5)<br />
Key: ynhDhu8MM0vNsdWivlTFow==<br />
Das Kommando legt zwei Dateien im Arbeitsverzeichnis an. In <strong>der</strong> Datei mit <strong>der</strong> Endung<br />
*.key f<strong>in</strong>det man den öffentlichen Schlüssel <strong>in</strong> <strong>der</strong> an<strong>der</strong>en *.private den privaten. Den<br />
öffentlichen Schlüssel läßt sich nun <strong>in</strong> die entsprechende Zonendatei <strong>in</strong>tegrieren. So kann er<br />
beispielsweise mit host -t KEY hermes.wg.site abgefragt und zur Verifikation des privaten<br />
Schlüssels herangezogen werden. Den privaten Schlüssel h<strong>in</strong>terlegt man <strong>in</strong> <strong>der</strong> Datei<br />
mit den Zonendef<strong>in</strong>itionen /etc/b<strong>in</strong>d/named.conf.local:<br />
key hermes.wg.site. {<br />
algorithm hmac-md5;<br />
secret "Geq/RRYhuAIrlUzJKj49MQ==";<br />
};<br />
und sorgen dafür, dass nur noch e<strong>in</strong> Update unter Angabe des Schlüssels erfolgen darf:<br />
zone "wg.site" <strong>in</strong> {<br />
type master;<br />
file "/etc/b<strong>in</strong>d/db.wg.site";<br />
allow-update { key hermes.wg.site.; };<br />
};<br />
Nach den Än<strong>der</strong>ungen muss <strong>der</strong> Server neu gestartet werden. Ausprobieren kann man das<br />
Ganze nun mit dem Aufruf von nsupdate mit <strong>der</strong> Angabe <strong>der</strong> Datei mit dem privaten<br />
Schlüssel: nsupdate -k Khermes.wg.site.+157+23873.private Die Transaktionen werden<br />
nun mit dem<br />
Schlüssel signiert. Ohne Angabe des Schlüssels würde die Aktion mit e<strong>in</strong>em ”REFUSED”<br />
fehlschlagen.<br />
nsupdate ist sicherlich nicht die alltägliche Anwendung. Bei den Fragen <strong>der</strong> Sicherheit<br />
geht es eher um Zonentransfers. Hierzu muss <strong>der</strong> private Schlüssel sowohl auf dem Masterals<br />
auch auf dem Slave-DNS-Server e<strong>in</strong>getragen se<strong>in</strong>. Für Zonentransfers heisst die Option<br />
statt ”allow-update” ”allow-transfer” unter Beibehaltung <strong>der</strong> restlichen Syntax. Auf dem<br />
Slave sehen die <strong>E<strong>in</strong></strong>tragungen nun wie folgt aus:<br />
key hermes.wg.site. {<br />
algorithm hmac-md5;<br />
secret "Geq/RRYhuAIrlUzJKj49MQ==";<br />
};<br />
server 10.8.4.254 {<br />
keys { hermes.wg.site.; };<br />
};<br />
zone "wg.site" IN {<br />
type slave;<br />
masters { 10.8.4.254; };<br />
file /etc/named/secondary/db.wg.site;<br />
}
8.5. DNS BEKOMMT NEUE AUFGABEN 121<br />
8.5 DNS bekommt neue Aufgaben<br />
8.5.1 ENUM<br />
Voice-over-IP hat im zweiten Anlauf nach den ersten Startversuchen Ende <strong>der</strong> 90er Jahre<br />
richtig Schwung bekommen. Spätestens seit <strong>der</strong> letzten Cebit 2004 hat <strong>der</strong> Hype um die Telefonie<br />
über das Internet die breite Öffentlichkeit erreicht. Nun waren Telefonie und IP-Netze<br />
lange Zeit zwei völlig getrennte Dienste, e<strong>in</strong> Zustand mit dem große Telefonie-Anbieter, wie<br />
die Telekom gut leben konnten. Wärend im H<strong>in</strong>tergrund beide Dienste konvergieren, steht<br />
nach aussen noch e<strong>in</strong> entscheiden<strong>der</strong> Unterschied: International erreicht man jeden Teilnehmer<br />
am öffentlichen Telefonnetz über die 1-3 stellige Län<strong>der</strong>vorwahl gefolgt von e<strong>in</strong>er<br />
maximal 15-stelligen nationale Telefonnummer. Letztere besteht aus e<strong>in</strong>er Vorwahl und<br />
Anschlußnummer, wobei das Vorwahlkonzept <strong>in</strong> unterschiedlichen Län<strong>der</strong>n verschieden gehandhabt<br />
wird. Rechner im Internet werden h<strong>in</strong>gegen durch ihre weltweit e<strong>in</strong>deutige IP<br />
angesprochen.<br />
ENUM schlägt hier nun die Brücke und führt beide Systeme unter Zurhilfenahme von<br />
DNS zusammen. Def<strong>in</strong>iert ist die Abbildung von Telefonnummern im Doma<strong>in</strong> Name System<br />
<strong>in</strong> RFC2916 zu ENUM E.164. ENUM kann noch mehr, nämlich beliebige Kommunikationsformen<br />
(Mail, Webseite, ...) auf e<strong>in</strong>e Telefonnummer abbilden und diese hierarchisch<br />
anordnen. DNS ist deshalb für ENUM <strong>in</strong>teressant, da es seit Jahren etabliert ist und damit<br />
e<strong>in</strong>e schnelle Umsetzung erlaubt.<br />
Die Vergabe von Telefonnummern ist <strong>in</strong> jedem Land e<strong>in</strong> hoheitlicher Akt, <strong>in</strong> Deutschland<br />
übernimmt das die Regulierungsbehörde für Telekommunikation. Sie hatte beispielsweise<br />
Ende letzten Jahres mit <strong>der</strong> Entscheidung über die ortsunhabhängige Vorwahl 032 für SIP-<br />
Telefonanschlüsse von sich hören lassen.<br />
Damit Telefonnummern im DNS-System darstellbar s<strong>in</strong>d, werden sie <strong>in</strong> e<strong>in</strong>e e<strong>in</strong>deutige<br />
Doma<strong>in</strong> verwandelt. Hierzu wurde die Doma<strong>in</strong> ”e164.arpa” e<strong>in</strong>geführt analog zu ihrem IP-<br />
Pendant ”<strong>in</strong>-addr.arpa” <strong>der</strong> Reverse-Auflösung. Unterhalb dieser Doma<strong>in</strong> trägt man nun<br />
e<strong>in</strong>fach Subdoma<strong>in</strong>s für jede Ziffer e<strong>in</strong>er Telefonnummer e<strong>in</strong>. An<strong>der</strong>s als bei IP-Adressen<br />
und Telefonnummern steht bei DNS die spezifischte Information ganz l<strong>in</strong>ks: Die Toplevel-<br />
Doma<strong>in</strong> ist immer die ganz rechte, die Secondlevel-Doma<strong>in</strong> die zweite von Rechts und<br />
Subdoma<strong>in</strong>s s<strong>in</strong>d dann weitere bis <strong>der</strong> Rechnername ganz l<strong>in</strong>ks kommt.<br />
Deshalb dreht man die die Telefonnummer um. So wird aus +49-551-654321 e<strong>in</strong> <strong>E<strong>in</strong></strong>trag<br />
<strong>der</strong> Form 1.2.3.4.5.6.1.5.5.9.4.e164.arpa.<br />
1. Zunächst entferne man alle optischen Strkturierungen, wie ”+”, ”-”, Leerzeichen:<br />
49551654321<br />
2. Man ordne die Ziffernfolge um: Aus 49551654321 erhält man 12345615594<br />
3. Man setze Punkte zwischen die Ziffern: 1.2.3.4.5.6.1.5.5.9.4<br />
4. Am Ende fügt man noch die ENUM-Doma<strong>in</strong> ”e164.arpa” an: 1.2.3.4.5.6.1.5.5.9.4.<br />
e164.arpa<br />
Den nun generierten vollständigen Doma<strong>in</strong>namen kann DNS nun ganz normal wie e<strong>in</strong>e<br />
IP auch im Nameservicebetrieb verwenden. RFC2915 def<strong>in</strong>iert für das ENUM-Protokoll<br />
spezielle Nameserver-<strong>E<strong>in</strong></strong>träge, um auf die e<strong>in</strong>zelnen Kommunikationsadressen (Telefon,<br />
Mail...) zu verweisen. Zum <strong>E<strong>in</strong></strong>satz kommen sogenannte ”Nam<strong>in</strong>g Authority Po<strong>in</strong>ter Records”<br />
(NAPTR). Für jede Doma<strong>in</strong> lassen sich mehrere dieser NAPTR-<strong>E<strong>in</strong></strong>träge angeben.<br />
Sie erlauben ebenfalls Prioritäten (Preferenzen) festzulegen.
122 KAPITEL 8. DNS<br />
Mit ENUM än<strong>der</strong>t sich <strong>der</strong> Charakter e<strong>in</strong>es Anrufes grundsätzlich: Zunächst wird über<br />
das DNS-System die Telefonnummer bis zum NAPTR-<strong>E<strong>in</strong></strong>trag ermittelt. Diese weist dann<br />
auf e<strong>in</strong>e Nummer e<strong>in</strong>es Telefons o<strong>der</strong> Faxes, e<strong>in</strong>es Handys o<strong>der</strong> weiterer Geräte. ENUM gestattet<br />
so dem Inhaber e<strong>in</strong>er Telefonnummer, quasi beliebig viele Dienste auf se<strong>in</strong>e Nummer<br />
abzubilden. Das vere<strong>in</strong>facht <strong>in</strong> Zukunft das Verfahren alternative Dienste durch Telekommunikationsendgeräte<br />
und ¿Applikationen anzusprechen.<br />
8.5.2 IPv6<br />
Die nächste Generation <strong>der</strong> IP-Adressen steht schon länger vor <strong>der</strong> Tür. Für den Endbenutzer<br />
sicherlich noch nicht relevant, so tut sich jedoch schon h<strong>in</strong>ter den Kulissen e<strong>in</strong>iges.<br />
Entsprechend schreitet auch die Auf- und Umrüstung <strong>der</strong> IP-Dienste auf IPv6 voran. So ist<br />
BIND seit e<strong>in</strong>iger Zeit <strong>in</strong> <strong>der</strong> Lage IPv6-Adressen genauso wie Ihre IPv4-Pendants vorwärts<br />
und rückwärts aufzulösen. Für IPv6 wurde e<strong>in</strong> neuer Ressourcentyp e<strong>in</strong>geführt: AAAA repräsentiert<br />
e<strong>in</strong>e IPv6 Adresse (A entsprach 32bit, 4*A entsprechend 128bit).<br />
<strong>E<strong>in</strong></strong>träge <strong>in</strong> <strong>der</strong> Zonen-Datei zur Vorwärtsauflösung könnten also so aussehen:<br />
[ ... ]<br />
aphrodite IN A 10.8.4.203<br />
aphrodite-ipv6 IN AAAA 3ffe:701:10:200:22:feb5:3456<br />
dionysos IN A 10.8.4.204<br />
dionysos-ipv6 IN AAAA 3ffe:701:10:200:22:feb5:3457<br />
Die Rückwärtsauflösung landet <strong>in</strong> e<strong>in</strong>er eigenen Zonendatei (beispielsweise 5.b.e.f.2.2.0.0.<br />
0.0.2.0.0.1.0.0.4.e.f.f.3.ip6.arpa):<br />
[ ... ]<br />
3456 IN PTR aphrodite-ipv6.wg.site.<br />
3457 IN PTR dionysos-ipv6.wg.site.<br />
<strong>E<strong>in</strong></strong> Problem entsteht nun natürlich bei <strong>der</strong> Auflösung von Namen zu IP: Welche Informationen<br />
sollen zurückgeliefert werden: Beide IP-Adressen o<strong>der</strong> jeweils die e<strong>in</strong>e o<strong>der</strong> an<strong>der</strong>e?<br />
Darüberh<strong>in</strong>aus gibt es noch e<strong>in</strong>ige weitere Stolperfallen: Angenommen, man betreibt e<strong>in</strong>e<br />
Masch<strong>in</strong>e ausschliesslich mit e<strong>in</strong>er IPv6 Adresse. Dann lässt sich nicht e<strong>in</strong>fach im Resolver<br />
e<strong>in</strong>e IPv4 Adresse für den Nameserver angeben. Die Masch<strong>in</strong>e wäre <strong>in</strong> den meisten<br />
Fällen nicht <strong>in</strong> <strong>der</strong> Lage ihre Anfragepakete dorth<strong>in</strong> zu routen. Der IPv4 DNS Ihres Netzes<br />
kann aber Proxy-Funktionen übernehmen. Er lauscht nicht nur wie gewohnt auf den<br />
IPv4-Interfaces son<strong>der</strong>n bekommt auch e<strong>in</strong>e IPv6-Adresse zugeteilt, die von den Clients im<br />
eigenen Netz erreicht werden kann. Der Server empfängt dann die Anfragen vom Client<br />
über das IPv6-Interface und holt se<strong>in</strong>erseits Erkundigungen über das klassische IPv4 Netz<br />
e<strong>in</strong>.<br />
8.5.3 DNS als Bannerfilter<br />
Wie sehr es auf e<strong>in</strong>en funktionierenden Nameservice ankommt, sieht man, wenn man e<strong>in</strong>fach<br />
mal e<strong>in</strong>e häufig benutzte Doma<strong>in</strong> falsch auflöst. Wenn man im eigenen LAN e<strong>in</strong>en DNS<br />
betreibt, den alle Masch<strong>in</strong>en benutzen (müssen), kann man diesen für alle möglichen Zonen<br />
als authoritativ deklarieren. Hierzu trägt man e<strong>in</strong>fach e<strong>in</strong>e Zone für die entsprechende<br />
Doma<strong>in</strong> nach und verweisen auf e<strong>in</strong> dafür speziell def<strong>in</strong>iertes Master-File.<br />
zone "google.de" <strong>in</strong> {<br />
type master;<br />
file "master/empty.zone";<br />
};
8.6. AUFGABEN 123<br />
zone "falkag.de" <strong>in</strong> {<br />
type master;<br />
file "master/empty.zone";<br />
};<br />
zone "doubleclick.net" <strong>in</strong> {<br />
type master;<br />
file "master/empty.zone";<br />
};<br />
Dabei spielt es überhaupt ke<strong>in</strong>e Rolle, wenn alle diese Zonen die identische Datei benutzen.<br />
In dieser wird lediglich dafür gesorgt, dass auf jede Anfrage e<strong>in</strong>e 127.0.0.1 zurückgeliefert<br />
wird.<br />
; NULL Zone File for Ad Servers and other unwanted services ;<br />
@ IN SOA mydoma<strong>in</strong>.site. me.mydoma<strong>in</strong>.site. (<br />
131 ; serial number<br />
28800 ; refresh<br />
1800 ; retry<br />
432000 ; expire<br />
18000 ) ; m<strong>in</strong>imum TTL<br />
; Zone NS records<br />
@ NS mydoma<strong>in</strong>.site.<br />
A 127.0.0.1<br />
* IN A 127.0.0.1<br />
Das Beispiel zeigt die Nutzung e<strong>in</strong>es Wildcards ”*”. Es muss nicht für jeden Namen e<strong>in</strong><br />
<strong>E<strong>in</strong></strong>trag existieren, diese können so e<strong>in</strong>fach zusammengefaßt werden.<br />
Wenn man den Nameserver beispielsweise für doubleclick.net authoritativ macht, dann<br />
schlägt das Laden aller Banner und Webbugs fehl, die als Quelle e<strong>in</strong>e Masch<strong>in</strong>e dieser<br />
Doma<strong>in</strong> angeben. Je nach Browser können dann e<strong>in</strong>ige Seiten etwas verän<strong>der</strong>t aussehen, da<br />
plötzlich Seitenelemente von denen man nie vermutet hätte, dass sie von extern kommen,<br />
fehlen. Dies ist ke<strong>in</strong> Allheilmittel. Je<strong>der</strong> Anbieter kann natürlich statt e<strong>in</strong>es FQDN auch<br />
e<strong>in</strong>e IP <strong>in</strong> se<strong>in</strong>e Webadressen schreiben. Trotzdem ist es e<strong>in</strong> recht e<strong>in</strong>faches probates Mittel,<br />
um se<strong>in</strong>e Datenspur bei sehr großen Diensteanbietern e<strong>in</strong>fach zu reduzieren. Es zeigt aber<br />
auch, dass wenn die wenigen zentralen Root-Server nicht erreichbar s<strong>in</strong>d, nicht mehr viel<br />
funktionieren würde.<br />
8.6 Aufgaben<br />
8.6.1 Rechnernamen im Internet<br />
1. Welche Aufgabe hat <strong>der</strong> DNS?<br />
2. Warum kann man nicht e<strong>in</strong>fach bei <strong>der</strong> alten /etc/hosts als e<strong>in</strong>fache Zuordnung zwischen<br />
IP und Hostnamen bleiben?<br />
3. Warum kann man zwar auf <strong>der</strong> lokalen Masch<strong>in</strong>e den Hostnamen än<strong>der</strong>n; es hat aber<br />
ke<strong>in</strong>e Auswirkungen für alle an<strong>der</strong>en Rechner?<br />
4. Man än<strong>der</strong> den Hostnamen! Wo müsste die dauerhafte Än<strong>der</strong>ung e<strong>in</strong>getragen se<strong>in</strong>?<br />
Man än<strong>der</strong>e nun e<strong>in</strong>en <strong>E<strong>in</strong></strong>trag für e<strong>in</strong>en Rechner <strong>in</strong> <strong>der</strong> /etc/hosts, warum kann man
124 KAPITEL 8. DNS<br />
diesen Rechner nun unter dem neuen Namen anp<strong>in</strong>gen, obwohl <strong>der</strong> “Besitzer” dieses<br />
Rechners den Namen nicht geän<strong>der</strong>t hat?<br />
5. Wo trägt man auf e<strong>in</strong>em L<strong>in</strong>uxrechner die IP-Nummern von Nameservern e<strong>in</strong>? Warum<br />
kann man da nicht e<strong>in</strong>fach den Namen des (Nameserver-)Rechners e<strong>in</strong>tragen?<br />
6. Warum macht es S<strong>in</strong>n, mehrere DNS-Server e<strong>in</strong>zutragen? Wo trägt man diese e<strong>in</strong>?<br />
8.6.2 Doma<strong>in</strong> Name Service (DNS)<br />
1. Was ist e<strong>in</strong>e sogenannte Toplevel-Doma<strong>in</strong>? Welche gibt es traditionell, welche s<strong>in</strong>d<br />
erst <strong>in</strong> jüngerer Zeit h<strong>in</strong>zugekommen?<br />
2. Wor<strong>in</strong> besteht <strong>der</strong> Unterschied zwischen DNS Resolver und DNS Nameserver?<br />
3. Welche Resource Records (RR) gibt es? Welche Bedeutung haben diese jeweils?<br />
8.6.3 DNS Server<br />
1. Wor<strong>in</strong> unterscheiden sich rekursive und iterative Namensauflösung? Warum antworten<br />
die Root-Nameserver immer nur iterativ? Mit welchem Kommando kann man das<br />
geschil<strong>der</strong>te Phänomen am besten nachvollziehen?<br />
2. Wieviele Root-Nameserver gibt es? Wo stehen diese? Wodurch ist <strong>der</strong>en Zahl begrenzt?
Kapitel 9<br />
Webserver<br />
Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur e<strong>in</strong>e Teilmenge <strong>der</strong><br />
TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache<br />
des mo<strong>der</strong>nen WWW.<br />
Der für den Anwen<strong>der</strong> sichtbare Vorgang des Abrufs e<strong>in</strong>es Dokuments besteht <strong>in</strong> <strong>der</strong><br />
Regel aus <strong>der</strong> <strong>E<strong>in</strong></strong>gabe e<strong>in</strong>er URI o<strong>der</strong> dem Anklicken e<strong>in</strong>es L<strong>in</strong>ks, gefolgt von <strong>der</strong> Darstellung<br />
<strong>der</strong> Daten o<strong>der</strong> e<strong>in</strong>er Fehlermeldung. Diese e<strong>in</strong>fache Art und Weise <strong>der</strong> Benutzung hat<br />
viel zur breiten Akzeptanz des Internets beigetragen.<br />
9.1 Überblick<br />
Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll <strong>der</strong><br />
Applikationsschicht HTTP spielen e<strong>in</strong>ige Bezeichnungen e<strong>in</strong>e Rolle:<br />
• Ressource - ist die Quelle e<strong>in</strong>es Web<strong>in</strong>halts, <strong>der</strong> durch e<strong>in</strong>e URI identifiziert werden<br />
kann. Der e<strong>in</strong>fachste Typ <strong>der</strong> Ressource ist e<strong>in</strong>e statische Datei im Filesystem des<br />
Web-Servers. Typ und Inhalt <strong>der</strong> Datei s<strong>in</strong>d beliebig. Außerdem kann die Ressource<br />
auch e<strong>in</strong> Programm se<strong>in</strong>, welches bei Aufruf e<strong>in</strong>en bestimmten Inhalt generiert und<br />
ausliefert.<br />
• URI - Uniform Resource Identifier bezeichnet den weltweit e<strong>in</strong>deutigen Name für e<strong>in</strong>e<br />
Ressource. z.B http://www.goe.net/<strong>in</strong>dex.php)<br />
• URL - Uniform Resource Locator ist e<strong>in</strong>e Unterart von URI, lokaler Name für die<br />
Ressource, sie bleiben anhand ihres Pfades vone<strong>in</strong>an<strong>der</strong> unterscheidbar.<br />
• URN - Uniform Ressource Name, e<strong>in</strong> spezialer Typ von URI, auch weltweiter e<strong>in</strong>deutig.<br />
z.B. urn:isbn:0-596-00962-3<br />
Die Enwicklung des WWW begann mit HTTP/0.9, e<strong>in</strong>er Prototyp-Version, die von Tim<br />
Berners-Lee am CERN <strong>in</strong> den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich<br />
die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard<br />
wurde. Es kamen Versionsnummern, HTTP-Hea<strong>der</strong>, zusätzliche Methoden (Head, Post, DE-<br />
LETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten h<strong>in</strong>zu. Das Nachrichtenformat<br />
von Antworten und Anfragen wird genauer spezifiziert.<br />
HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich<br />
jedoch nur um e<strong>in</strong>e rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen<br />
wird und <strong>der</strong> Server sich dem Client gegenüber nicht authentifizieren kann.<br />
125
126 KAPITEL 9. WEBSERVER<br />
Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich<br />
auf die Korrektur <strong>der</strong> Designfehler, das Spezifizieren von Semantik, e<strong>in</strong>igen Performace-<br />
Optimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Antworten<br />
pro TCP-Verb<strong>in</strong>dung gesendet werden. Für e<strong>in</strong> HTML-Dokument mit e<strong>in</strong>gebetteten<br />
Bil<strong>der</strong>n wird so nur e<strong>in</strong>e TCP-Verb<strong>in</strong>dung benötigt, wo vorher für jede Resource<br />
e<strong>in</strong>e separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads<br />
fortgesetzt werden. Über Cookies <strong>in</strong> den Hea<strong>der</strong>-Informationen können Anwendungen realisiert<br />
werden, die Status<strong>in</strong>formationen (Benutzere<strong>in</strong>träge, ...) zuordnen können. Dadurch<br />
können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfor<strong>der</strong>n, realisiert werden.<br />
Auch e<strong>in</strong>e Benutzerauthentifizierung ist möglich. Die Methoden s<strong>in</strong>d auch weiter entwickelt.<br />
HTTP/1.1 bietet e<strong>in</strong>e TRACE-Methode, mit <strong>der</strong> man den Weg zum Webserver<br />
überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver<br />
über die verschiedenen Proxies h<strong>in</strong>weg zu ermitteln, e<strong>in</strong> Traceroute auf Anwendungsebene.<br />
HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen<br />
und Entwicklungen, die <strong>in</strong> den späten neunziger Jahren waren.<br />
9.2 HTTP-Kommunikation<br />
user@l<strong>in</strong>ux02:~> telnet 10.30.4.100 81<br />
Try<strong>in</strong>g 10.30.4.100...<br />
Connected to 10.30.4.100<br />
Escape character is ’^]’.<br />
GET /hallo.html HTTP/1.1<br />
Host 0.30.4.100:81<br />
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"<br />
"http://www.w3.org/TR/html4/loose.dtd"><br />
<br />
<br />
Test-Seite<br />
<br />
<br />
Hauptüberschrift <br />
<br />
Connection closed by foreign host.<br />
Zwischen GET- und POST-Anfragen bestehen folgende wesentliche Unterschiede: Bei<br />
<strong>der</strong> GET-Methode werden die übergebenen Daten <strong>in</strong> die URL e<strong>in</strong>kodiert und s<strong>in</strong>d somit<br />
für jeden sofort lesbar, e<strong>in</strong> Beispiel s<strong>in</strong>d Suchanfragen bei Google:<br />
http://www.google.de/search?q=http+get+post&start=0&start=0&ie=\<br />
utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:de-DE:official<br />
Bei POST werden die Daten im Hea<strong>der</strong> übergeben. Dabei lassen sich wesentlich mehr Daten<br />
übergeben als <strong>in</strong> e<strong>in</strong>er GET-Anfrage. Das Versenden <strong>der</strong> Daten an den Server geschieht<br />
für den Nutzer auf den ersten Blick sche<strong>in</strong>bar unsichtbar. <strong>E<strong>in</strong></strong> wesentlich größerer Unterschied<br />
ist allerd<strong>in</strong>gs, dass GET-Anfragen idempotent s<strong>in</strong>d, was bedeutet, das sich die Seite<br />
aufgrund e<strong>in</strong>er GET-Anfrage nicht än<strong>der</strong>t. Daraus ergibt sich auch, dass solche Seiten im<br />
Cache angelegt werden können. Mit POST-Seiten ist es jedoch genau an<strong>der</strong>sherum, diese<br />
s<strong>in</strong>d nicht idempotent und werden deshalb nicht im Cache abgelegt.
9.3. WAS IST EIN WEBSERVER? 127<br />
9.3 Was ist e<strong>in</strong> Webserver?<br />
<strong>E<strong>in</strong></strong> Server ist e<strong>in</strong> Programm, das bestimmte Anfragen auf e<strong>in</strong>em bestimmten Port annimmt<br />
und verarbeitet.<br />
<strong>E<strong>in</strong></strong> Webserver liefert Dateien aus bestimmten Verzeichnissen (mit <strong>der</strong> Angabe von welchem<br />
Type 1 diese Dateien s<strong>in</strong>d) über <strong>Netzwerk</strong> aus. Unter Umständen wird bei <strong>der</strong> Entscheidung,<br />
welche Dateien ausgeliefert werden, nach <strong>der</strong> angefragten Adresse unterschieden.<br />
Grundsätzlich wird auf die Anfrage http://host.doma<strong>in</strong>/directory/example.html<br />
mit <strong>der</strong> Auslieferung von “Content-Type Text-html” und dem Inhalt <strong>der</strong> Datei:<br />
/usr/local/httpd/htdocs/directory/example.html 2<br />
von dem Webserver auf host.doma<strong>in</strong> reagiert.<br />
9.4 Apache 2<br />
Der Apache 2 ist <strong>der</strong> weltweit meist-verbreitete Webserver. <strong>E<strong>in</strong></strong> Kernbestandteil des Erfolges<br />
ist die Tatsache, dass Apache e<strong>in</strong> Open-Source-Projekt ist. Der Aufbau ist modular, d.h. <strong>der</strong><br />
Webserver hat e<strong>in</strong>en schlanken Kern, welcher die Grundfunktionalität enthält und Erweiterungen<br />
können zusätzlich e<strong>in</strong>gebunden werden (teilweise mit und teilweise ohne Neustart<br />
des Apache).<br />
Vielfach s<strong>in</strong>d noch e<strong>in</strong>e ältere Version des Servers 1.3.X im <strong>E<strong>in</strong></strong>satz. Neu <strong>in</strong> <strong>der</strong> Version<br />
2.0 ist z.B. dass plattformspezifischer Code (z.B. Schreib- Lesezugriffe auf die Festplatte)<br />
<strong>in</strong> e<strong>in</strong>e APR (Apache Portable Runtime) ausgelagert wurde. Dies ermöglicht es, dass für<br />
jedes Betriebssystem e<strong>in</strong>e eigene Version <strong>der</strong> APR geschrieben und optimiert werden kann,<br />
was <strong>der</strong> Geschw<strong>in</strong>digkeit und Stabilität zu Gute kommt.<br />
<strong>E<strong>in</strong></strong>heiten zur Abbildung von HTTP-Anfragen auf reale Ausführungse<strong>in</strong>heiten wurden<br />
ebenso ausgelagert. (Diese nennen sich MPMs [Multi Process<strong>in</strong>g Modules].) Dies macht<br />
S<strong>in</strong>n, da dieser Vorgang ebenso vom Betriebssystem abhängt (genauso wie von <strong>der</strong> konkret<br />
betrachteten Anwendung natürlich auch).<br />
Ebenso neu e<strong>in</strong>geführt <strong>in</strong> <strong>der</strong> Version 2.0 wurden Multi-Protokoll-Unterstützung auf<br />
Transportebene und IPv6-Unterstützung.<br />
9.4.1 Erweiterte Funktionalität<br />
Virtual Hosts (IP- o<strong>der</strong> Name-basiert)<br />
SSL, sichere Verb<strong>in</strong>dungen<br />
Authentifizierung<br />
CGI (Common Gateway Interface)<br />
Ausführen von Scripten und Programmen<br />
PHP<br />
SSI (Server Side Includes)<br />
9.5 Konfiguration<br />
In den aktuellen Versionen hat Apache nur noch die Konfigurationsdatei httpd.conf. Allerd<strong>in</strong>gs<br />
machen viele Distributionen von <strong>der</strong> Möglichkeit gebrauch, an<strong>der</strong>e Dateien mit<br />
Include e<strong>in</strong>zub<strong>in</strong>den.<br />
1 zB.: Content-Type Text-html<br />
2 Wenn DocumentRoot auf ’/usr/local/httpd/htdocs’ gesetzt ist. Dazu später mehr.
128 KAPITEL 9. WEBSERVER<br />
Die Konfiguration besteht aus drei Abschnitten.<br />
• Section 1: Global Environment<br />
• Section 2: ’Ma<strong>in</strong>’ server configuration<br />
• Section 3: Virtual Hosts<br />
Das Verhalten des Servers wird <strong>in</strong>nerhalb dieser Sektionen mit sogenannten Direktiven<br />
gesteuert. Diese Direktiven stehen <strong>in</strong>nerhalb von Konfigurationskontexten.<br />
globaler Kontext In <strong>der</strong> Konfigurationsdatei ausserhalb von Conta<strong>in</strong>ern<br />
Conta<strong>in</strong>er-Kontext Innerhalb von Conta<strong>in</strong>er-Tags (zB.: ¡Directory¿...¡/Directory¿). Der<br />
Gültigkeitsbereich ist auf die Conta<strong>in</strong>er beschränkt.<br />
Verzeichniskontext In zusätzlichen Konfigurationsdateien <strong>in</strong>nerhalb <strong>der</strong> Verzeichnisstruktur.<br />
Der Name dieser Dateien kann mit AccessFileName festgelegt werden 3 .<br />
Direktiven können <strong>in</strong> unterschiedlichem Kontext stehen, aber nicht jede Direktive kann<br />
<strong>in</strong> jedem Kontext verwendet werden. Die Apache-Dokumentation gibt für jede Direktive<br />
an, <strong>in</strong> welchem Kontext sie verwendet werden kann.<br />
<strong>E<strong>in</strong></strong>ige <strong>der</strong> wichtigsten Direktiven <strong>der</strong> Ma<strong>in</strong> Server Konfiguration s<strong>in</strong>d:<br />
ServerType standalone — <strong>in</strong>etd<br />
ServerRoot Das Verzeichnis, das für den Webserver die unterste Verzeichnisebene darstellt.<br />
ServerName Der Name des Webservers ist die URL unter <strong>der</strong> er erreichbar ist.<br />
DocumentRoot Das Verzeichnis <strong>in</strong> dem sich die Webseiten bef<strong>in</strong>den, bzw. aus dem <strong>der</strong><br />
Webserver Dateien ausliefern darf.<br />
User / Group Benutzer- bzw. Gruppenrechte, mit denen <strong>der</strong> Webserver läuft.<br />
ServerAdm<strong>in</strong> E-Mail-Adresse des Adm<strong>in</strong>istrators. An diese Adresse werden Servermeldungen<br />
geschickt und sie wird unter Umständen Benutzern mitgeteilt.<br />
9.5.1 Optionen<br />
<strong>E<strong>in</strong></strong>e wichtige Direktive ist die Options-Direktive mit <strong>der</strong> man festlegen kann, welche Server-<br />
Features verfügbar s<strong>in</strong>d. Optionen können im Konfiguration-, Conta<strong>in</strong>er- und Verzeichnis-<br />
Kontext gesetzt werden.<br />
ExecCGI :<br />
Ausführbarkeit von CGI-Programmen<br />
Includes :<br />
Ausführung von ServerSideInclude-Befehlen (SSI)<br />
Indexes :<br />
Verzeichnislist<strong>in</strong>g anzeigen
9.5. KONFIGURATION 129<br />
<br />
Options +Indexes -Includes<br />
<br />
Abbildung 9.1: Options h<strong>in</strong>zugügen/entfernen<br />
Optionen können gesetzt, h<strong>in</strong>zugefügt(+) o<strong>der</strong> entfernt(-) werden. Im Beispiel 9.1 wird<br />
für das Verzeichnis /home/www/ die Option Indexes zu den allgeme<strong>in</strong> gültigen Optionen<br />
h<strong>in</strong>zugefügt und die Option Includes von den allgeme<strong>in</strong> gültigen Optionen entfernt (abgezogen).<br />
Im Beispiel 9.2 werden für das Verzeichnis /home/www2/ nur die Optionen Indexes und<br />
Includes gesetzt. Unabhängig von den allgeme<strong>in</strong> gültigen Optionen.<br />
<br />
Options Indexes Includes<br />
<br />
9.5.2 Module<br />
Abbildung 9.2: Options setzen<br />
Zusätzliche Funktionalitäten können <strong>in</strong> Form von Modulen h<strong>in</strong>zugefügt werden. Module<br />
können mit<br />
LoadModule cgi_module /usr/lib/apache/mod_cgi.so<br />
AddModule mod_cgi.c<br />
im Global-Kontext geladen werden. Module br<strong>in</strong>gen ihre eigenen Direktiven mit, die nach<br />
dem Laden verfügbar s<strong>in</strong>d. Mit <strong>der</strong> DirektiveIfModule kann man Conta<strong>in</strong>er erzeugen, <strong>der</strong>en<br />
Direktiven nur ausgeführt werden, wenn das entsprechende Modul geladen ist (siehe 9.3, S.<br />
130). Module können auch direkt <strong>in</strong> den Apache e<strong>in</strong>kompiliert werden und s<strong>in</strong>d dann ohne<br />
geladen werden zu müssen verfügbar.<br />
Für Apache gibt es e<strong>in</strong>e Vielzahl Module, die nicht zur Standard-Distribution gehören.<br />
Wünscht man sich e<strong>in</strong>e zusätzliche Funktion für se<strong>in</strong>en Webserver, lohnt es sich im Internet<br />
nach e<strong>in</strong>em Modul zu suchen, das diese Funktionalität bereitstellt. Sollte man nicht fündig<br />
werden, kann man sich dank <strong>der</strong> offenen Quelltexte daran machen, selber e<strong>in</strong> solches Modul<br />
zu schreiben.<br />
9.5.3 User-WWW<br />
Das Userdir-Modul ermöglicht es für jeden Benutzer e<strong>in</strong> Verzeichnis e<strong>in</strong>zurichten, das bei<br />
e<strong>in</strong>er Anfrage <strong>der</strong> Form http://server/~username vom Webserver ausgeliefert wird.<br />
Die Direktive UserDir legt den Namen des Verzeichnisses <strong>in</strong>nerhalb <strong>der</strong> Home-Verzeichnisse<br />
fest, dessen Inhalt <strong>der</strong> Webserver ausliefern darf. Innerhalb e<strong>in</strong>es Directory-<br />
Conta<strong>in</strong>ers bezüglich /home/*/public html kann man das Verhalten des Webservers <strong>in</strong>nerhalb<br />
dieses Verzeichnisses steuern. Beide Anweisungen s<strong>in</strong>d unabhängig vone<strong>in</strong>an<strong>der</strong>,<br />
man muss selber darauf achten, dass man das Verzeichnis konfiguriert, dass mit UserDir<br />
gesetzt ist.<br />
3 Standard ist AccessFileName .htaccess
130 KAPITEL 9. WEBSERVER<br />
<br />
UserDir public_html<br />
<br />
<br />
AllowOverride FileInfo AuthConfig Limit<br />
Options MultiViews Indexes SymL<strong>in</strong>ksIfOwnerMatch IncludesNoExec<br />
<br />
Abbildung 9.3: User-Webdirectory<br />
Bei SuSE-L<strong>in</strong>ux s<strong>in</strong>d die Direktiven bezüglich mod userdir <strong>in</strong> die Datei<br />
/etc/httpd/suse public html.conf ausgelagert.<br />
9.6 Webserver Erweiterungen<br />
Die Anfor<strong>der</strong>ungen an den Apache Webserver s<strong>in</strong>d <strong>in</strong> den letzten Jahren gestiegen, so<br />
dass das eigentliche ausführbare Programm permanent erweitert werden muss. Die Apache-<br />
Foundation 4 hat sich hier e<strong>in</strong>er mo<strong>der</strong>nen Methode des Softwaredesigns bedient, bei <strong>der</strong><br />
nicht das eigentliche Kernprogramm aufgebläht wird, son<strong>der</strong>n zusätzliche Funktionalität <strong>in</strong><br />
externe Module ausgelagert wird.<br />
Der Kern-Server (core-server) bietet nur die notwendige Basisfunktionalität, wie die<br />
Implementierung e<strong>in</strong>es TCP/IP-Servers. Alle zusätzlichen Features werden durch Module<br />
h<strong>in</strong>zugefügt. Durch diese Möglichkeit bleibt <strong>der</strong> Webserver ”schlank” und verwendet je nach<br />
Konfiguration nur die Module, welche wirklich gebraucht werden. Dieses vermeidet unnötige<br />
Sicherheitslücken. In <strong>der</strong> Apache Modul Datenbank s<strong>in</strong>d momentan (November 2005) über<br />
400 Module gelistet bei steigen<strong>der</strong> Anzahl. Zur Integration von Zusatzfunktionen kann man<br />
zwischen zwei Modularten unterscheiden:<br />
• <strong>E<strong>in</strong></strong> statisches Modul wird zusammen mit dem Kern zu e<strong>in</strong>em e<strong>in</strong>heitlichen Paket<br />
kompiliert und damit fester Bestandteil des Webserver-Programms. Beim H<strong>in</strong>zufügen<br />
o<strong>der</strong> Entfernen e<strong>in</strong>es solchen Moduls kommt <strong>der</strong> Adm<strong>in</strong> um e<strong>in</strong>e Neukompilierung<br />
des Webservers nicht herum. Durch die feste Integration kann sich die Ausführungsgeschw<strong>in</strong>digkeit<br />
beim Starten des Apache und wärend <strong>der</strong> Laufzeit erhöhen, da ke<strong>in</strong>e<br />
zusätzlichen Initialisierungen für jedes Modul notwendig s<strong>in</strong>d und <strong>der</strong> <strong>in</strong>terne Code-<br />
Overhead s<strong>in</strong>kt.<br />
• <strong>E<strong>in</strong></strong> Shared-Module kann dynamisch durch e<strong>in</strong>e entsprechende Direktive <strong>in</strong> <strong>der</strong> Konfigurationsdatei<br />
httpd.conf h<strong>in</strong>zugefügt o<strong>der</strong> entfernt werden. Da die Konfigurationsdateien<br />
nur bei e<strong>in</strong>em Start des Apache Webserver e<strong>in</strong>gelesen werden, ist hier also<br />
lediglich e<strong>in</strong> Neustart des Webservers erfor<strong>der</strong>lich. Diese Methode br<strong>in</strong>gt zwar <strong>E<strong>in</strong></strong>bußen<br />
<strong>der</strong> Performance des Webservers mit sich, jedoch ist es so sehr e<strong>in</strong>fach möglich<br />
e<strong>in</strong> Modul schnell und ohne zeitaufwendige Neukompilierung des Webservers h<strong>in</strong>zuzufügen.<br />
4 Der erste Apache-Webserver entstand aus dem damals aktuellen NCSA httpd 1.3 und zusätzlichen<br />
Erweiterungen und Patches (a patchy-webserver). Im Sommer 1999 begann die Entwicklung des Apache 2,<br />
welcher komplett neu geschrieben wurde. Die Apache Gruppe entwickelt heute sehr erfolgreich Erneuerungen<br />
am Apache Webserver.
9.6. WEBSERVER ERWEITERUNGEN 131<br />
9.6.1 Die Benutzer-Homepage - mod userdir<br />
In klassischen Multi-User-Umgebungen wie Universitäten und Schulen haben Benutzer mit<br />
L<strong>in</strong>ux-Account üblicherweise auch die Möglichkeit e<strong>in</strong>e eigene Homepage <strong>in</strong> ihrem Home-<br />
Verzeichnis anzulegen. Das Modul kümmert sich darum, dass <strong>der</strong> Webserver mit geeigneten<br />
Rechten auf e<strong>in</strong> Unterverzeichnis im User-Home, welches sonst ja vor unauthorisiertem<br />
Zugriff geschützt se<strong>in</strong> sollte, h<strong>in</strong>e<strong>in</strong>schauen darf.<br />
Das Modul muss lediglich e<strong>in</strong>mal konfiguriert werden. Anschliessend s<strong>in</strong>d sämtliche<br />
Homepage-Verzeichnisse über den Webserver von außen erreichbar. Klassischer Weise erreicht<br />
man die Seiten <strong>der</strong> e<strong>in</strong>zelnen Benutzer unter <strong>der</strong> URL http://www.mywebserver.site/<br />
username. Das hierfür bestimmte Verzeichnis im jeweiligen Home-Verzeichnis des Benutzers<br />
lässt sich <strong>in</strong> <strong>der</strong> Konfigurationsdatei mit <strong>der</strong> Direktive UserDir Unterverzeichnisname<br />
def<strong>in</strong>ieren. In den meisten Fällen heisst dieses Verzeichnis public html<br />
9.6.2 URL-Umschreiber mod rewrite<br />
Dieses Modul erlaubt Manipulationen <strong>der</strong> URL, durch sogenannte Regular Expressions, wie<br />
man sie auch von an<strong>der</strong>en L<strong>in</strong>ux-Tools, wie sed o<strong>der</strong> grep kennt. Hierdurch kann <strong>der</strong> Webadm<strong>in</strong><br />
”unschöne” URLs verän<strong>der</strong>n, um sie zum Beispiel für Suchmasch<strong>in</strong>en freundlicher<br />
zu gestalten. Viele <strong>der</strong> Suchmasch<strong>in</strong>en können zwar dynamische Web<strong>in</strong>halte <strong>in</strong>dizieren, jedoch<br />
wird e<strong>in</strong>e Internetseite sichtlich besser <strong>in</strong>diziert, wenn diese statisch ist. Deshalb wird<br />
recht häufig mod rewrite e<strong>in</strong>gesetzt, um den Suchmasch<strong>in</strong>en Spi<strong>der</strong>n e<strong>in</strong>e dynamische Seite<br />
als statisch unterzuschieben.<br />
Dynamische Seiten s<strong>in</strong>d oft durch URLs mit Parametern charakterisiert: http://www.ks.<br />
uni-freiburg.de/php veranstaltungsdetail.php?id=7. Mittels mod rewrite kann man die URL<br />
so umschreiben, so dass die Seite auch Intern wandelt das Modul die URL wie<strong>der</strong> um, so<br />
dass die dynamische Seite mit sämtlichen Parametern aufgerufen wird.<br />
Dieses lässt sich durch e<strong>in</strong>e e<strong>in</strong>fache Direktive <strong>in</strong> <strong>der</strong> Apache Konfigurationsdatei<br />
httpd.conf umsetzen, wie die Abbildung von ”praxis-sem<strong>in</strong>ar.html” auf ”php veranstaltungsdetail.php?id=7”.<br />
RewriteEng<strong>in</strong>e On<br />
RewriteRule ^(praxis-sem<strong>in</strong>ar7[0-9]+).html$ php_veranstaltungsdetail.php?id=$1<br />
Die erste Zeile schaltet das Modul durch die Direktive ”RewriteEng<strong>in</strong>e On” e<strong>in</strong>. In <strong>der</strong><br />
zweiten Zeile folgt dann die Regel für die Umschreibung. Der erste Parameter bildet das<br />
Suchmuster und <strong>der</strong> zweite Parameter das Ersetzungsmuster. Das Suchmuster lässt soch<br />
mittels regulärer Ausdrücke formulieren. Beim Ersetzungsmuster kann es sich um e<strong>in</strong>fachen<br />
Text, aber auch Variablen des regulären Ausdrucks enthalten. Im gezeigten Beispiel steht<br />
$1 für das erste Klammerpaar im Suchmuster.<br />
9.6.3 Zugriffskontrollen<br />
Die Module mod auth basic und mod auth digest erlauben die <strong>E<strong>in</strong></strong>richtung e<strong>in</strong>er e<strong>in</strong>fache<br />
Zugriffskontrolle über das HTTP Protokoll. Erfolgt e<strong>in</strong> Zugriff auf e<strong>in</strong>e zugriffsbeschränkte<br />
Resource, dann schickt <strong>der</strong> Server den Status 401 und verlangt e<strong>in</strong>e Authentifizierung des<br />
Benutzers durch <strong>E<strong>in</strong></strong>gabe e<strong>in</strong>es Benutzernamens und Passworts. Die <strong>E<strong>in</strong></strong>gabe gleicht <strong>der</strong><br />
Server mit den <strong>E<strong>in</strong></strong>trägen <strong>der</strong> Passwort- und Gruppendatei ab. Besitzt <strong>der</strong> Benutzer die<br />
nötigen Rechte, gewährt <strong>der</strong> Webserver dem Benutzer den Zugriff.<br />
Um e<strong>in</strong> Verzeichnis auf dem Webserver vor unauthorisiertem Zugriff zu schützen, gibt<br />
es zwei Möglichkeiten: Zentral <strong>in</strong> <strong>der</strong> httpd.conf o<strong>der</strong> mit Hilfe von .htaccess-Dateien <strong>in</strong><br />
den zu schützenden Verzeichnissen. Für den zentralen Ansatz muss <strong>der</strong> Webadm<strong>in</strong> <strong>in</strong> <strong>der</strong><br />
httpd.conf die nachfolgenden Zeilen h<strong>in</strong>zufügen.
132 KAPITEL 9. WEBSERVER<br />
<br />
AuthType Digest<br />
AuthName "privat"<br />
AuthDigestFile /srv/www/.htpasswd<br />
Require valid-user<br />
<br />
Dabei handelt es sich bei /srv/www/htdocs/secure das zu schützende Verzeichnis, das mit<br />
<strong>der</strong> Digest-Methode abgesichert wird. Für e<strong>in</strong>en Passwortschutz mittels .htaccess-Datei(en)<br />
s<strong>in</strong>d die folgenden Schritte zu unternehmen. Man erstellt die Datei im Verzeichnis mit dem<br />
entsprechenden Inhalt.<br />
<br />
AuthType Digest<br />
AuthName "Mit MD5/Digest gesicherter Bereich"<br />
AuthDigestFile /srv/www/.htpasswd<br />
Require valid-user<br />
Require Group webadm<strong>in</strong>s<br />
<br />
Mit <strong>der</strong> Direktive AuthType wird die Authentifizierungsmethode festgelegt, wobei <strong>der</strong> Webadm<strong>in</strong><br />
zwischen Basic und Digest wählen kann. Der Unterschied zwischen beiden Module<br />
liegt <strong>in</strong> <strong>der</strong> Art <strong>der</strong> Datenübertragung. Während die Basic Authentifizierung (mod auth basic)<br />
die Daten im Klartext überträgt und damit e<strong>in</strong> recht hohes Risiko e<strong>in</strong>geht, verschlüsselt<br />
das Modul mod auth digest die Daten vor <strong>der</strong><br />
Übertragung mittels MD5. Da jedoch das<br />
Chiffrat abgefangen und mittels Bruteforce-Attacke <strong>in</strong>terpretiert werden kann, empfiehlt<br />
sich bei sensiblen Bereichen die Übertragung zusätzlich mit Hilfe von SSL zu sichern.<br />
<br />
AuthType Basic<br />
AuthName "Mit BasicAuth nicht wirklich gesicherter Bereich"<br />
AuthUserFile /srv/www/.htpasswd<br />
Require valid-user<br />
<br />
AuthName def<strong>in</strong>iert den Namen des geschützten Bereichs. Der hier def<strong>in</strong>ierte Str<strong>in</strong>g wird<br />
dem Benutzer bei <strong>der</strong> Passwort-Abfrage präsentiert. Mit den Direktiven AuthUserFile<br />
undAuthGroupFile, beziehungsweise im Fall <strong>der</strong> Digest AuthentifizierungAuthDigestFile<br />
und AuthDigestGroupFile wird <strong>der</strong> Pfad zu <strong>der</strong> Passwort- und Gruppendatei def<strong>in</strong>iert.<br />
Die letzte Zeile des Beispiels legt zusätzlich fest, welche Benutzer berechtigt s<strong>in</strong>d <strong>in</strong> das<br />
Verzeichnis zu wechseln. Hierzu verwendet man die Direktive Require, welche wie bei <strong>der</strong><br />
Basic Authentifizierung e<strong>in</strong>en gültigen Benutzer verlangt.<br />
# .htpasswd<br />
user01:secure_section01:fnxpraouunko3Ocasde1cdf0l1ases1a<br />
user02:secure_section01:basd2w49eq0eab5wehz1sdf2r44f24cd<br />
user03:secure_section02:lse35aa81ca43dc8dsecdbe83382121f<br />
Die <strong>in</strong> den Beispielen genannten Passwort- und Gruppendateien s<strong>in</strong>d Textformate, die<br />
sich mit e<strong>in</strong>em ganz normalen Editor bearbeiten lassen. Die Passworte muss man dabei<br />
nicht selbst erstellen, dieses regelt das Programm mit dem Namen htpasswd2 für<br />
die Basic Authentifizierung und htdigest2 für die Digest Authetifizierung. Durch den<br />
Aufruf htpasswd2 -c datei username o<strong>der</strong> entsprechend htdigest2 -c datei bereich<br />
username wird man zur <strong>E<strong>in</strong></strong>gabe des Passwortes aufgefor<strong>der</strong>t und anschliessend die Datei<br />
erzeugt. Das H<strong>in</strong>zufügen von Benutzern <strong>in</strong> bestehende Dateien geschieht durch das Weglassen<br />
des Parameters ”-c”.<br />
# .htgroup<br />
webadm<strong>in</strong>s:user01 user02<br />
normal_user:user03
9.6. WEBSERVER ERWEITERUNGEN 133<br />
Bei sehr vielen Benutzern wird es wie bei <strong>der</strong> normalen L<strong>in</strong>ux-User-Adm<strong>in</strong>istration auch,<br />
irgendwann aufwändig die Informationen <strong>in</strong> e<strong>in</strong>zelnen Dateien zu verwalten. Als Alternative<br />
bietet sich LDAP an. 5 <strong>E<strong>in</strong></strong>e Basic Authentication kann auch gegen e<strong>in</strong>e LDAP-Quelle laufen,<br />
die .htaccess zeigt die entsprechenden <strong>E<strong>in</strong></strong>träge:<br />
AuthType Basic<br />
AuthName "Gegen LDAP authentifizierter Bereich"<br />
LDAP_Server localhost<br />
LDAP_Port 389<br />
Base_DN "ou=user,dc=mydoma<strong>in</strong>,dc=site"<br />
Require valid-user<br />
9.6.4 Kompression<br />
Das Modul mod deflate wurde mit <strong>der</strong> Apache Version 2 e<strong>in</strong>geführt und erlaubt die Kompression<br />
von Web<strong>in</strong>halten durch Angabe e<strong>in</strong>es Filters. Das Modul kann ausgehende, sowie<br />
auch e<strong>in</strong>gehende Daten komprimieren. Der Datenverkehr wird hierzu über diesen Filter<br />
umgeleitet. Um dieses Modul zu aktivieren, trägt e<strong>in</strong> Adm<strong>in</strong> die folgende Direktiven <strong>in</strong> <strong>der</strong><br />
Apache-Konfigurationsdatei e<strong>in</strong>:<br />
SetOutputFilter DEFLATE<br />
134 KAPITEL 9. WEBSERVER<br />
• PROPPATCH - kann diese Metadaten än<strong>der</strong>n und löschen.<br />
• UNLOCK - entfernt diesen Überschreibschutz wie<strong>der</strong><br />
Nachfolgend sei e<strong>in</strong> e<strong>in</strong>faches Beispiel für WebDAV Freigabe demonstriert:<br />
DAVLockDB /usr/local/apache2/webdav<br />
<br />
Dav On<br />
ForceType text/pla<strong>in</strong><br />
<br />
Mit <strong>der</strong> ersten Direktive legt man den Pfad zu <strong>der</strong> Lock-Datenbank fest. In dieser Datei<br />
wird abgespeichert, welche <strong>der</strong> vorhandenen Ressourcen gerade gesperrt s<strong>in</strong>d. Dann folgt e<strong>in</strong><br />
Location-Conta<strong>in</strong>er mit dem wir das Verzeichnis def<strong>in</strong>ieren, für welches man <strong>in</strong>dividuelle<br />
<strong>E<strong>in</strong></strong>stellungen vornehmen möchte. Mit <strong>der</strong> Direktive Dav On, wird die WebDAV Funktionalität<br />
für das Verzeichnis e<strong>in</strong>geschaltet. Beim <strong>E<strong>in</strong></strong>satz von WebDAV sollte <strong>der</strong> Adm<strong>in</strong><br />
unbed<strong>in</strong>gt auf die notwendigen Sicherheitsvorkehrungen achten. Hierzu gehört m<strong>in</strong>destens<br />
e<strong>in</strong> Verzeichnisschutz. Am besten eignet sich jedoch die Verwendung e<strong>in</strong>es virtuellen Host<br />
<strong>in</strong> Verb<strong>in</strong>dung mit SSL-Absicherung und e<strong>in</strong>er mod auth digest Authentifizierung.<br />
9.6.6 Vrituelle Webserver<br />
Wenn man sich überlegt, wieviele Doma<strong>in</strong>s Webseiten bereitstellen, wird schnell klar, dass<br />
nicht für jede dieser Doma<strong>in</strong> e<strong>in</strong> Webserver läuft. O<strong>der</strong> womöglich für jede e<strong>in</strong> Rechner. Auch<br />
würde es für die wenigsten Privatpersonen S<strong>in</strong>n machen, auf ihrem Computer zu hause e<strong>in</strong>en<br />
öffentlichen Webserver zu betreiben, denn <strong>der</strong> sollte rund um die Uhr verfügbar se<strong>in</strong>. Da<br />
ersche<strong>in</strong>t es auf Anhieb s<strong>in</strong>nvoll mehrere Doma<strong>in</strong>s über e<strong>in</strong>en Webserver zu betreiben.<br />
Für Betreiber e<strong>in</strong>es Webservers, also beispielsweise diverse große Webhoster, wäre es<br />
ziemlich aufwändig für jede Doma<strong>in</strong> e<strong>in</strong>e eigene Instanz des Webservers auf unterschiedlichen<br />
Ports e<strong>in</strong>er Masch<strong>in</strong>e o<strong>der</strong> auf verschiedenen IP’s laufen zu lassen. Deshalb unterstützt<br />
Apache schon seit <strong>der</strong> Vorgängerversion virtuelle Server.<br />
Bei namensbasierten virtuellen Servern verwaltet <strong>der</strong> Apache mehrere Doma<strong>in</strong>s, welche<br />
alle die gleiche IP-Adresse besitzen. <strong>E<strong>in</strong></strong>gehende Anfragen können nur deshalb an die richtige<br />
Doma<strong>in</strong> weitergeleitet werden, weil <strong>der</strong> Doma<strong>in</strong>name <strong>in</strong> <strong>der</strong> GET-Anfrage enthalten ist. Um<br />
den Apache für virtuelle Server zu konfigurieren, muss die httpd.conf o<strong>der</strong> die entsprechende<br />
Include-Datei 8 geän<strong>der</strong>t werden.<br />
NameVirtualHost Schaltet Name Virtual Host e<strong>in</strong> und gibt an, auf welcher IP-Adresse<br />
auf entsprechende Anfragen reagiert werden soll. Gibt man anstatt e<strong>in</strong>er IP e<strong>in</strong> ’*’<br />
an, wird auf je<strong>der</strong> an den Rechner gebundenen IP-Adresse Name Virtual Host e<strong>in</strong>geschaltet.<br />
ServerName Legt die URL fest, auf die sich <strong>der</strong> VirtualHost-Conta<strong>in</strong>er bezieht.<br />
ServerAlias Alternative URL’s, auf die sich <strong>der</strong> VirtualHost-Conta<strong>in</strong>er bezieht.<br />
DocumentRoot Das Verzeichnis <strong>in</strong> dem sich die Dokumente bef<strong>in</strong>den, die von diesem<br />
VirtualHost ausgeliefert werden dürfen.<br />
8 Das hängt von <strong>der</strong> Konfiguration ab, die die jeweilige Distribution für den Apachen vorsieht. Anstatt<br />
diese Konfigurationen fest <strong>in</strong> die httpd.conf zu schreiben, ist es häufig so angelegt, dass virtuelle Server<br />
dynamisch generiert werden können, ohne den Apache jedes Mal neu starten zu müssen. SuSE verwendet<br />
beispielsweise e<strong>in</strong> eigenes Unterverzeichnis /etc/apache2/vhosts.d
9.7. SSL (SECURE SOCKET LAYER) 135<br />
NameVirtualHost *:80<br />
<br />
ServerName www.my-doma<strong>in</strong>.site<br />
ServerAlias my-doma<strong>in</strong>.site *.my-doma<strong>in</strong>.site<br />
DocumentRoot /srv/www/my-content<br />
<br />
<br />
ServerName www.otherdoma<strong>in</strong>.site<br />
DocumentRoot /srv/www/othercontent<br />
<br />
Diese Konfiguration besagt, dass die virtuellen Server auf Port 80, egal auf welche IP,<br />
angesprochen werden. Es werden jeweils gültige Doma<strong>in</strong>namen def<strong>in</strong>iert, sowie Stammverzeichnisse<br />
festgelegt.<br />
Alternativ wird bei e<strong>in</strong>em IP-basierten virtuellen Webserver je<strong>der</strong> Doma<strong>in</strong>, die <strong>der</strong> Server<br />
bedienen soll e<strong>in</strong>e eigene IP zugeordnet. Da IP-Adressen jedoch meistens knapp s<strong>in</strong>d,<br />
wird dieses oft nur für SSL-gesichterte Sites e<strong>in</strong>gesetzt.<br />
Möchte e<strong>in</strong> Client auf e<strong>in</strong>e Doma<strong>in</strong> zugreifen, dann muss er beim zuständigen DNS-<br />
Server nach <strong>der</strong> IP Adresse des Doma<strong>in</strong>namens fragen und kann den Webserver dann über<br />
diese IP Adresse ansprechen.<br />
Um diese Art virtuelle Webserver e<strong>in</strong>zurichten, muss e<strong>in</strong> Webserver-Adm<strong>in</strong> <strong>in</strong> <strong>der</strong> Konfigurationsdatei<br />
httpd.conf, o<strong>der</strong> je nach Distribution <strong>in</strong> <strong>der</strong> passenden Include-Datei, e<strong>in</strong>en<br />
VirtualHost Conta<strong>in</strong>er anlegen:<br />
<br />
ServerName www.my-first-doma<strong>in</strong>.site<br />
DocumentRoot /srv/www/my-first-doma<strong>in</strong>/htdocs<br />
<br />
<br />
ServerName www.my-second-doma<strong>in</strong>.site<br />
DocumentRoot /srv/www/my-second-doma<strong>in</strong>/htdocs<br />
<br />
Im obigen Beispiel wurden zwei VirtualHost Conta<strong>in</strong>er angelegt, welche als Attribut die<br />
IP-Adresse mit führen. Bei e<strong>in</strong>em IP basierten virtuellen Webserver müssen diese natürlich<br />
verschieden se<strong>in</strong>. Mit <strong>der</strong> Direktive ServerName wird Doma<strong>in</strong>Namen konfiguriert, also unter<br />
welchem DNS-Namen <strong>der</strong> Server erreichbar se<strong>in</strong> soll. Die Direktive DocumentRoot legt die<br />
Dokumentenwurzel des virtuellen Webservers fest. Sie ist <strong>der</strong> Pfad zu dem Verzeichnis <strong>in</strong><br />
dem die entsprechenden Webseiten lagern.<br />
9.7 SSL (Secure Socket Layer)<br />
Daten werden über das HTTP Protokoll standardmäßig im Klartext übertragen und stellen<br />
gerade <strong>in</strong> Bezug mit vertraulichen Daten e<strong>in</strong> Sicherheitsrisiko dar. Gerade <strong>in</strong> Bereichen mit<br />
persönlichen o<strong>der</strong> wirtschaftlich relevanten Daten sollten gesicherte Verb<strong>in</strong>dung zum <strong>E<strong>in</strong></strong>satz<br />
kommen. SSL ist e<strong>in</strong>e Technik um Verb<strong>in</strong>dungen zu verschlüsseln. Diese Verschlüsselung<br />
setzt oberhalb von TCP an und kann deshalb auch für an<strong>der</strong>e TCP-basierte Dienste<br />
e<strong>in</strong>gesetzt werden.<br />
Für die verschlüsselte<br />
Übertragung sensibler Daten von o<strong>der</strong> zu e<strong>in</strong>er Webseite ist<br />
das HTTPS (HyperText Transfer Protokol Secure) def<strong>in</strong>iert. Bei e<strong>in</strong>er Anfrage, die mit<br />
https:// beg<strong>in</strong>nt, wird e<strong>in</strong>e sichere, d.h. verschlüsselte, Verb<strong>in</strong>dung vom Client zum Webserver<br />
aufgebaut. Die HTTPS-Anfragen nimmt <strong>der</strong> Webserver, wenn nichts an<strong>der</strong>es e<strong>in</strong>gestellt<br />
ist, auf Port 443 entgegen.
136 KAPITEL 9. WEBSERVER<br />
9.7.1 Funktionsweise<br />
Für e<strong>in</strong>e verschlüsselte Verb<strong>in</strong>dung muss zum<strong>in</strong>dest e<strong>in</strong> Kommunikationsschlüssel ausgetauscht<br />
werden, mit dem beide Seiten dann arbeiten. Zur Kommunikation wird aus Performanzgründen<br />
e<strong>in</strong> symetrisches Verschlüsselungsverfahren e<strong>in</strong>gesetzt. Der Kommunikationsschlüssel<br />
wird über e<strong>in</strong> Public-Key-Verfahren ausgetauscht. Dazu benötigt m<strong>in</strong>destens <strong>der</strong><br />
Webserver e<strong>in</strong>en öffentlichen und e<strong>in</strong>en privaten Schlüssel. Bei e<strong>in</strong>em Verb<strong>in</strong>dungsaufbau,<br />
schickt <strong>der</strong> Webserver e<strong>in</strong> x509-Certificate, das se<strong>in</strong>en öffentlichen Schlüssel und se<strong>in</strong>en Namen<br />
be<strong>in</strong>haltet, an den Client. Anhand dieses Certificates kann <strong>der</strong> Client e<strong>in</strong>en Webserver,<br />
dem er e<strong>in</strong>mal vertraut hat, wie<strong>der</strong>erkennen und mit Hilfe des öffentlichen Schlüssels e<strong>in</strong>en<br />
Vorschlag für e<strong>in</strong>en Kommunikationsschlüssel machen. Ist das Certificate von e<strong>in</strong>er Instanz<br />
signiert, <strong>der</strong> <strong>der</strong> Client vertraut, kann er auch e<strong>in</strong>em Webserver vertrauen, den er noch<br />
nicht kennt. 9 Abbildung ?? zeigt, wie dem Webserver se<strong>in</strong> Certificate übergeben wird. Dabei<br />
müssen das zu verschickende Certificate mit dem öffentlichen Schlüssel und (! <strong>in</strong> e<strong>in</strong>er<br />
an<strong>der</strong>en Datei) <strong>der</strong> private Schlüssel angegeben werden.<br />
SSLCertificateFile /etc/httpd/ssl.crt/server.crt<br />
SSLCertificateKeyFile /etc/httpd/ssl.key/server.key<br />
9.7.2 Zertifikate<br />
Zertifikate 10 s<strong>in</strong>d signierte Informationen über e<strong>in</strong>e Instanz. <strong>E<strong>in</strong></strong> Certificate enhält m<strong>in</strong>destens<br />
e<strong>in</strong>en e<strong>in</strong>deutigen Namen und den öffentlichen Schlüssel <strong>der</strong> Instanz.<br />
Damit e<strong>in</strong>e an<strong>der</strong>e Instanz das Certificate anerkennen kann, muss es von e<strong>in</strong>er dritten<br />
Instanz, <strong>der</strong> beide Vertrauen, unterzeichnet se<strong>in</strong>. Das gilt als Beglaubigung, dass das Certificate<br />
“echt” ist. <strong>E<strong>in</strong></strong>e solche vertrauensvolle Instanz nennt man Certificate Authorisation<br />
(CA).<br />
Der Name <strong>der</strong> Instanz wird <strong>in</strong> dem Certificate <strong>in</strong> <strong>der</strong> von LDAP bekannten Objektorientierten<br />
schreibweise angegeben (zB.: ”C=de, O=uni-math, CN=www.uni-math.gwdg.de”).<br />
Dabei ist es für das Certificate e<strong>in</strong>es Webservers wichtig, dass <strong>der</strong> <strong>E<strong>in</strong></strong>trag CN (Common-<br />
Name) die URL des Webservers be<strong>in</strong>haltet.<br />
Mit dem Paket openssl kommt das Perl-Skript CA.pl, das bei <strong>der</strong> Erzeugung und<br />
Verwaltung von Certificaten hilft.<br />
/usr/share/ssl/misc/CA.pl -newcert|-newreq|-newca|-sign|-verify<br />
CA.pl benutzt openssl zur Bearbeitung von Certificaten. <strong>E<strong>in</strong></strong>e ausgiebige Lektüre <strong>der</strong><br />
Manpage von openssl kann dieses Skript überflüssig machen und versetzt <strong>in</strong> die Lage, Certificate<br />
fe<strong>in</strong>er zu bee<strong>in</strong>flussen.<br />
<strong>E<strong>in</strong></strong>e umfangreiche und gute Beschreibung des Umganges mit Certificaten f<strong>in</strong>det man<br />
unter http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/.<br />
9.7.3 Zertifikate erzeugen<br />
Folgende Schritte führen zu e<strong>in</strong>em Server-Certificate <strong>in</strong> <strong>der</strong> Datei newreq.pem und dem<br />
entschprechenden privaten Schlüssel <strong>in</strong> wwwkeyunsecure.pem.<br />
CA.pl -newcert Certification Authority und ca-Certificat erstellen<br />
9 So ist das Pr<strong>in</strong>zip, <strong>in</strong> Wirklichkeit ist das Ganze e<strong>in</strong> bischen komplizierter.<br />
10 engl. certificates
9.8. CGI (-MODUL) 137<br />
CA.pl -newreq Certificate-Request. Erzeugt e<strong>in</strong> neues Certificate. Für e<strong>in</strong> Webserver-<br />
Certificate ist darauf zu achten, als CN den Namen <strong>der</strong> Webseite anzugeben.<br />
CA.pl -sign das neue Certificat mit dem ca-Certificat signieren<br />
openssl rsa -<strong>in</strong> newreq.pem -out wwwkeyunsecure.pem Passphrase aus dem Certificat<br />
entfernen und den Privat-Key <strong>in</strong> e<strong>in</strong>e eigene Datei auslagern<br />
Es ist zu empfehlen, für die ersten Versuche e<strong>in</strong> Verzeichnis anzulegen, <strong>in</strong> das manCA.pl<br />
kopiert und dort die entsprechenden Befehle aufruft.<br />
9.7.4 Integration<br />
Hat man den Schlüssel erfolgreich erstellt, kann man <strong>in</strong> <strong>der</strong> Konfigurationsdatei httpd.conf<br />
o<strong>der</strong> je nach Distribution <strong>der</strong> passenden Include-Daten das Modul für e<strong>in</strong> Verzeichnis aktivieren.<br />
Dieses geschieht <strong>in</strong> <strong>der</strong> Regel mit e<strong>in</strong>em IP-basierten 11 virtuellen Host:<br />
Listen 443<br />
<br />
DocumentRoot /srv/www/htdocs/ssl-gesichert<br />
ServerName 192.168.2.1:443<br />
SSLEng<strong>in</strong>e on<br />
SSLCertificateFile /etc/apache2/ssl/server.crt<br />
SSLCertificateKeyFile /etc/apache2/ssl/server.key<br />
<br />
Durch die Listen-Direktive <strong>in</strong> <strong>der</strong> ersten Zeile sagt e<strong>in</strong> Adm<strong>in</strong> dem Apache Webservern,<br />
dass er auf dem Port 443 antworten soll. Dann wird <strong>in</strong> e<strong>in</strong>em VirtualHost-Conta<strong>in</strong>er e<strong>in</strong>gerichtet.<br />
In diesem schaltet die Direktive ”SSLEng<strong>in</strong>e on” die SSLUnterstützung für diesen<br />
virtuellen Server an. Mit den beiden Direktiven SSLCertificateFile und SSLCertificateKey-<br />
File gibt man den Pfad zu dem SSL-Zertifikat und SSL-Schlüssel an.<br />
Die Pfade <strong>in</strong> denen sich diese beiden Dateien bef<strong>in</strong>den sollten natürlich ausreichend<br />
geschützt se<strong>in</strong>, damit e<strong>in</strong> potenzieller Angreifer ke<strong>in</strong>e Möglichkeit hat an den SSL-Schlüssel<br />
zu gelangen - ansonsten wäre diese Verschlüsselung wertlos.<br />
9.8 CGI (-Modul)<br />
CGI (Common Gateway Interface) def<strong>in</strong>iert e<strong>in</strong>e Schnittstelle, die die Kommunikation zwischen<br />
Webservern und Programmen erleichtert. HTML-Dokumente können Variablen mittels<br />
Form-Tags über CGI an Programme übergeben. Diese sogenannten CGI-Progamme<br />
generieren oft wie<strong>der</strong> ganze Webseiten. So kann man ganze Internetauftritte über CGI-<br />
Programme steuern.<br />
Für die Variablenübergabe gibt es zwei Methoden.<br />
GET-Methode Die Variablen werden als Teil <strong>der</strong> URL übergeben. Man hat die Möglichkeit,<br />
e<strong>in</strong>en Aufruf mit den Variablendef<strong>in</strong>itionen selbst zu formulieren, zB. direkt <strong>in</strong><br />
die Adresszeile des Browsers e<strong>in</strong>zugeben. Dabei werden die Variablen mit Wertzuweisung<br />
nach e<strong>in</strong>em ’?’ an die URL angehängt. Mehrere Variablen-Wert-Paare werden<br />
dabei durch e<strong>in</strong> ’&’ getrennt.<br />
11 Mit <strong>der</strong> namensbasierten Variante stößt man hier an die Grenzen, denn bevor <strong>der</strong> Browser <strong>in</strong> dem<br />
HTTP-Hea<strong>der</strong> den Doma<strong>in</strong>namen sendet, erfolgt das SSL Handshake. Zu diesem Zeitpunkt ist jedoch nur<br />
die IP Adresse und die Portnummer bekannt, welche bei den namensbasierten virtuellen Webservern zu<br />
mehreren Doma<strong>in</strong>s führen kann.
138 KAPITEL 9. WEBSERVER<br />
POST-Methode Die Variablen werden im Request-Hea<strong>der</strong> übergeben, s<strong>in</strong>d also für den<br />
Benutzer nicht sichtbar. Das macht es für dritte zum<strong>in</strong>dest schwerer, etwas über das<br />
Programm o<strong>der</strong> die Übertragenen Variablen heraus zu f<strong>in</strong>den.<br />
http://www.example.com/cgi-b<strong>in</strong>/script.cgi?var1=value1&var2=value2<br />
Abbildung 9.4: Variablenübergabe per GET-Methode<br />
Grundsätzlich kann jede Art von Programm o<strong>der</strong> Skript vom Webserver Apache ausgeführt<br />
werden. Es ist dem Webserver aber nicht erlaubt, beliebige Programme auszuführen.<br />
Man muss für Verzeichnisse <strong>in</strong> denen CGI-Programme ausgeführt werden sollen, die Option<br />
ExecCGI setzen 12 und e<strong>in</strong>e (o<strong>der</strong> mehrere) Dateiendungen def<strong>in</strong>ieren. Nur Dateien, die die<br />
e<strong>in</strong>getragene Endung haben und sich <strong>in</strong> e<strong>in</strong>em Verzeichnis bef<strong>in</strong>den, für dasExecCGI gesetzt<br />
ist, werden vom Webserver als CGI-Script aufgerufen.<br />
Aus Sicherheitsgründen sollte man die Ausführung von Programmen nur ausserhalb<br />
von DocumentRoot erlauben. Oft wird die Ausführung nur für e<strong>in</strong> cgi-b<strong>in</strong> genanntes<br />
Verzeichnis erlaubt, das sich ausserhalb von DocumentRoot bef<strong>in</strong>det.<br />
In Abbildung 9.5 wird erst e<strong>in</strong> Alias auf das cgi-b<strong>in</strong> Verzeichnis gesetzt. MitAddHandler<br />
wird def<strong>in</strong>iert, dass Dateien mit <strong>der</strong> Endung .cgi als cgi-script <strong>in</strong>terpretiert werden.<br />
Innerhalb e<strong>in</strong>es Directory-Conta<strong>in</strong>ers bezüglich /usr/local/httpd/cgi-b<strong>in</strong>/ wird die Option<br />
ExecCGI zu den geltenden Optionen h<strong>in</strong>zugefügt.<br />
ScriptAlias /cgi-b<strong>in</strong>/ /usr/local/httpd/cgi-b<strong>in</strong>/<br />
AddHandler cgi-script .cgi<br />
<br />
Options +ExecCGI<br />
<br />
9.9 PHP<br />
Abbildung 9.5: mod cgi<br />
Bei den statischen Web<strong>in</strong>halten s<strong>in</strong>d die HTML-Seiten, welche <strong>der</strong> Webserver ausliefern<br />
soll, üblicherweise als Datei abgelegt. Der Webserver liefert e<strong>in</strong>fach die komplette Datei<br />
aus, wenn e<strong>in</strong> Client die entsprechende Resource anfragt.<br />
Bei den dynamischen Web<strong>in</strong>halten dagegen wird die HTML-Ausgabe erst mit Hilfe e<strong>in</strong>er<br />
Skriptsprache zur Laufzeit erzeugt. Hier gibt es wie<strong>der</strong> zwei unterschiedliche Techniken, die<br />
Clientseitigen und die Serverseitigen.<br />
Die clientseitigen Skriptsprachen werden auf dem Clients selbst ausgeführt. Hierzu zählt<br />
zum Beispiel die <strong>E<strong>in</strong></strong>gabe von Formularfel<strong>der</strong>n. Die HTML Seite, welche vom Webserver<br />
ausgeliefert wird, enthält den Quelltext <strong>der</strong> jeweiligen Skriptsprache, <strong>der</strong> dann vom Client<br />
geparst und ausgeführt wird. Das bekannteste und e<strong>in</strong>es <strong>der</strong> ältesten Beispiele e<strong>in</strong>er clientseitigen<br />
Skriptsprache ist Javascript. Die Auswahl wuchs im Laufe <strong>der</strong> Zeit, so dass Flash,<br />
Java o<strong>der</strong> ActiveX <strong>in</strong>zwischen von vielen Browsern o<strong>der</strong> ihren Erweiterungen unterstützt<br />
werden. Damit <strong>der</strong> Client den Quelltext ausführen kann, ist natürlich die Unterstützung<br />
12 siehe Kapitel 9.5.1
9.9. PHP 139<br />
<strong>der</strong> Skriptsprache erfor<strong>der</strong>lich. Dies geschieht mit Hilfe von Plug<strong>in</strong>s, die <strong>der</strong> Benutzer im<br />
Client <strong>in</strong>stallieren muss. Hier fangen dann oft die Probleme an:<br />
• Die Performance ist da e<strong>in</strong> entscheiden<strong>der</strong> Faktor. Bei den clientseitigen Skriptsprachen<br />
muss <strong>der</strong> Client selbst die Rechenleistung, welche für die Ausführung des Codes<br />
notwendig ist, bereitstellen.<br />
• Unter Sicherheitsaspekten schneiden clientseitige Implementierungen oft schlecht ab,<br />
da e<strong>in</strong> Skript auf dem Client-Rechner oft beliebigen Code ausführen kann und damit<br />
auch Manipulationen am System selbst vornehmen könnte.<br />
• Die Browserunterstützung zählt zu den weiteren Problemen, mit welchem sich die<br />
clientseitigen Skriptsprachen befassen müssen. Denn nicht für jeden Web-Browser<br />
existiert e<strong>in</strong> passendes Plug<strong>in</strong>.<br />
• Der <strong>Netzwerk</strong>traffic schafft oft e<strong>in</strong> weiteres Problem. Man stelle sich vor, dass man e<strong>in</strong><br />
clientseitiges Flash-Skript, welches mehrere Megabyte groß ist, hat. Auch wenn man<br />
nur e<strong>in</strong>en kle<strong>in</strong>en Teil des Flashskriptes benötigt, muss man das komplette Skript<br />
vor <strong>der</strong> Ausführung herunterladen, was e<strong>in</strong>en u.U. unverhältnismässig hohen <strong>Netzwerk</strong>traffic<br />
mit sich br<strong>in</strong>gt, <strong>der</strong> gerade für kle<strong>in</strong>e mobile Endgeräte problematisch se<strong>in</strong><br />
kann.<br />
Diese Art <strong>der</strong> Probleme tritt nicht auf, wenn man auf serverseitige Skriptsprachen setzt.<br />
Diese verän<strong>der</strong>n o<strong>der</strong> generieren die HTML-Seite noch vor <strong>der</strong> Auslieferung an den Client.<br />
Wird also e<strong>in</strong>e Anfrage an e<strong>in</strong>en Webserver gestellt, dann wird <strong>der</strong> Quelltext des Skripts<br />
noch auf dem Webserver geparst und ausgeführt. Die serverseitigen Skriptsprachen können<br />
wie<strong>der</strong>um ihre Daten aus Datenbanken beziehen, wie das oft bei den Content Management<br />
Systemen (CMS) <strong>der</strong> Fall ist.<br />
Ist das komplette Skript abgearbeitet, dann wird die erzeugte HTML-Seite an den Client<br />
ausgeliefert. Hier wird natürlich die Unterstützung <strong>der</strong> Skriptsprache durch den Webserver<br />
vorausgesetzt. Das bedeutet, dass nur Netztraffic <strong>in</strong> Höhe <strong>der</strong> generierten Seite anfällt<br />
und sich die Sicherheitsrisikten für die Endanwen<strong>der</strong> <strong>in</strong> Grenzen halten. Sie bekommen ja<br />
statisches HTML zu sehen.<br />
Diese Erweiterungen werden üblicherweise durch Module <strong>in</strong>tegriert. Bekanntestes Beispiel<br />
dürfte bei den serverseitigen Skriptsprachen PHP mit de<strong>in</strong>em Apache Modul mod php4<br />
se<strong>in</strong>. Weitere gängige serverseitige Programmiersprachen stehen mit ASP und JSP zur<br />
Verfügung.<br />
Auch bei serverseitigen Skriptsprachen sollten e<strong>in</strong>ige Aspekte beim <strong>E<strong>in</strong></strong>satz beachtet<br />
werden. Das permanente Generieren von Seiten ”on-demand” kann die komplette Rechenleistung<br />
auf dem Webserver beanspruchen, was je nach Zugriffscharakteristik zu <strong>E<strong>in</strong></strong>bußen<br />
<strong>in</strong> <strong>der</strong> Performance führen kann.<br />
9.9.1 Das Apache-PHP-Modul<br />
Das Modul mod php bietet die Möglichkeit, PHP-Code <strong>in</strong>nerhalb von HTML-Seiten auszuführen.<br />
Für Dateien, die vom PHP-Interpreter geparst werden sollen, muss e<strong>in</strong>e Endung<br />
def<strong>in</strong>iert werden (Abbildung 9.6).<br />
Der PHP-Interpreter gibt den e<strong>in</strong>gelesen HTML-Code unverän<strong>der</strong>t an den Client weiter.<br />
PHP-Code wird <strong>in</strong>terpretiert und das Ergebnis direkt an den Client weiter gegeben. Für<br />
den Client sieht das so aus, als würde er e<strong>in</strong>e re<strong>in</strong>e HTML-Seite erhalten.
140 KAPITEL 9. WEBSERVER<br />
<br />
AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php .php4<br />
AddType application/x-httpd-php-source .phps<br />
<br />
<br />
<br />
<br />
.<br />
Abbildung 9.6: mod php<br />
pr<strong>in</strong>t ’’’’.$titel.’’ ’’.$number.’’’’;<br />
Abbildung 9.7: PHP-Code<br />
9.10 SSI (Server Side Includes)<br />
Apache stellt mit SSI e<strong>in</strong>e Möglichkeit zur Verfügung, Internetseiten mit dynamischen Inhalten<br />
zu versehen. Um SSI verfügbar zu machen, muss zum<strong>in</strong>dest für e<strong>in</strong>en Teil <strong>der</strong> Dateihierachie<br />
<strong>in</strong>nerhalb von DocumentRoot die Option Include (siehe Kapitel 9.5.1) gesetzt<br />
se<strong>in</strong>. Ausserdem muss e<strong>in</strong> Dateityp an die Funktionalität gebunden werden (Abbildung 9.8).<br />
<br />
AddHandler server-parsed .shtml<br />
AddType text/shtml .shtml<br />
Options +Include<br />
<br />
Abbildung 9.8: mod ssi<br />
SSI-Befehle werden <strong>in</strong>nerhalb des HTML-Codes mit abgeschlossen.<br />
SSI-Dateien werden vom Server geparst und die SSI-Befehle entsprechend <strong>in</strong>terpretiert.<br />
Das Ergebniss <strong>der</strong> Interpretation wird an <strong>der</strong> Stelle des Befehls <strong>in</strong> die HTML-Seite<br />
e<strong>in</strong>gesetzt. SSI def<strong>in</strong>iert e<strong>in</strong>e Vielzahl von Umgebungsvariablen, bietet die Möglichkeit Systemprogramme<br />
auszuführen und be<strong>in</strong>haltet Befehle zur Flusskontrolle (Abbildung 9.9).<br />
Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur e<strong>in</strong>e Teilmenge <strong>der</strong><br />
TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache<br />
des mo<strong>der</strong>nen WWW.<br />
Der für den Anwen<strong>der</strong> sichtbare Vorgang des Abrufs e<strong>in</strong>es Dokuments besteht <strong>in</strong> <strong>der</strong><br />
Regel aus <strong>der</strong> <strong>E<strong>in</strong></strong>gabe e<strong>in</strong>er URI o<strong>der</strong> dem Anklicken e<strong>in</strong>es L<strong>in</strong>ks, gefolgt von <strong>der</strong> Darstellung<br />
<strong>der</strong> Daten o<strong>der</strong> e<strong>in</strong>er Fehlermeldung. Diese e<strong>in</strong>fache Art und Weise <strong>der</strong> Benutzung hat<br />
viel zur breiten Akzeptanz des Internets beigetragen.
9.11.<br />
ÜBERBLICK 141<br />
<br />
<br />
...<br />
<br />
...<br />
<br />
9.11 Überblick<br />
Abbildung 9.9: SSI-Code<br />
Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll <strong>der</strong><br />
Applikationsschicht HTTP spielen e<strong>in</strong>ige Bezeichnungen e<strong>in</strong>e Rolle:<br />
• Ressource - ist die Quelle e<strong>in</strong>es Web<strong>in</strong>halts, <strong>der</strong> durch e<strong>in</strong>e URI identifiziert werden<br />
kann. Der e<strong>in</strong>fachste Typ <strong>der</strong> Ressource ist e<strong>in</strong>e statische Datei im Filesystem des<br />
Web-Servers. Typ und Inhalt <strong>der</strong> Datei s<strong>in</strong>d beliebig. Außerdem kann die Ressource<br />
auch e<strong>in</strong> Programm se<strong>in</strong>, welches bei Aufruf e<strong>in</strong>en bestimmten Inhalt generiert und<br />
ausliefert.<br />
• URI - Uniform Resource Identifier bezeichnet den weltweit e<strong>in</strong>deutigen Name für e<strong>in</strong>e<br />
Ressource. z.B http://www.goe.net/<strong>in</strong>dex.php)<br />
• URL - Uniform Resource Locator ist e<strong>in</strong>e Unterart von URI, lokaler Name für die<br />
Ressource, sie bleiben anhand ihres Pfades vone<strong>in</strong>an<strong>der</strong> unterscheidbar.<br />
• URN - Uniform Ressource Name, e<strong>in</strong> spezialer Typ von URI, auch weltweiter e<strong>in</strong>deutig.<br />
z.B. urn:isbn:0-596-00962-3<br />
Die Enwicklung des WWW begann mit HTTP/0.9, e<strong>in</strong>er Prototyp-Version, die von Tim<br />
Berners-Lee am CERN <strong>in</strong> den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich<br />
die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard<br />
wurde. Es kamen Versionsnummern, HTTP-Hea<strong>der</strong>, zusätzliche Methoden (Head, Post, DE-<br />
LETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten h<strong>in</strong>zu. Das Nachrichtenformat<br />
von Antworten und Anfragen wird genauer spezifiziert.<br />
HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich<br />
jedoch nur um e<strong>in</strong>e rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen<br />
wird und <strong>der</strong> Server sich dem Client gegenüber nicht authentifizieren kann.<br />
Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich<br />
auf die Korrektur <strong>der</strong> Designfehler, das Spezifizieren von Semantik, e<strong>in</strong>igen Performace-<br />
Optimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Antworten<br />
pro TCP-Verb<strong>in</strong>dung gesendet werden. Für e<strong>in</strong> HTML-Dokument mit e<strong>in</strong>gebetteten<br />
Bil<strong>der</strong>n wird so nur e<strong>in</strong>e TCP-Verb<strong>in</strong>dung benötigt, wo vorher für jede Resource<br />
e<strong>in</strong>e separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads<br />
fortgesetzt werden. Über Cookies <strong>in</strong> den Hea<strong>der</strong>-Informationen können Anwendungen realisiert<br />
werden, die Status<strong>in</strong>formationen (Benutzere<strong>in</strong>träge, ...) zuordnen können. Dadurch<br />
können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfor<strong>der</strong>n, realisiert werden.<br />
Auch e<strong>in</strong>e Benutzerauthentifizierung ist möglich. Die Methoden s<strong>in</strong>d auch weiter entwickelt.<br />
HTTP/1.1 bietet e<strong>in</strong>e TRACE-Methode, mit <strong>der</strong> man den Weg zum Webserver<br />
überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver
142 KAPITEL 9. WEBSERVER<br />
über die verschiedenen Proxies h<strong>in</strong>weg zu ermitteln, e<strong>in</strong> Traceroute auf Anwendungsebene.<br />
HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen<br />
und Entwicklungen, die <strong>in</strong> den späten neunziger Jahren waren.<br />
9.12 HTTP-Kommunikation<br />
Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur e<strong>in</strong>e Teilmenge <strong>der</strong><br />
TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache<br />
des mo<strong>der</strong>nen WWW.<br />
Der für den Anwen<strong>der</strong> sichtbare Vorgang des Abrufs e<strong>in</strong>es Dokuments besteht <strong>in</strong> <strong>der</strong><br />
Regel aus <strong>der</strong> <strong>E<strong>in</strong></strong>gabe e<strong>in</strong>er URI o<strong>der</strong> dem Anklicken e<strong>in</strong>es L<strong>in</strong>ks, gefolgt von <strong>der</strong> Darstellung<br />
<strong>der</strong> Daten o<strong>der</strong> e<strong>in</strong>er Fehlermeldung. Diese e<strong>in</strong>fache Art und Weise <strong>der</strong> Benutzung hat<br />
viel zur breiten Akzeptanz des Internets beigetragen.<br />
9.13 Überblick<br />
Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll <strong>der</strong><br />
Applikationsschicht HTTP spielen e<strong>in</strong>ige Bezeichnungen e<strong>in</strong>e Rolle:<br />
• Ressource - ist die Quelle e<strong>in</strong>es Web<strong>in</strong>halts, <strong>der</strong> durch e<strong>in</strong>e URI identifiziert werden<br />
kann. Der e<strong>in</strong>fachste Typ <strong>der</strong> Ressource ist e<strong>in</strong>e statische Datei im Filesystem des<br />
Web-Servers. Typ und Inhalt <strong>der</strong> Datei s<strong>in</strong>d beliebig. Außerdem kann die Ressource<br />
auch e<strong>in</strong> Programm se<strong>in</strong>, welches bei Aufruf e<strong>in</strong>en bestimmten Inhalt generiert und<br />
ausliefert.<br />
• URI - Uniform Resource Identifier bezeichnet den weltweit e<strong>in</strong>deutigen Name für e<strong>in</strong>e<br />
Ressource. z.B http://www.goe.net/<strong>in</strong>dex.php)<br />
• URL - Uniform Resource Locator ist e<strong>in</strong>e Unterart von URI, lokaler Name für die<br />
Ressource, sie bleiben anhand ihres Pfades vone<strong>in</strong>an<strong>der</strong> unterscheidbar.<br />
• URN - Uniform Ressource Name, e<strong>in</strong> spezialer Typ von URI, auch weltweiter e<strong>in</strong>deutig.<br />
z.B. urn:isbn:0-596-00962-3<br />
Die Enwicklung des WWW begann mit HTTP/0.9, e<strong>in</strong>er Prototyp-Version, die von Tim<br />
Berners-Lee am CERN <strong>in</strong> den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich<br />
die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard<br />
wurde. Es kamen Versionsnummern, HTTP-Hea<strong>der</strong>, zusätzliche Methoden (Head, Post, DE-<br />
LETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten h<strong>in</strong>zu. Das Nachrichtenformat<br />
von Antworten und Anfragen wird genauer spezifiziert.<br />
HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich<br />
jedoch nur um e<strong>in</strong>e rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen<br />
wird und <strong>der</strong> Server sich dem Client gegenüber nicht authentifizieren kann.<br />
Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich<br />
auf die Korrektur <strong>der</strong> Designfehler, das Spezifizieren von Semantik, e<strong>in</strong>igen Performace-<br />
Optimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Antworten<br />
pro TCP-Verb<strong>in</strong>dung gesendet werden. Für e<strong>in</strong> HTML-Dokument mit e<strong>in</strong>gebetteten<br />
Bil<strong>der</strong>n wird so nur e<strong>in</strong>e TCP-Verb<strong>in</strong>dung benötigt, wo vorher für jede Resource<br />
e<strong>in</strong>e separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads<br />
fortgesetzt werden. Über Cookies <strong>in</strong> den Hea<strong>der</strong>-Informationen können Anwendungen realisiert<br />
werden, die Status<strong>in</strong>formationen (Benutzere<strong>in</strong>träge, ...) zuordnen können. Dadurch
9.14. HTTP-KOMMUNIKATION 143<br />
können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfor<strong>der</strong>n, realisiert werden.<br />
Auch e<strong>in</strong>e Benutzerauthentifizierung ist möglich. Die Methoden s<strong>in</strong>d auch weiter entwickelt.<br />
HTTP/1.1 bietet e<strong>in</strong>e TRACE-Methode, mit <strong>der</strong> man den Weg zum Webserver<br />
überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver<br />
über die verschiedenen Proxies h<strong>in</strong>weg zu ermitteln, e<strong>in</strong> Traceroute auf Anwendungsebene.<br />
HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen<br />
und Entwicklungen, die <strong>in</strong> den späten neunziger Jahren waren.<br />
9.14 HTTP-Kommunikation<br />
Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur e<strong>in</strong>e Teilmenge <strong>der</strong><br />
TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache<br />
des mo<strong>der</strong>nen WWW.<br />
Der für den Anwen<strong>der</strong> sichtbare Vorgang des Abrufs e<strong>in</strong>es Dokuments besteht <strong>in</strong> <strong>der</strong><br />
Regel aus <strong>der</strong> <strong>E<strong>in</strong></strong>gabe e<strong>in</strong>er URI o<strong>der</strong> dem Anklicken e<strong>in</strong>es L<strong>in</strong>ks, gefolgt von <strong>der</strong> Darstellung<br />
<strong>der</strong> Daten o<strong>der</strong> e<strong>in</strong>er Fehlermeldung. Diese e<strong>in</strong>fache Art und Weise <strong>der</strong> Benutzung hat<br />
viel zur breiten Akzeptanz des Internets beigetragen.<br />
9.15 Überblick<br />
Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll <strong>der</strong><br />
Applikationsschicht HTTP spielen e<strong>in</strong>ige Bezeichnungen e<strong>in</strong>e Rolle:<br />
• Ressource - ist die Quelle e<strong>in</strong>es Web<strong>in</strong>halts, <strong>der</strong> durch e<strong>in</strong>e URI identifiziert werden<br />
kann. Der e<strong>in</strong>fachste Typ <strong>der</strong> Ressource ist e<strong>in</strong>e statische Datei im Filesystem des<br />
Web-Servers. Typ und Inhalt <strong>der</strong> Datei s<strong>in</strong>d beliebig. Außerdem kann die Ressource<br />
auch e<strong>in</strong> Programm se<strong>in</strong>, welches bei Aufruf e<strong>in</strong>en bestimmten Inhalt generiert und<br />
ausliefert.<br />
• URI - Uniform Resource Identifier bezeichnet den weltweit e<strong>in</strong>deutigen Name für e<strong>in</strong>e<br />
Ressource. z.B http://www.goe.net/<strong>in</strong>dex.php)<br />
• URL - Uniform Resource Locator ist e<strong>in</strong>e Unterart von URI, lokaler Name für die<br />
Ressource, sie bleiben anhand ihres Pfades vone<strong>in</strong>an<strong>der</strong> unterscheidbar.<br />
• URN - Uniform Ressource Name, e<strong>in</strong> spezialer Typ von URI, auch weltweiter e<strong>in</strong>deutig.<br />
z.B. urn:isbn:0-596-00962-3<br />
Die Enwicklung des WWW begann mit HTTP/0.9, e<strong>in</strong>er Prototyp-Version, die von Tim<br />
Berners-Lee am CERN <strong>in</strong> den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich<br />
die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard<br />
wurde. Es kamen Versionsnummern, HTTP-Hea<strong>der</strong>, zusätzliche Methoden (Head, Post, DE-<br />
LETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten h<strong>in</strong>zu. Das Nachrichtenformat<br />
von Antworten und Anfragen wird genauer spezifiziert.<br />
HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich<br />
jedoch nur um e<strong>in</strong>e rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen<br />
wird und <strong>der</strong> Server sich dem Client gegenüber nicht authentifizieren kann.<br />
Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich<br />
auf die Korrektur <strong>der</strong> Designfehler, das Spezifizieren von Semantik, e<strong>in</strong>igen Performace-<br />
Optimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Ant-
144 KAPITEL 9. WEBSERVER<br />
worten pro TCP-Verb<strong>in</strong>dung gesendet werden. Für e<strong>in</strong> HTML-Dokument mit e<strong>in</strong>gebetteten<br />
Bil<strong>der</strong>n wird so nur e<strong>in</strong>e TCP-Verb<strong>in</strong>dung benötigt, wo vorher für jede Resource<br />
e<strong>in</strong>e separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads<br />
fortgesetzt werden. Über Cookies <strong>in</strong> den Hea<strong>der</strong>-Informationen können Anwendungen realisiert<br />
werden, die Status<strong>in</strong>formationen (Benutzere<strong>in</strong>träge, ...) zuordnen können. Dadurch<br />
können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfor<strong>der</strong>n, realisiert werden.<br />
Auch e<strong>in</strong>e Benutzerauthentifizierung ist möglich. Die Methoden s<strong>in</strong>d auch weiter entwickelt.<br />
HTTP/1.1 bietet e<strong>in</strong>e TRACE-Methode, mit <strong>der</strong> man den Weg zum Webserver<br />
überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver<br />
über die verschiedenen Proxies h<strong>in</strong>weg zu ermitteln, e<strong>in</strong> Traceroute auf Anwendungsebene.<br />
HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen<br />
und Entwicklungen, die <strong>in</strong> den späten neunziger Jahren waren.<br />
9.16 HTTP-Kommunikation<br />
9.17 Dokumentation<br />
<strong>E<strong>in</strong></strong>e umfangreiche und gut strukturierte Dokumentation f<strong>in</strong>det man unter:<br />
http://www.apache.org.<br />
Der wohl am meisten verbreitete Webserver (nicht nur <strong>in</strong> <strong>der</strong> L<strong>in</strong>ux-/<strong>Unix</strong>welt) ist <strong>der</strong><br />
Apache httpd. Er unterstützt e<strong>in</strong>e ganze Reihe von Skriptsprachen, wie Perl und PHP über<br />
Module, Sicherungsmechanismen, wie SSL und weitere Plug<strong>in</strong>s. Die Konfigurationsdateien<br />
(Hauptdatei: httpd.conf und SSL-Keys s<strong>in</strong>d unterhalb von /etc/httpd zu f<strong>in</strong>den.
Kapitel 10<br />
Mail<br />
Elektronische Post (E-Mail) ist sicher e<strong>in</strong>e <strong>der</strong> wichtigsten und beliebtesten Anwendungen<br />
im Internet. Der Austausch von Nachrichten ist dabei gleichzeitig e<strong>in</strong>er <strong>der</strong> ältesten Dienste<br />
im Netz. Um mit e<strong>in</strong>er L<strong>in</strong>ux-Masch<strong>in</strong>e Mail versenden und empfangen zu können, reicht<br />
es im e<strong>in</strong>fachsten Fall aus, die passenden <strong>E<strong>in</strong></strong>stellungen <strong>in</strong> e<strong>in</strong>em <strong>der</strong> vielen Mail-Clients<br />
vorzunehmen. Inzwischen stehen hierfür e<strong>in</strong>e ganze Reihe von Programmen zur Verfügung;<br />
angefangen mit den ausschliesslich konsolenbasierten Programmen, wie p<strong>in</strong>e o<strong>der</strong> mutt bis<br />
h<strong>in</strong> zu ”ausgewachsenen” grafischen Anwendungen, wie kmail, thun<strong>der</strong>bird bzw. mozilla<br />
o<strong>der</strong> evolution. Diese Programme, die zum <strong>E<strong>in</strong></strong>liefern von Mails an Server und zum Empfang<br />
dienen, werden als MUA (Mail User Agent) bezeichnet. Manchmal f<strong>in</strong>det man noch<br />
die Bezeichnung MRA (Mail Retrieval Agent). Dieses s<strong>in</strong>d Programme die automatisiert<br />
Mails von e<strong>in</strong>em Server holen und für den lokalen Zugriff auf dem System des Benutzers<br />
ablegen. Hierzu zählt beispielsweise fetchmail.<br />
Serverpgrogramme, die Mails weiterverschicken und <strong>in</strong> den lokalen Mailboxen <strong>der</strong> Emfänger<br />
ablegen, nennt man MTA (Mail Transfer Agent). Für letzteres kommen oft externe<br />
Programme zum <strong>E<strong>in</strong></strong>satz, die dann MDA (Mail Delivery Agent) heissen. MTAs lassen<br />
sich selbstverständlich mit L<strong>in</strong>ux als Server aufsetzen. Es stehen dabei mehrere Implementierungen<br />
des SMTP (Simple Mail Transfer Protocol) zur Verfügung. Das älteste und<br />
umfangreichste Paket ist sicherlich ”Sendmail” (sendmail), wobei wegen <strong>der</strong> kryptischen<br />
Bedienbarkeit sich weitere Implementationen, wie ”Exim” (exim) o<strong>der</strong> auch ”ProcMail”<br />
(procmail) durchsetzen konnten.<br />
Dies ist jedoch nur die e<strong>in</strong>e Seite des Postamtes. Der User holt sich se<strong>in</strong>e ”postlagernden”<br />
Sendungen entwe<strong>der</strong> mit POP3 (Post Office Protocol) ab und sieht sie e<strong>in</strong> bzw. verwaltet<br />
sie mit IMAP4.<br />
• SMTP (Simple Message Transfer Protocol) Es ist das Übertragungsprotokoll <strong>der</strong> Server<br />
untere<strong>in</strong>an<strong>der</strong> und wird von den Clients zun <strong>E<strong>in</strong></strong>liefern <strong>der</strong> Post benutzt.<br />
• POP (Post Office Protocol; <strong>der</strong>zeit aktuell <strong>in</strong> <strong>der</strong> Version 3) Die Clients benutzen es,<br />
um ihre Post vom Server abzuholen. Entgegen dem SMTP besteht dabei die Möglichkeit,<br />
die Mail auch teilweise auf dem Server zu verwalten (allerd<strong>in</strong>gs nur <strong>in</strong> beschränktem<br />
Maße).<br />
• IMAP (Internet Mail Access Protocol; <strong>der</strong>zeit aktuell <strong>in</strong> <strong>der</strong> Version 4) IMAP wird<br />
wie POP 3 von den Clients benutzt, um Mails vom Server abzuholen. Es bietet aber<br />
gegenüber POP wesentlich mehr Flexibilität bei <strong>der</strong> Verwaltung <strong>der</strong> Post, so z.B. die<br />
Möglichkeit, <strong>E<strong>in</strong></strong>gangskörbe auf dem Server zu verwalten o<strong>der</strong> auch Roam<strong>in</strong>g Users,<br />
also Anwen<strong>der</strong>, die von verschieden Orten aus auf den Server zugreifen wollen.<br />
145
146 KAPITEL 10. MAIL<br />
• LDAP (Lightweight Directory Access Protocol) <strong>E<strong>in</strong></strong>e “leichte” Variante des DAP (Directory<br />
Access Protocol), welches von X.500 für den Zugriff auf die Datenbasis benutzt<br />
wird. LDAP wird <strong>der</strong>zeit von den neueren Mailclients (Outlook, Netscape) unterstützt,<br />
um auf globale Verzeichnisdienste zuzugreifen (Netcenter, VeriSign, Bigfoot<br />
etc.)<br />
10.1 SMTP<br />
Im Folgenden geht es um das Pr<strong>in</strong>zip h<strong>in</strong>ter Mail Transfer Agents - Programme, die E-Mail<br />
entgegennehmen und weiterleiten. SMTP (Simple Mail Transfer Protokol) ist e<strong>in</strong> Protokoll<br />
zur Übertragung von E-Mail zwischen zwei MTAs. <strong>E<strong>in</strong></strong> MTA kann als Client (SMTP-Client)<br />
o<strong>der</strong> als Server (SMTP-Server) an e<strong>in</strong>er SMTP-Kommunikation beteiligt se<strong>in</strong>1 . Der SMTP-<br />
Client baut über <strong>Netzwerk</strong> e<strong>in</strong>e Verb<strong>in</strong>dung zu dem SMTP-Server auf, um an diesen E-<br />
Mail zu übertragen. Das Übertragen e<strong>in</strong>er E-Mail, <strong>in</strong>klusive <strong>der</strong> relevanten Daten, wird als<br />
Mailtransfer bezeichnet. <strong>E<strong>in</strong></strong>e abgeschlossene Kommunikation per SMTP wird als SMTP-<br />
Sitzung bezeichnet. Während e<strong>in</strong>er SMTP-Sitzung können mehrere E-Mails übertragen<br />
werden.<br />
SMTP def<strong>in</strong>iert Befehle und Antwort-Codes. Befehle werden vom SMTP-Client an den<br />
SMTP-Server gesendet. Mit diesen SMTP-Befehlen kann <strong>der</strong> Client die Kommunikation<br />
steuern. Antwort-Codes werden vom SMTP-Server als Reaktion auf die empfangenen Befehle<br />
an den SMTP-Client gesendet.<br />
SMTP enthält mittlerweile deutlich mehr Funktionalitäten, als zum e<strong>in</strong>fachen Übertragen<br />
von E-Mail nötig s<strong>in</strong>d.<br />
HELO hostname|doma<strong>in</strong> Mit HELO leitet <strong>der</strong> SMTP-Client die Kommunikation e<strong>in</strong>. Als<br />
Parameter soll <strong>der</strong> Hostname des Clients gesendet werden. Der Parameter muss vorhanden<br />
se<strong>in</strong>, wird aber nicht überprüft. 2<br />
EHLO hostname|doma<strong>in</strong> Identisch zu HELO, nur dass <strong>der</strong> Client damit zu verstehen gibt,<br />
dass er e<strong>in</strong>en erweiterten SMTP-Befehlssatz (des ESMTP) unterstützt. Der Server soll<br />
daraufh<strong>in</strong> mitteilen, welche Erweiterungen des Befehlssatzes für die Kommunikation<br />
zur Verfügung stehen.<br />
MAIL Dieser Befehl leitet das Übertragen e<strong>in</strong>er E-Mail e<strong>in</strong>. Als Parameter muss die Absen<strong>der</strong>adresse<br />
übergeben werden.<br />
RCPT Dieser Befehl kann beliebig oft auf MAIL folgen. Mit jedem Aufruf wird e<strong>in</strong>e<br />
Empfängeradresse übergeben. Es muss m<strong>in</strong>destens e<strong>in</strong> Aufruf von RCPT erfolgen.<br />
DATA Mit DATA signalisiert <strong>der</strong> SMTP-Client, dass er den Inhalt (Mail-Body) <strong>der</strong> E-<br />
Mail übertragen möchte. Nach e<strong>in</strong>er positiven Antwort des Servers wird die E-Mail<br />
zeilenweise übertragen. <strong>E<strong>in</strong></strong> Zeile, die ausschliesslich e<strong>in</strong>en Punkt (’.’) enthält, beendet<br />
die Übertragung des Inhalts <strong>der</strong> E-Mail.<br />
QUIT Um die Kommunikation zu beenden, sendet <strong>der</strong> SMTP-Client den Befehl QUIT.<br />
<strong>E<strong>in</strong></strong>e erschöpfende Beschreibung von SMTP liefert RFC 2821. RFCs (Requests for Comments)<br />
s<strong>in</strong>d öffentlich zugängliche Dokumente, die Standartprotokolle (<strong>in</strong> IP-basierten Net-<br />
1 siehe Client-Server-Modell<br />
2 Zu den Begriffen Host und Doma<strong>in</strong> siehe Kapitel DNS.
10.1. SMTP 147<br />
zen) def<strong>in</strong>ieren. Diese Dokumente werden von <strong>der</strong> Internet Eng<strong>in</strong>eer<strong>in</strong>g Task Force (IETF)<br />
veröffentlicht und s<strong>in</strong>d über verschiedene Webseiten verfügbar3 .<br />
Die Übertragung von E-Mail ist e<strong>in</strong>er <strong>der</strong> ältesten und meist genutzten <strong>Netzwerk</strong>-<br />
Dienste. 1971 entwickelte Ray Toml<strong>in</strong>son e<strong>in</strong> Verfahren zur Übertragung von Textnachrichten<br />
über e<strong>in</strong> <strong>Netzwerk</strong>. Mit den Programmen SNDMSG und READMAIL war die erste<br />
Komunikation per E-Mail möglich. Im Laufe <strong>der</strong> Jahre entwickelte sich das Verfahren stark<br />
weiter.<br />
Jonathan B. Postel veröffentlichte 1981 die erste Spezifikation von SMTP als RFC 788.<br />
1982 wurde diese durch RFC 821 (auch von Postel) ersetzt. Anfang <strong>der</strong> 90er Jahre (1993-<br />
1995) wurden mehrere Erweiterungen zu SMTP spezifiziert, die 2001 schliesslich zu RFC<br />
2821 führten, welches die vorherigen ersetzt.<br />
10.1.1 E-Mail-Adresse<br />
<strong>E<strong>in</strong></strong>e E-Mail-Adresse besteht aus e<strong>in</strong>em Local Part und e<strong>in</strong>em Doma<strong>in</strong> Part. Beide werden<br />
durch e<strong>in</strong> ’@’-Zeichen vone<strong>in</strong>an<strong>der</strong> getrennt. Der Local Part besteht aus dem - auf<br />
dem empfangenden System bekannten - Namen des Empfängers. Der Doma<strong>in</strong> Part bezeichnet<br />
die Empfänger-, bzw. die Absen<strong>der</strong>doma<strong>in</strong>. Er besteht aus e<strong>in</strong>er weltweit e<strong>in</strong>deutigen<br />
Doma<strong>in</strong>bezeichnung. Diese Doma<strong>in</strong>bezeichnung identifiziert das empfangende System und<br />
muss über DNS auflösbar se<strong>in</strong> (siehe DNS). (RFC 2142)<br />
10.1.2 Versenden e<strong>in</strong>er E-Mail<br />
Am Versand e<strong>in</strong>er E-Mail s<strong>in</strong>d mehrere sogenannte Agenten beteiligt. <strong>E<strong>in</strong></strong> Programm zum<br />
Lesen und Verfassen von E-Mail wird als Mail User Agent (MUA) bezeichnet. <strong>E<strong>in</strong></strong>e E-<br />
Mail kann während des Transfers mehrere Mail Transfer Agents (MTA, siehe Kapitel<br />
SMTP) durchlaufen. Als Mail Delivery Agent (MDA) bezeichnet man e<strong>in</strong> Programm,<br />
das E-Mail lokal für den Empfänger verfügbar macht. <strong>E<strong>in</strong></strong> MDA bekommt e<strong>in</strong>e E-Mail von<br />
dem lokalen MTA übergeben und speichert diese <strong>in</strong> <strong>der</strong> Inbox 4 des Empfängers.<br />
Als Outgo<strong>in</strong>g-SMTP-Server e<strong>in</strong>er Doma<strong>in</strong> bezeichnet man e<strong>in</strong>en MTA, an den alle zu<br />
versendenden E-Mails e<strong>in</strong>er Doma<strong>in</strong> per SMTP übertragen werden. Dieser übernimmt die<br />
weitere Auslieferung.<br />
<strong>E<strong>in</strong></strong> Mailexchanger ist e<strong>in</strong> MTA, <strong>der</strong> für die Annahme von E-Mail für e<strong>in</strong>e bestimmte<br />
Doma<strong>in</strong> zuständig ist. Der Name und damit die IP-Adresse des Mailexchangers e<strong>in</strong>er<br />
Doma<strong>in</strong> muss über DNS <strong>in</strong> e<strong>in</strong>em MX-Record verfügbar se<strong>in</strong> (siehe Kapitel DNS). Der<br />
Mailexchanger verfügt über Informationen zur weiteren Auslieferung e<strong>in</strong>er E-Mail <strong>in</strong>nerhalb<br />
se<strong>in</strong>er Doma<strong>in</strong>. Diese kann per SMTP an e<strong>in</strong>en weiteren MTA o<strong>der</strong> an e<strong>in</strong>en lokalen<br />
MDA erfolgen.<br />
<strong>E<strong>in</strong></strong>e <strong>in</strong> e<strong>in</strong>em MUA verfasste E-Mail wird an den lokalen MTA übergeben, <strong>der</strong> sie<br />
per SMTP an den Outgo<strong>in</strong>g-SMTP-Server se<strong>in</strong>er Doma<strong>in</strong> übermittelt 5 . Dieser wie<strong>der</strong>um<br />
sendet sie an den Mailexchanger <strong>der</strong> Empfängerdoma<strong>in</strong>, welcher für die lokale Zustellung<br />
<strong>der</strong> E-Mail <strong>in</strong> die Inbox des Empfängers zuständig ist.<br />
Tabelle 10.1 zeigt e<strong>in</strong>e typische e<strong>in</strong>fache SMTP-Sitzung zum Übertragen e<strong>in</strong>er E-Mail.<br />
Der SMTP-Client nimmt Kontakt zum SMTP-Server auf, <strong>der</strong> die Kontaktaufnahme mit<br />
dem Antwort-Code 220 und Informationen über sich selbst bestätigt. Daraufh<strong>in</strong> leitet <strong>der</strong><br />
Client die Kommunikation mit HELO e<strong>in</strong>. Die mit HELO übergebene Zeichenkette soll <strong>der</strong><br />
Identifikation dienen, wird aber an dieser Stelle ungeprüft übernommen. Wie es sich für<br />
3 http://www.ietf.org/rfc, http://www.faqs.org/rfcs u.a.<br />
4 Im Deutschen oft e<strong>in</strong>fach als Poste<strong>in</strong>gang bezeichnet.<br />
5 Viele MUAs s<strong>in</strong>d <strong>in</strong> <strong>der</strong> Lage, die Aufgabe e<strong>in</strong>es SMTP-Clients selbst zu übernehmen.
148 KAPITEL 10. MAIL<br />
Server: 220 golem.ehlers-schwichtenberg.<strong>in</strong>fo ESMTP Postfix<br />
Client: HELO schwichtenberg.net<br />
S: 250 golem.ehlers-schwichtenberg.<strong>in</strong>fo<br />
C: MAIL FROM: <br />
S: 250 Ok<br />
C: RCPT TO: <br />
S: 250 Ok<br />
C: DATA<br />
S: 354 End data with .<br />
C: Der Mail-Body<br />
.<br />
S: 250 Ok: queued as C1AD92BC346<br />
C: QUIT<br />
S: 221 Bye<br />
Tabelle 10.1: <strong>E<strong>in</strong></strong>fache Übertragung e<strong>in</strong>e E-Mail mit SMTP<br />
e<strong>in</strong>en höflichen Server gehört, antwortet dieser mit se<strong>in</strong>er eigenen Identifikation. Mit dem<br />
Befehl MAIL wird die Übertragung <strong>der</strong> eigentlichen E-Mail - <strong>der</strong> Mailtransfer - begonnen.<br />
Als Parameter werden ’FROM:’ und die Absen<strong>der</strong>adresse <strong>in</strong> spitzen Klammern übergeben.<br />
Nun kann <strong>der</strong> Client wie<strong>der</strong>holt Empfängeradressen mit dem Befehl RCPT und ’TO:’ und<br />
<strong>der</strong> Empfängeradresse <strong>in</strong> spitzen Klammern übertragen. Sowohl <strong>der</strong> Befehl MAIL als auch<br />
je<strong>der</strong> Aufruf von RCPT wird bei Erfolg von dem Server mit dem Antwort-Code 250 OK<br />
beantwortet. <strong>E<strong>in</strong></strong>ige SMTP-Server überprüfen die Existenz <strong>der</strong> Absen<strong>der</strong>adresse. In jedem<br />
Fall sollte <strong>der</strong> Server überprüfen, ob er für die Zustellung von E-Mail für die Empfängeradressen<br />
zuständig ist. Bei negativem Ergebnis sendet <strong>der</strong> Server e<strong>in</strong>en Fehler-Code, um<br />
die Annahme <strong>der</strong> E-Mail abzulehnen. 4xy bezeichnet e<strong>in</strong>en temporären Fehler; <strong>der</strong> Client<br />
kann zu e<strong>in</strong>em späteren Zeitpunkt erneut versuchen, die Mail an diesen Server auszuliefern.<br />
5xy bezeichnet e<strong>in</strong>en permanenten Fehler; <strong>der</strong> Client braucht ke<strong>in</strong>e erneute Zustellung<br />
dieser Mail an diesen Server zu versuchen. <strong>E<strong>in</strong></strong>en SMPT-Server, <strong>der</strong> E-Mail für jegliche<br />
Empfängeradresse annimmt, bezeichnet man als Open-Relay (siehe Kapitel 10.1.5).<br />
S<strong>in</strong>d alle Empfängeradresse übermittelt, wird die eigentliche Nachricht, <strong>der</strong> Mail-Body<br />
(siehe Kapitel 10.1.3) übertragen. Der Client teilt dem Server mit dem Befehl DATA mit,<br />
dass er den Mail-Body übertragen möchte. Der Server sendet den Antwort-Code 354, um<br />
zu signalisieren, dass <strong>der</strong> Client mit dem zeilenweisen Übertragen <strong>der</strong> Nachricht fortfahren<br />
kann. Diese Übertragung wird mit e<strong>in</strong>er Zeile, die e<strong>in</strong>en e<strong>in</strong>zelnen Punkt (’.’) enthält,<br />
beendet, woraufh<strong>in</strong> <strong>der</strong> Server den Empfang mit 250 OK und <strong>der</strong> Identifikationsnummer,<br />
unter <strong>der</strong> er die Mail verwaltet, bestätigt. Damit ist <strong>der</strong> Mailtransfer beendet. Nun kann<br />
<strong>der</strong> Client mit MAIL e<strong>in</strong>en weiteren Mailtransfer e<strong>in</strong>leiten o<strong>der</strong> die Verb<strong>in</strong>dung mit QUIT<br />
beenden.<br />
10.1.3 Mail-Body<br />
Der Mail-Body besteht aus Hea<strong>der</strong>zeilen mit Informationen über die E-Mail und - getrennt<br />
durch e<strong>in</strong>e Leerzeile - dem eigentlichen Text <strong>der</strong> Nachricht. Die meisten Hea<strong>der</strong>zeilen werden<br />
von MUAs nicht angezeigt 6 . Die während <strong>der</strong> SMTP-Sitzung übertragen E-Mail-Adressen<br />
dienen <strong>in</strong> erster L<strong>in</strong>ie den MTAs zur Auslieferung bzw. zur Rückführung e<strong>in</strong>er E-Mail.<br />
6 Meistens ist es möglich, die Darstellung des kompletten Hae<strong>der</strong>s e<strong>in</strong>zuschalten.
10.1. SMTP 149<br />
Return-Path: <br />
X-Orig<strong>in</strong>al-To: fschwic@ehlers-schwichtenberg.<strong>in</strong>fo<br />
Delivered-To: fschwic@golem.ehlers-schwichtenberg.<strong>in</strong>fo<br />
Received: from schwichtenberg.net (shani.schwichtenberg.net [10.1.1.1])<br />
by golem.ehlers-schwichtenberg.<strong>in</strong>fo (Postfix) with SMTP id<br />
C1AD92BC346<br />
for ; Tue, 9 Mar 2004<br />
21:05:52 +0100 (CET)<br />
Message-Id: <br />
Date: Tue, 9 Mar 2004 21:05:52 +0100 (CET)<br />
From: fschwic@schwichtenberg.net<br />
To: undisclosed-recipients:;<br />
Der Mail-Body<br />
Tabelle 10.2: Die E-Mail aus Tabelle 10.1<br />
Steht nach e<strong>in</strong>em Mailtransfer <strong>in</strong> dem Mail-Body noch ke<strong>in</strong>e mit ’From:’ beg<strong>in</strong>nende<br />
Zeile, kann <strong>der</strong> MTA diese Zeile mit <strong>der</strong> Absen<strong>der</strong>adresse e<strong>in</strong>fügen. Date, Subject, To,<br />
From o<strong>der</strong> Äquivalente sollten <strong>in</strong> e<strong>in</strong>er E-Mail von vornhere<strong>in</strong> vorhanden se<strong>in</strong> (RFC 822);<br />
sie können schon bei <strong>der</strong> ersten Auslieferung <strong>der</strong> E-Mail per SMTP im Mail-Body stehen.<br />
Die SMTP-Sitzung aus Tabelle 10.1 führt dazu, dass die E-Mail aus Tabelle 10.2 <strong>in</strong> <strong>der</strong><br />
Inbox des Empfängers abgespeichert wird, wobei <strong>der</strong> Empfänger <strong>in</strong> dem MUA, mit dem er<br />
se<strong>in</strong>e E-Mail liest, normalerweise nur die Zeilen “Date: ...”, “From: ...”, “To: ...” und den<br />
Text <strong>der</strong> Nachricht angezeigt bekommt.<br />
<strong>E<strong>in</strong></strong> MTA fügt zu je<strong>der</strong> empfangenen E-Mail Hae<strong>der</strong>zeilen h<strong>in</strong>zu, die bei weiteren Übertragungen<br />
per SMTP Bestandteil des Mail-Body s<strong>in</strong>d.<br />
10.1.4 E-Mail Hea<strong>der</strong><br />
Der Hea<strong>der</strong> e<strong>in</strong>er E-Mail besteht aus mehreren Hea<strong>der</strong>zeilen. <strong>E<strong>in</strong></strong>e Hea<strong>der</strong>zeile ist e<strong>in</strong> <strong>E<strong>in</strong></strong>trag,<br />
<strong>der</strong> mit e<strong>in</strong>em Bezeichner gefolgt von e<strong>in</strong>em Doppelpunkt und e<strong>in</strong>em Leerzeichen<br />
beg<strong>in</strong>nt. Besteht e<strong>in</strong>e Hea<strong>der</strong>zeile aus mehreren Textzeilen, so müssen die folgenden Textzeilen<br />
mit e<strong>in</strong>em Whitespace beg<strong>in</strong>nen.<br />
Bezeichner für Hea<strong>der</strong>zeilen, die <strong>in</strong> ke<strong>in</strong>em Standart def<strong>in</strong>iert s<strong>in</strong>d, müssen mit ’X-’<br />
beg<strong>in</strong>nen (RFC 2821).<br />
Return-Path<br />
<strong>E<strong>in</strong></strong> MTA, <strong>der</strong> e<strong>in</strong>e E-Mail endgültig zustellt 7 , muss die Zeile Return-Path: an<br />
den Anfang <strong>der</strong> E-Mail setzen. Die e<strong>in</strong>zutragende Adresse ist die während des Mailtransfers<br />
mit MAIL übergebene Absen<strong>der</strong>adresse (RFC 2821).<br />
Received<br />
Je<strong>der</strong> MTA, <strong>der</strong> e<strong>in</strong>e E-Mail angenommen hat, muss vor <strong>der</strong> weiteren Auslieferung e<strong>in</strong>e<br />
Received-Zeile an den Anfang des Mail-Body schreiben. <strong>E<strong>in</strong></strong>e solche Zeile ist <strong>in</strong> drei Bereiche<br />
7 “f<strong>in</strong>al delivery”; wenn <strong>der</strong> MTA die E-Mail an e<strong>in</strong>en MDA übergibt o<strong>der</strong> <strong>in</strong> an<strong>der</strong>er Form aus dem<br />
SMTP-System nimmt.
150 KAPITEL 10. MAIL<br />
unterteilt:<br />
1. Informationen über den SMTP-Client e<strong>in</strong>geleitet mit “from”. Dieser Bereich enthält<br />
die Identifikation des Clients. In <strong>der</strong> Regel ist das die mit HELO o<strong>der</strong> EHLO übergebene<br />
Zeichenkette. Zusätzlich sollen <strong>in</strong> runden Klammern TCP-Informationen über den<br />
Client e<strong>in</strong>gefügt werden. Die meisten MTAs fügen die IP-Adresse des SMTP-Client<br />
(<strong>in</strong> eckigen Klammern) und den daraus resultierenden Hostnamen e<strong>in</strong>.<br />
2. Informationen über den SMTP-Server selbst. Beg<strong>in</strong>nend mit “by” werden <strong>der</strong> Hostname<br />
des Servers und Informationen über den Empfang (meistens Art <strong>der</strong> Software,<br />
Empfangsprotokoll und Identifikationsnummer <strong>der</strong> E-Mail im Server) e<strong>in</strong>gefügt.<br />
3. Informationen über den Empfang <strong>der</strong> E-Mail mit “for”, gefolgt von <strong>der</strong> mit RCPT<br />
übergebenen Empfängeradresse und - getrennt durch e<strong>in</strong> Semikolon - <strong>der</strong> Zeitpunkt<br />
des Empfangs.<br />
Weitere Hea<strong>der</strong>zeilen<br />
“Massage-Id:” soll von dem System erzeugt werden, das die E-Mail erstellt. Diese Zeile ist<br />
nicht zw<strong>in</strong>gend erfor<strong>der</strong>lich.<br />
Date, From, To und Subject sollen von vornhere<strong>in</strong> Bestandteil e<strong>in</strong>er E-Mail se<strong>in</strong> (RFC<br />
822). Der MUA <strong>in</strong> dem die E-Mail erstellt wurde sollte diese Hea<strong>der</strong>zeilen e<strong>in</strong>tragen. Wenn<br />
diese nicht vorhanden s<strong>in</strong>d, kann e<strong>in</strong> MTA sie e<strong>in</strong>fügen.<br />
Die <strong>E<strong>in</strong></strong>träge “X-Orig<strong>in</strong>al-To:” und “Deliverd-To:” aus Tabelle 10.2 werden speziell von<br />
dem MTA Postfix e<strong>in</strong>gefügt. Sie wi<strong>der</strong>sprechen dem Standart nicht, s<strong>in</strong>d aber auch nicht<br />
verlangt.<br />
10.1.5 Open-Relay<br />
<strong>E<strong>in</strong></strong> Open-Relay ist e<strong>in</strong> Mailexchanger o<strong>der</strong> e<strong>in</strong> Outgo<strong>in</strong>g-SMTP-Server, <strong>der</strong> E-Mail von<br />
beliebigen MTAs für beliebige Empfängeradressen annimmt und weiterleitet. Da die Angabe<br />
<strong>der</strong> Absen<strong>der</strong>adressen während e<strong>in</strong>er SMTP-Sitzung nur unzureichend o<strong>der</strong> gar nicht<br />
überprüft wird, ermöglicht e<strong>in</strong> Open-Relay je<strong>der</strong>mann das anonyme Versenden von E-Mail<br />
(siehe Kapitel 10.1.6).<br />
<strong>E<strong>in</strong></strong> Mailexchanger sollte nur E-Mail annehmen, <strong>der</strong>en Empfängerdoma<strong>in</strong> <strong>in</strong> se<strong>in</strong>em<br />
Zuständigkeitsbereich liegt.<br />
<strong>E<strong>in</strong></strong> Outgo<strong>in</strong>g-SMTP-Server sollte E-Mail nur von authorisierten MTAs zur Weiterleitung<br />
annehmen.<br />
10.1.6 Sicherheit<br />
Die Tatsache, dass unverschlüsselt übertragene E-Mail quasi öffentlich lesbar ist, wird mittlerweile<br />
häufig diskutiert und soll hier nicht erneut aufgegriffen werden. An dieser Stelle<br />
<strong>in</strong>teressant ist die Betrachtung <strong>der</strong> Zuverlässigkeit <strong>der</strong> Informationen, die <strong>in</strong> e<strong>in</strong>er E-Mail<br />
vorhanden s<strong>in</strong>d, wenn sie beim Empfänger ankommt (siehe Kapitel 10.1.3) und wie SMTP<br />
mißbraucht werden kann.<br />
Das Abholen von E-Mail e<strong>in</strong>es Benutzers von se<strong>in</strong>er Inbox ist nicht Bestandteil <strong>der</strong><br />
SMTP-Übertragung. Der Benutzer kann direkten Zugriff auf se<strong>in</strong>e Mailbox haben o<strong>der</strong><br />
Protokolle wie POP o<strong>der</strong> IMAP benutzen. In diesem Bereich geht es hauptsächlich darum,<br />
dass ke<strong>in</strong> Unbefugter auf die Mailbox zugreifen kann.
10.1. SMTP 151<br />
Hat e<strong>in</strong> Benutzer e<strong>in</strong>e E-Mail verfasst, wird er diese <strong>in</strong> <strong>der</strong> Regel per SMTP an den<br />
Outgo<strong>in</strong>g-SMTP-Server se<strong>in</strong>er Doma<strong>in</strong> o<strong>der</strong> se<strong>in</strong>es Provi<strong>der</strong>s übertragen. Die Übermittlung<br />
an e<strong>in</strong>en Outgo<strong>in</strong>g-SMTP-Server des Provi<strong>der</strong>s ist unproblematisch, da <strong>der</strong> Provi<strong>der</strong><br />
se<strong>in</strong>e Kunden kennt und den Zugriff über die Kenntnis <strong>der</strong> IP-Adresse des Kundenrechners<br />
o<strong>der</strong> über die Vergabe e<strong>in</strong>es Passwortes e<strong>in</strong>schränken kann. Gleiches gilt für den Outgo<strong>in</strong>g-<br />
SMTP-Server e<strong>in</strong>er Doma<strong>in</strong>, wobei hier die SMTP-Kommunikation sogar über e<strong>in</strong> geschlossenes<br />
<strong>in</strong>ternes <strong>Netzwerk</strong> erfolgt.<br />
In Bereichen, wo e<strong>in</strong>gehende E-Mail <strong>in</strong> e<strong>in</strong>em <strong>in</strong>ternen <strong>Netzwerk</strong> verteilt werden muss,<br />
gibt es e<strong>in</strong>en (o<strong>der</strong> auch mehrere) Mailexchanger, <strong>der</strong> E-Mail aus dem Internet annimmt. Die<br />
<strong>in</strong>terne Weiterleitung erfolgt <strong>in</strong> e<strong>in</strong>em abgeschlossenen <strong>Netzwerk</strong>, <strong>in</strong> dem sich alle Rechner<br />
vertrauen können.<br />
In den frühen Zeiten des Internet war es notwendig, E-Mail über e<strong>in</strong>e Kette von SMTP-<br />
Servern zu übertragen, da sich nicht alle Rechner direkt erreichen konnten. Aus dieser Zeit<br />
stammt <strong>der</strong> Begriff des Mailrout<strong>in</strong>g. Heutzutage ist die Entwicklung <strong>der</strong> <strong>Netzwerk</strong>technologie<br />
und des Internet so weit, dass sich alle im Internet bef<strong>in</strong>dlichen Rechner gegenseitig<br />
erreichen können8 .<br />
Man kann also die sicherheitskritische Betrachtung des E-Mail-Verkehrs auf die Kommunikation<br />
zwischen Outgo<strong>in</strong>g-SMTP-Server, <strong>in</strong> <strong>der</strong> Rolle des SMTP-Client, und Mailexchanger<br />
als SMTP-Server reduzieren. Es s<strong>in</strong>d durchaus Systemarchitekturen denkbar, die<br />
von e<strong>in</strong>em so e<strong>in</strong>fachen Modell abweichen. Diese lassen sich aber darauf zurückführen.<br />
Die Angaben, die von e<strong>in</strong>em SMTP-Client während e<strong>in</strong>er SMTP-Sitzung gemacht werden,<br />
s<strong>in</strong>d fast beliebig. Nicht e<strong>in</strong>mal an Stellen, an denen e<strong>in</strong>e E-Mail-Adresse erwartet wird,<br />
muss wirklich e<strong>in</strong>e übertragen werden. Enthält e<strong>in</strong>e Zeichenkette, die als E-Mail-Adresse<br />
<strong>in</strong>terpretiert wird, ke<strong>in</strong> ’@’-Zeichen, geht <strong>der</strong> SMTP-Server normalerweise davon aus, dass<br />
es sich um e<strong>in</strong>en Benutzernamen <strong>in</strong>nerhalb se<strong>in</strong>es Systems handelt und hängt e<strong>in</strong> ’@’ gefolgt<br />
von se<strong>in</strong>em Doma<strong>in</strong>namen an. Die Identifikation des HELO o<strong>der</strong> EHLO-Befehls ist<br />
vollkommen beliebig.<br />
Empfängeradressen zu fälschen macht wenig S<strong>in</strong>n. Je<strong>der</strong> möchte, dass e<strong>in</strong>e von ihm<br />
verschickte E-Mail irgendwo ankommt.<br />
<strong>E<strong>in</strong></strong> ehrlicher Benutzer hat ke<strong>in</strong>en Grund, e<strong>in</strong>e falsche Absen<strong>der</strong>adresse anzugeben. Er<br />
hat Interesse daran, dass <strong>der</strong> Empfänger <strong>der</strong> E-Mail ihm antworten kann und möchte auch<br />
benachrichtigt werden, wenn bei <strong>der</strong> Übertragung <strong>der</strong> Nachricht etwas schief geht.<br />
<strong>E<strong>in</strong></strong> Versen<strong>der</strong> von unerwünschter E-Mail wird se<strong>in</strong>e Identität verschleiern. Er verschickt<br />
<strong>in</strong> <strong>der</strong> Regel sehr viele solche Nachrichten. Er muss damit rechnen, dass die Empfänger auf<br />
se<strong>in</strong>e Nachricht negativ antworten und so aufgrund ihrer Vielzahl se<strong>in</strong> Mailsystem lahmlegen9<br />
. Auch wäre es unter bestimmten Bed<strong>in</strong>gungen möglich, ihn juristisch zur Verantwortung<br />
zu ziehen.<br />
Alle an<strong>der</strong>en Werte e<strong>in</strong>er E-Mail s<strong>in</strong>d schon während <strong>der</strong> Übertragung Bestandteil des<br />
Mail-Body (siehe Kapitel 10.1.3). Der Versen<strong>der</strong> e<strong>in</strong>er E-Mail kann sich Werte für Absen<strong>der</strong><br />
(“From:”), Empfänger (“To:”), Betreff (“Subject:”) usw. und beliebige “Received:”-Zeilen<br />
ausdenken.<br />
Die e<strong>in</strong>zigen verlässlichen Angaben s<strong>in</strong>d die <strong>in</strong> <strong>der</strong> Received-Zeile des letzten MTA. Da<br />
dieser das System ist, von dem man se<strong>in</strong>e E-Mail direkt bezieht, kann man diesen <strong>E<strong>in</strong></strong>trägen<br />
8 Rechner h<strong>in</strong>ter e<strong>in</strong>em maskierenden Gateway muss man durchaus als “nicht im Internet bef<strong>in</strong>dlich”<br />
ansehen. Und solche, die sich h<strong>in</strong>ter e<strong>in</strong>er Firewall bef<strong>in</strong>den, s<strong>in</strong>d unter Umständen nicht erreichbar, obwohl<br />
sie sich im eigentlichen S<strong>in</strong>n im Internet bef<strong>in</strong>den. Nur bedeutet die Tatsache, dass e<strong>in</strong> Rechner e<strong>in</strong>en<br />
Verb<strong>in</strong>dungsaufbau ablehnt, natürlich nicht, dass man ihn nicht erreichen kann.<br />
9 Was für e<strong>in</strong>en Nutzen das Versenden e<strong>in</strong>er solchen Nachricht für den Absen<strong>der</strong> haben kann, soll hier<br />
nicht diskutiert werden. Es reicht aus, dass sowohl die Betreiber von Mailservern als auch die Empfänger<br />
maßgeblich belästigt werden.
152 KAPITEL 10. MAIL<br />
vertrauen.<br />
Kommando Argument Beschreibung<br />
HELO Systemname Beg<strong>in</strong>n, Name des sendenden Systems<br />
MAIL From: Absen<strong>der</strong>adresse Beg<strong>in</strong>n <strong>der</strong> Übermittlung<br />
RCPT To: Empfängeradresse Adressat <strong>der</strong> E-Mail<br />
DATA Daten... Brieftext, Ende durch e<strong>in</strong>e Zeile mit ”.”<br />
HELP Topic Hilfestellung<br />
VRFY Mailadresse Mailadresse verifizieren<br />
EXPN Mailadresse Mailadresse expandieren (z. B. Liste)<br />
RSET Senden abbrechen, Zurücksetzen<br />
NOOP nichts tun<br />
QUIT Verb<strong>in</strong>dung beenden<br />
10.2 sendmail<br />
Tabelle 10.3: Grundsätzliche SMTP-Befehle<br />
Das Paket sendmail ist e<strong>in</strong>es <strong>der</strong> ältesten INTERNET-Programme und wohl auch das mit<br />
dem schlechtesten Ruf. Am Anfang war es aufgrund diverser Sicherheitslücken e<strong>in</strong> beliebtes<br />
<strong>E<strong>in</strong></strong>falltor für Hacker und Co.; bei den Adm<strong>in</strong>istratoren ist es wegen se<strong>in</strong>er schwierigen Konfiguration<br />
gefürchtet. Dennoch hat es sich zum Standard für UNIX/LINUX-MTAs erhoben<br />
und verdient auf jeden Fall e<strong>in</strong>e genauere Betrachtung. Mit den Jahren ist sendmail, was<br />
die Sicherheit anbelangt, wesentlich besser geworden. Da es als OpenSource zur Verfügung<br />
steht, hatten Gott und die Welt Zeit und Muße, den Quellcode auf Fehler abzuklopfen und<br />
diese auszumerzen. Sendmail ist daher bei anständiger Konfiguration nicht unsicherer als<br />
an<strong>der</strong>e Dienste auf e<strong>in</strong>em UNIX-Server. Was die Konfiguration angeht, so haben sich die<br />
Programmierer die Kritik zu Herzen genommen und e<strong>in</strong> Tool entwickelt, welches die Arbeit<br />
erleichtert. Dieses Tool namens IDA ist bei SuSE im sendmail-Paket bereits enthalten und<br />
wird <strong>in</strong>tern von YaST aufgerufen.<br />
10.3 exim<br />
Die Installation e<strong>in</strong>es eigenen Mailservers auf e<strong>in</strong>er L<strong>in</strong>ux-Masch<strong>in</strong>e hat den entscheidenden<br />
Vorteil, dass man die von selbst o<strong>der</strong> von an<strong>der</strong>en erstellten Mails je<strong>der</strong>zeit abschicken<br />
kann. Somit muss nicht je<strong>der</strong> e<strong>in</strong>zelne Client mit e<strong>in</strong>em externen Mailserver die Verb<strong>in</strong>dung<br />
aufbauen, son<strong>der</strong>n es lassen sich firmen-/organisationseigene Maildienste realisieren. Dazu<br />
muss aber zunächst z.B. exim neu konfiguriert werden (z.B. mittels eximconfig. Hierfür<br />
muss man über SuperUser-Rechte verfügen.):<br />
hermes:/# eximconfig<br />
You already have an exim configuration. Cont<strong>in</strong>u<strong>in</strong>g with eximconfig<br />
will overwrite it. It will not keep any local modifications you have made.<br />
If that is not your <strong>in</strong>tention, you should break out now. If you do cont<strong>in</strong>ue,<br />
then your exist<strong>in</strong>g file will be renamed with .O on the end.<br />
[---Press return---]
10.4. POP 153<br />
Kommando Argument Beschreibung<br />
USER Name Das Argument identifiziert e<strong>in</strong>e Mailbox<br />
PASS Str<strong>in</strong>g Der Str<strong>in</strong>g enthält e<strong>in</strong> Mailbox-spezifisches Passwort<br />
QUIT Beendet die Verb<strong>in</strong>dung<br />
Tabelle 10.4: Kommandos im ”Authorization State”<br />
Kommando Argument Beschreibung<br />
STAT Liefert die Anzahl <strong>der</strong> gespeicherten Mails und die Größe<br />
<strong>der</strong> Mailbox zurück (<strong>in</strong> Byte)<br />
LIST Nummer Liefert die Nummer und Größe (<strong>in</strong> Bytes) aller Mails<br />
zurück Wird als Argument e<strong>in</strong>e Mail-Nummer angegeben,<br />
wird nur die Größe dieser Mail ausgegeben<br />
RETR Nummer Gibt die Mail mit <strong>der</strong> als Argument übergebenen Nummer<br />
aus<br />
DELE Nummer Löscht die Mail mit <strong>der</strong> übergebenen Nummer<br />
NOOP Bewirkt die Antwort ”+OK”. Dient zur Aufrechterhaltung<br />
<strong>der</strong> Verb<strong>in</strong>dung, ohne daß e<strong>in</strong> Time-Out auftritt<br />
RSET Setzt die aktive Verb<strong>in</strong>dung zurück. Noch nicht ausgeführte<br />
Än<strong>der</strong>ungen werden verworfen<br />
QUIT Beendet die Verb<strong>in</strong>dung und führt alle gespeicherten<br />
Än<strong>der</strong>ungen aus<br />
10.4 POP<br />
Tabelle 10.5: Kommandos im ”Transaction State”<br />
Für den Transport bis zum Server mit dem E-Mail Postfach f<strong>in</strong>det i.d.R. das SMTP-<br />
Protokoll Anwendung. Da Benutzerrechner, auch <strong>in</strong> Zeiten totaler Vernetzung, nicht permanent<br />
im Netz s<strong>in</strong>d wird die Übertragung zum Client des Empfängers getrennt geregelt.<br />
Häufig f<strong>in</strong>det, se<strong>in</strong>er <strong>E<strong>in</strong></strong>fachheit wegen, das Post Office Protocol <strong>in</strong> Version 3 (POP3) <strong>E<strong>in</strong></strong>satz.<br />
Auf <strong>der</strong> Seite des Servers bearbeitet <strong>der</strong> POP3-Daemon, entwe<strong>der</strong> durch (x)<strong>in</strong>etd o<strong>der</strong><br />
permanenten Daemon realisiert, auf Port 110 e<strong>in</strong>gehende Verb<strong>in</strong>dungen und stellt die E-<br />
Mails e<strong>in</strong>es, durch Postfachname und Kennwort authentifiziertes Postfach, den Clients zur<br />
Verfügung. <strong>E<strong>in</strong></strong>e komfortable Verwaltung <strong>der</strong> E-Mails bereits auf dem Postfach-Server ist<br />
mit POP3 nicht möglich. So muß e<strong>in</strong>e E-Mails vor dem lesen komplett vom Client geladen<br />
werden und wird <strong>in</strong> Regelfall nach <strong>der</strong> Übertragung vom Server gelöscht. Dies führt<br />
zu <strong>in</strong>konsistenzen beim gleichzeitigen <strong>E<strong>in</strong></strong>satz verschiedener Clients für e<strong>in</strong> Postfach. Denn<br />
Mails, welche bereits abgerufen wurden, s<strong>in</strong>d für die an<strong>der</strong>en Clients nicht mehr erreichbar.<br />
Das vollständige Abrufen aller E-Mails vom Server hat Vorteile wenn e<strong>in</strong>e Verb<strong>in</strong>dung per<br />
Modem realisiert ist, da diese nach erfolgter Übermittlung wie<strong>der</strong> getrennt werden kann<br />
und ke<strong>in</strong>e weitere Kosten verursacht.<br />
Da das POP3 Protokoll sehr e<strong>in</strong>fach aufgebaut ist kann man e<strong>in</strong> Postfach ggf. auch per<br />
Telnet bedienen:<br />
user@l<strong>in</strong>ux:/> telnet pop3.postfachserver.de 110<br />
Try<strong>in</strong>g a.b.c.d...
154 KAPITEL 10. MAIL<br />
+OK<br />
PASS password
10.5. IMAP 155<br />
Auf dem Server werden die E-Mails <strong>in</strong> zwei Ablageformaten verwaltet. Entwe<strong>der</strong> im<br />
Mailbox-Format, wo alle Mails <strong>in</strong> e<strong>in</strong>er fortlaufenden Datei je Nutzer im Verzeichnis<br />
/var/spool/mail gehalten werden o<strong>der</strong> im Maildir-Format, wo i.d.R. <strong>in</strong> e<strong>in</strong>em Verzeichnis<br />
im Homevezeichnis des Nutzers je e<strong>in</strong>er Datei pro E-Mail abgelegt wird.<br />
Das Mailbox-Format kann viele kle<strong>in</strong>e E-Mails, wie dies <strong>in</strong> <strong>der</strong> vorkommerziellen Ähra des<br />
Internets noch üblich war, ohne große Belastung <strong>der</strong> Server-Festplatten verarbeiten, verbraucht<br />
aber bei großen E-Mails viel Speicher. Beim Maildir-Format s<strong>in</strong>d die Ansprüche<br />
an die Massenspeicher höher dafür die Speicherbelastung ger<strong>in</strong>ger, da nur e<strong>in</strong>zelne Dateien<br />
verarbeitet werden müssen.<br />
Um mit POP3-Servern e<strong>in</strong>e Filterung <strong>der</strong> Mails zu ermöglichen muß dies beim MTA<br />
implementiert werden. Denn <strong>der</strong> MTA stellt ankommende E-Mails direkt <strong>in</strong> die lokale Mailbox.<br />
10.5 IMAP<br />
Für e<strong>in</strong>e komfortable Verwaltung von E-Mails bereits auf dem Postfach-Server wurde das<br />
Internet Message Access Protocol (IMAP) entwickelt. Im Gegensatz zu POP3 verbleiben<br />
die E-Mails auf dem Server. Damit kommt IMAP vorallem den Bedürfnissen mobiler Benutzern<br />
entgegen, denn auch bei gleichzeitiger Verwendung verschiedener Mail-Client-Software<br />
und/o<strong>der</strong> Webfrontend bleiben die Daten konsistent. Die aktuelle Versionsnummer ist 4 und<br />
hat e<strong>in</strong>en Komplexitätsgrad erreicht, welcher durch kaum e<strong>in</strong>en IMAP-Client vollständig<br />
unterstützt wird.<br />
Um die E-Mails e<strong>in</strong>es Postfaches lesen zu können wird, analog dem zum POP3 Protokoll,<br />
e<strong>in</strong>e Verb<strong>in</strong>dung zum Server aufgebaut. Bei IMAP werden im ersten Schritt nur die<br />
Hea<strong>der</strong><strong>in</strong>formationen <strong>der</strong> Mails im Postfach abgerufen und erst bei Bedarf, wenn <strong>der</strong> Inhalt<br />
<strong>der</strong> Mail beim Nutzer von Interesse ist (angezeigt durch Auswahl), <strong>der</strong> Body nachgeladen<br />
wird. Dies hat den Vorteil, dass e<strong>in</strong>e E-Mail mit großem Anhang nicht unnötig über e<strong>in</strong>e<br />
langsame Modemleitung gesendet wird, denn bei Bedarf kann e<strong>in</strong>e große E-Mail von e<strong>in</strong>em<br />
Term<strong>in</strong>al mit schnellerer Netzanb<strong>in</strong>dung geladen werden ohne auf die Verwaltung und<br />
Beantwortung <strong>der</strong> verbleibenden Mails verzichten zu müssen. <strong>E<strong>in</strong></strong> weiterer Vorteil ist die<br />
Organisation des Postfaches mittels Unterverzeichnisse.<br />
Für IMAP s<strong>in</strong>d Erweiterungen möglich, so z.B. <strong>der</strong> Zugriff auf Ordner durch verschiedene<br />
Nutzer. Damit lassen sich Arbeitsprozesse für Gruppen vere<strong>in</strong>fachen und Datenaufkommen<br />
durch Versenden von Kopien vermeiden. Diese Methode läßt sehr differenzierte adm<strong>in</strong>istrative<br />
<strong>E<strong>in</strong></strong>stellungen zu.<br />
Der Preis des Komforts ensteht durch aufwendige Serverimplementationen mit deutlich<br />
höheren Anfor<strong>der</strong>ungen an CPU und Speicher gegenber POP3-Servern. Desweiteren dauert<br />
e<strong>in</strong>e IMAP-Sitzung bis <strong>der</strong> Nutzer diese beendet (o<strong>der</strong> Time-outs beim Server die Verb<strong>in</strong>dung<br />
trennen). Damit s<strong>in</strong>d die Kosten für <strong>E<strong>in</strong></strong>wahlverb<strong>in</strong>dungen i.d.R. höher. Dies läßt sich<br />
aber durch den Wechseln zwischen POP3 und IMAP, was durch die meisten IMAP-Server<br />
unterstützt wird, kompensieren.<br />
Drei <strong>der</strong> beliebtesten IMAP-Server fr <strong>Unix</strong>/L<strong>in</strong>ux s<strong>in</strong>d Courier-, Cyrus- und UW-IMAP.<br />
Alle bieten sehr umfangreiche Funktionen und Erweiterungsmöglichkeiten und s<strong>in</strong>d für e<strong>in</strong>e<br />
große Anzahl an Postfächern (¿20k) geeignet. So lassen sich z.B. die Postfach-Nutzer<br />
von den Systemnutzern trennen, Mailfilter-Sprachen e<strong>in</strong>b<strong>in</strong>den und Quotas festlegen (was<br />
dr<strong>in</strong>gend empfohlen wird, da die Nutzer die Mailboxen meist als privaten File-Server missbrauchen).<br />
Es gibt daneben auch noch imap-Daemonen welche IMAP, sehr rudimentär und ohne Funktionen<br />
welche über POP3 h<strong>in</strong>aus gehen, bereitstellen.
156 KAPITEL 10. MAIL<br />
Lei<strong>der</strong> unterstützt kaum e<strong>in</strong> Client die Funktionen z.z. vollständig. Mulberry und p<strong>in</strong>e<br />
s<strong>in</strong>d zwei <strong>der</strong> seltenen Ausnahmen mit sehr umfangreichen IMAP-Funktionen.<br />
Die E-Mails werden entwe<strong>der</strong> <strong>in</strong> e<strong>in</strong>em Verzeichnis im Homeverzeichnis des Servers bereitgestellt<br />
o<strong>der</strong> unter /var/spool/imap <strong>in</strong> Nutzerverzeichnissen. Im Gegensatz zu POP3 ist nicht<br />
<strong>der</strong> MTA für die Abspeicherung neuer Mails zuständig, son<strong>der</strong>n <strong>der</strong> IMAP-Server selbst.<br />
Deshalb hat i.d.R. auch nur <strong>der</strong> IMAP-Server zugriff auf die entsprechenden Verzeichnisse,<br />
welche dieser u.a. mit separaten Index- und Quota-Tabellen für schnelleren Zugriff<br />
verwaltet. Die Haltung <strong>der</strong> E-Mails als quasi File-Server stellt erhöhte Ansprüche an die<br />
Festplatten und Speicherausstattung. Zum <strong>E<strong>in</strong></strong>en müssen die Speicherkapazitäten wachsen,<br />
da die durchschnittlich auf dem Server gehaltenen Datenmenge gegenber POP3 drastisch<br />
ansteigt. Zum An<strong>der</strong>en s<strong>in</strong>d die Zugriffzeiten ausschlaggebend für die Gesamtperformance<br />
des Servers, da die Anzahl <strong>der</strong> Dateien steigt. Dies s<strong>in</strong>d ausschlaggebenden Gründe warum<br />
IMAP-Server immer noch selten betrieben werden.<br />
Der Standard-Port für IMAP ist 443 und für IMAPS, die Variante über SSL/TLS, ist<br />
993 reserviert.<br />
10.6 Aufgaben<br />
10.6.1 Dienste<br />
1. Welche IP Adresse hat <strong>der</strong> Server www.stud.uni-goett<strong>in</strong>gen.de? Womit wird diese<br />
ermittelt?<br />
2. Wie heisst <strong>der</strong> Server 134.76.62.220 mit vollständigem Rechner- und Doma<strong>in</strong>namen?<br />
3. Welche TCP und UDP Ports s<strong>in</strong>d auf dem Dozentensystem offen? Welchen Diensten<br />
s<strong>in</strong>d diese zuzuordnen?
Kapitel 11<br />
Fileserver<br />
11.1 <strong>Unix</strong>-<strong>Netzwerk</strong>dateisystem - NFS<br />
NFS, das Network File System, ist wahrsche<strong>in</strong>lich <strong>der</strong> populärste und am häufigsten e<strong>in</strong>gesetzte<br />
RPC basierende <strong>Netzwerk</strong>dienst. Er erlaubt, entfernte Verzeichnisse auf an<strong>der</strong>en<br />
Hosts so zu benutzen, als lägen diese Dateien lokal vor. Dies wird durch e<strong>in</strong>e Mischung<br />
aus Kernel-Funktionalität auf <strong>der</strong> Client- und Server-Seite realisiert. Der Dateizugriff ist<br />
für den Client völlig transparent und funktioniert für e<strong>in</strong>e ganze Reihe von Server- und<br />
Host-Architekturen.<br />
NFS bildet jede Art des Zugriffs auf Verzeichnisse und Dateien über e<strong>in</strong>en Remote Procedure<br />
Call ab. Das erlaubt auf <strong>der</strong> e<strong>in</strong>en Seite den geme<strong>in</strong>samen schreibenden Zugriff von<br />
mehreren Clients auf e<strong>in</strong> Dateisystem. Auf <strong>der</strong> an<strong>der</strong>en Seite generieren die verschiedenen<br />
Remote Procedure Calls gerade auf kle<strong>in</strong>en Dateien e<strong>in</strong>en nicht unerheblichen Overhead.<br />
Dieses kann man sehr leicht ausprobieren <strong>in</strong> dem man e<strong>in</strong>fach mal die Zeit misst, die es<br />
braucht e<strong>in</strong> Verzeichnis mit sehr vielen kle<strong>in</strong>en Dateien auf e<strong>in</strong>er NFS-Quelle zu kopieren<br />
o<strong>der</strong> dasselbe mit e<strong>in</strong>er e<strong>in</strong>zigen gleichgrossen Datei anzustellen.<br />
NFS wird traditionell über das Transportprotokoll UDP abgewickelt, die Version 3<br />
erlaubt e<strong>in</strong>e alternative Verwendung von TCP. Es arbeitet als Remote Procedure Call<br />
(RPC) Dienst und erfor<strong>der</strong>t für se<strong>in</strong>en <strong>E<strong>in</strong></strong>satz das Vorhandense<strong>in</strong> des Portmap-Daemonen<br />
(portmap). Die beiden ”alten” Daemonen, die im Userspace agieren, heissen deshalb auch<br />
rpc.nfsd und rpc.mountd. Sie werden üblicherweise über e<strong>in</strong> geme<strong>in</strong>sames Startskript bei<br />
SuSE /etc/<strong>in</strong>it.d/nfsserver gestartet, welches bei se<strong>in</strong>er <strong>E<strong>in</strong></strong>richtung darauf achtet, dass <strong>der</strong><br />
Portmapper vorher aufgerufen wird. Die Daemonen des Kernelspaces werden mittels analogen<br />
Startskriptes aufgerufen, wobei für den NFS-Daemon standardmäßig vier Threads<br />
gestartet werden. Die Zahl kann für hohe Anfor<strong>der</strong>ungen jedoch stark gesteigert werden.<br />
In den wenigsten Fällen lassen sich beide NFS-Implementationen problemlos nebene<strong>in</strong>an<strong>der</strong><br />
<strong>in</strong>stallieren, da geme<strong>in</strong>same Dateien, wie das Startskript e<strong>in</strong>ge wesentliche Unterschiede<br />
aufweisen. Für wechselnde Experimentierumgebungen mit beiden Servertypen s<strong>in</strong>d Anpassungen<br />
m<strong>in</strong>desten <strong>der</strong> Init-Skripten notwendig.<br />
Die Unterstützung für das Network Filesystem muss sowohl im Server- Kernel als auch<br />
im Kernel <strong>der</strong> Clients aktiviert se<strong>in</strong>. Im Kernel des Servers sollte für Test- und Überwachungszwecke<br />
auch die Clientunterstützung aktiviert se<strong>in</strong>. So kann über e<strong>in</strong> e<strong>in</strong>faches Loopbackmounten<br />
von NFS-Freigaben sehr leicht überprüft werden, ob diese korrekt e<strong>in</strong>gerichtet<br />
s<strong>in</strong>d.<br />
NFS bietet e<strong>in</strong>e Reihe nützlicher Features:<br />
• Daten, auf die von allen Benutzern zugegriffen wird, können auf e<strong>in</strong>em zentralen Host<br />
gehalten werden - zentraler Fileserver für Home-Verzeichnisse. Clients mounten dieses<br />
157
158 KAPITEL 11. FILESERVER<br />
Verzeichnis während <strong>der</strong> Bootphase bzw. wärend des Log<strong>in</strong>s des Benutzers.<br />
• Daten, die sehr große Mengen an Plattenspeicher e<strong>in</strong>nehmen, können auf e<strong>in</strong>em e<strong>in</strong>zigen<br />
Rechner vorgehalten werden. So könnten etwa die Office-Pakete Star- o<strong>der</strong> OpenOffice<br />
an e<strong>in</strong>er Stelle gespeichert und adm<strong>in</strong>istriert werden.<br />
• Adm<strong>in</strong>istrative Daten können auf e<strong>in</strong>em Host gehalten werden. So kann die Mühe<br />
entfallen bestimmte Datensätze nach ihrer Aktualisierung auf viele<br />
Homeverzeichnisse. Clients mounten dieses Verzeichnis während <strong>der</strong> Bootphase bzw.<br />
wärend des Log<strong>in</strong>s des Benutzers. Die beson<strong>der</strong>e Stärke liegt hier <strong>in</strong> <strong>der</strong> Verb<strong>in</strong>dung<br />
mit NIS. So können sich die Benutzer dann an jedem System e<strong>in</strong>loggen und arbeiten<br />
dennoch mit nur e<strong>in</strong>em Satz von Dateien.<br />
• Daten, die sehr große Mengen an Plattenspeicher e<strong>in</strong>nehmen, können auf e<strong>in</strong>em e<strong>in</strong>zigen<br />
Rechner vorgehalten werden. So könnten etwa die Office-Pakete Star- o<strong>der</strong> OpenOffice<br />
an e<strong>in</strong>er Stelle gespeichert und adm<strong>in</strong>istriert werden.<br />
• Adm<strong>in</strong>istrative Daten können auf e<strong>in</strong>em Host gehalten werden. So kann die Mühe<br />
entfallen bestimmte Datensätze nach ihrer Aktualisierung auf viele Rechner zu verteilen.<br />
NFS kann sowohl auf das Transportprotokoll UDP als auch TCP zurückgreifen. Die<br />
Verwendung von TCP ist jedoch erst <strong>in</strong> den neueren Versionen 3 und 4 ünterstützt. Es<br />
arbeitet als Remote Procedure Call (RPC) Dienst und erfor<strong>der</strong>t deshalb für se<strong>in</strong>en <strong>E<strong>in</strong></strong>satz<br />
das Vorhandense<strong>in</strong> des Portmap-Daemonen (portmap). Die Daemonen zur Bereitstellung<br />
von NFS-Diensten werden üblicherweise über e<strong>in</strong> geme<strong>in</strong>sames Startskript, bei<br />
SuSE /etc/<strong>in</strong>it.d/nfsserver gestartet, welches bei se<strong>in</strong>er <strong>E<strong>in</strong></strong>richtung darauf achtet, dass <strong>der</strong><br />
Portmapper vorher aufgerufen wird. Die Zahl <strong>der</strong> NFS-Daemonen liegt standardmäßig bei<br />
vier Threads. Die Zahl kann für hohe Anfor<strong>der</strong>ungen jedoch stark gesteigert werden.<br />
Die Unterstützung für das Network Filesystem muss sowohl im Server-Kernel als auch im<br />
Kernel <strong>der</strong> Clients aktiviert se<strong>in</strong>. Alternativ zur statischen Variante kann die NFS-Fähigkeit<br />
des Kernels auch mittels Module nachgeladen werden.<br />
Se<strong>in</strong> Alter merkt man NFS jedoch auch an: Es verfolgt e<strong>in</strong> generalistischen Ansatz und<br />
versucht es jedem Anwendungszweck e<strong>in</strong>igermassen recht zu machen. Bis e<strong>in</strong>schliesslich<br />
Version 3 muss das Sicherheitskonzept von NFS als weitgehend nichtexistent bezeichnet<br />
werden, da die IP-basierte und überhaupt nicht nutzerbasierte Authentifizierung, Angriffe<br />
auf die Daten <strong>in</strong> Benutzer-Homeverzeichnissen kaum abhalten konnte.<br />
11.1.1 NFS im <strong>E<strong>in</strong></strong>satz<br />
<strong>E<strong>in</strong></strong>e Freigabe, bei NFS ”export” genannt, def<strong>in</strong>iert man auf dem Server <strong>in</strong> <strong>der</strong> Datei<br />
/etc/exports:<br />
/home 10.18.40.0/255.255.254.0(rw,async)<br />
/home *.my-doma<strong>in</strong>.site(rw,async)<br />
Im Beispiel wurde das Home-Verzeichnis aller Benutzer für alle Masch<strong>in</strong>en im Subnetz<br />
10.18.40.0 mit <strong>der</strong> Netzmaske 255.255.254.0 freigegeben. Freigaben lassen sich auf e<strong>in</strong>zelne<br />
Masch<strong>in</strong>en o<strong>der</strong> auch auf Rechnernamen vornehmen. Letzteres zeigt die zweite Freigabe an<br />
alle Rechner <strong>der</strong>en IP-Adresse aufgelöst Mitglied <strong>der</strong> Doma<strong>in</strong> my-doma<strong>in</strong>.site s<strong>in</strong>d. Der Beispielexport<br />
legt fest, dass das Clients auf <strong>der</strong> Freigabe schreiben dürfen, <strong>der</strong> Benutzer ”root”<br />
jedoch davon ausgenommen ist. Für alle Schreibvorgänge wird e<strong>in</strong>e sofortige Bestätigung
11.1. UNIX-NETZWERKDATEISYSTEM - NFS 159<br />
angefor<strong>der</strong>t. Mit <strong>der</strong> Option async für asynchrones Schreiben kann man das Schreib- und<br />
Leseverhalten verbessern, jedoch s<strong>in</strong>kt damit die Datensicherheit beim Schreiben. Dass <strong>der</strong><br />
Systemadm<strong>in</strong>istrator vom Zugriff ausgeschlossen wurde, ist jedoch nur e<strong>in</strong>e m<strong>in</strong>imale Hürde<br />
Angreifern gegenüber. Es h<strong>in</strong><strong>der</strong>t ke<strong>in</strong>er diese daran, e<strong>in</strong>fach die passenden Benutzer-IDs<br />
auf se<strong>in</strong>em lokalen System anzulegen und sich dann mit diesen IDs <strong>in</strong> den <strong>in</strong>teressierenden<br />
Verzeichnissen zu bewegen.<br />
<strong>E<strong>in</strong></strong> NFS-Server muss je nach <strong>E<strong>in</strong></strong>satzgebiet und Anzahl <strong>der</strong> zugreifenden Clients e<strong>in</strong>ges<br />
leisten. Von ihm hängt die Performance des Zugriffs auf entfernt liegende Dateien auf den<br />
Clients ab. <strong>E<strong>in</strong></strong>e leistungsfähige CPU, viel Hauptspeicher, nicht zu langsame Festplatten<br />
und e<strong>in</strong>e gute <strong>Netzwerk</strong>verb<strong>in</strong>dung s<strong>in</strong>d entscheidende Faktoren. Mit <strong>der</strong> heute üblichen<br />
Leistung auch <strong>der</strong> <strong>E<strong>in</strong></strong>stiegsprozessoren, die man auf vielen Clients f<strong>in</strong>den wird, kann e<strong>in</strong>e<br />
100 Mbit-Leitung durchaus bis an ihre theoretische Transfergrenze von über 10 Mbyte/s<br />
ausgelastet werden.<br />
Soll es nicht zu unnötigen Wartezeiten auf den Clients kommen, sollte <strong>der</strong> Server über<br />
e<strong>in</strong> o<strong>der</strong> mehrere Gigabit-<strong>Netzwerk</strong><strong>in</strong>terfaces verfügen, die idealerweise an <strong>der</strong> Switch angeschlossen<br />
s<strong>in</strong>d, welche die Verteilung an die Endgeräte übernimmt. Damit nicht alle Daten<br />
erneut von <strong>der</strong> Festplatte <strong>in</strong> den Hauptspeicher und dann über das <strong>Netzwerk</strong> geschaufelt<br />
werden müssen, macht e<strong>in</strong> großer Arbeitsspeicher S<strong>in</strong>n. Durch diesen wird e<strong>in</strong> Cache häufig<br />
angefor<strong>der</strong>ter Festplattenblöcke angelegt, welche dann direkt aus dem Hauptspeicher an<br />
den anfragenden Client ausgeliefert werden können.<br />
11.1.2 NFS und Portmapper<br />
Das Network File System benötigt Remote Procedure Calls (RPC). Der Portmapper - repräsentiert<br />
durch den Dienst portmap - ordnet RPC-Anfragen den korrekten Dienste zu.<br />
RPC-Prozesse benachrichtigen portmap, wenn sie starten. Des Weiteren teilen die Anfragen<br />
die überwachte Port-Nummer sowie die Nummern des RPC-Programms mit, die aufgerufen<br />
werden. Der Client kontaktiert den Portmapper auf dem Server mit e<strong>in</strong>er bestimmten<br />
RPC-Programmnummer. Dieser leitet dann den Client zur richtigen Port-Nummer um,<br />
damit er mit dem gewünschten Dienst kommunizieren kann.<br />
Da RPC-basierte Dienste für die Verb<strong>in</strong>dungen mit ankommenden Client-Anfragen von<br />
portmap abhängig s<strong>in</strong>d, muss er gestartet se<strong>in</strong>, bevor e<strong>in</strong>er dieser Dienste gestartet wird.<br />
An<strong>der</strong>nfalls beobachtet man sehr lange Wartezeiten zum Beispiel bis zum Abschluss e<strong>in</strong>es<br />
NFS-Mounts. Für die Zugriffssteuerung auf RPC-basierte Dienste des Servers kann man<br />
die Host-Zugriffsdateien (/etc/hosts.allow und /etc/hosts.deny) verwenden. Will man im<br />
Bereich RPC-Dienste debuggen, ist e<strong>in</strong>e Zugeordnung <strong>der</strong> Portnummern sehr nützlich.<br />
Der Befehl rpc<strong>in</strong>fo zeigt jeden RPC-basierten Dienst mit Port-Nummer, RPC-Programmnummer,<br />
Version und dem Typ des Transport-Protokolls (TCP o<strong>der</strong> UDP) an. Die<br />
Ausgabe im folgenden Beispiel-List<strong>in</strong>g zeigt den Portmapper auf e<strong>in</strong>er Masch<strong>in</strong>e, die den<br />
kernelbasierten NFS-Dienst verwendet:<br />
s01:~ # rpc<strong>in</strong>fo -p<br />
program vers proto port<br />
100000 2 tcp 111 portmapper<br />
100000 2 udp 111 portmapper<br />
100003 2 udp 2049 nfs<br />
100003 3 udp 2049 nfs<br />
100227 3 udp 2049 nfs_acl<br />
100003 2 tcp 2049 nfs<br />
100003 3 tcp 2049 nfs<br />
100227 3 tcp 2049 nfs_acl<br />
100024 1 udp 34607 status
160 KAPITEL 11. FILESERVER<br />
100021 1 udp 34607 nlockmgr<br />
100021 3 udp 34607 nlockmgr<br />
100021 4 udp 34607 nlockmgr<br />
100024 1 tcp 32778 status<br />
100021 1 tcp 32778 nlockmgr<br />
100021 3 tcp 32778 nlockmgr<br />
100021 4 tcp 32778 nlockmgr<br />
100005 1 udp 783 mountd<br />
100005 1 tcp 786 mountd<br />
100005 2 udp 783 mountd<br />
100005 2 tcp 786 mountd<br />
100005 3 udp 783 mountd<br />
100005 3 tcp 786 mountd<br />
Die erste Spalte gibt die Dienstnummer an, wobei dem Portmapper mit 100000 die<br />
niedrigste zugeordnet ist. Der NFS-Dienst erhielt die Nummer 100003 und <strong>der</strong> Mount-<br />
Dienst die 100005. Diese Zahlen s<strong>in</strong>d so festgelegt.<br />
Die zweite Spalte gibt Auskunft über die verwendete Protokollversion des Dienstes.<br />
Die gleiche Versionsnummer taucht zweimal auf, wenn <strong>der</strong> Dienst auf zwei verschiedenen<br />
Transportprotokollen, UDP und TCP, angeboten wird.<br />
Dabei hat die Protokollnummer des Portmappers nichts mit den Protokollnummern<br />
<strong>der</strong> an<strong>der</strong>en Dienste zu tun. Die Dienste selbst müssen jedoch <strong>in</strong> <strong>der</strong> Lage se<strong>in</strong>, mit dem<br />
jeweiligen Port-Mapper zusammenzuarbeiten.<br />
Der NFS-Server unterstützt die Versionen 2 und 3, <strong>der</strong> Mount-Server zusätzlich NFS-<br />
Version 1. Da Letzterer se<strong>in</strong>e Dienste sowohl auf TCP als auch auf UDP anbietet, taucht<br />
er sechsmal <strong>in</strong> <strong>der</strong> Liste auf.<br />
Die Art des Transportprotokolls, auf dem e<strong>in</strong> Dienst arbeitet, kann <strong>der</strong> dritten Spalte<br />
entnommen werden. Die vierte Spalte liefert die Portnummer und die fünfte den Namen<br />
des gestarteten Dienstes, wie er auch <strong>in</strong> <strong>der</strong> Prozesstabelle (z.B. durch ps aux) angezeigt<br />
werden würde.<br />
Das nächste Beispiel zeigt e<strong>in</strong>e Masch<strong>in</strong>e, die NFS über den klassischen Userspace-<br />
Dienst ausschließlich <strong>in</strong> den NFS-Protokollversionen 1 und 2 anbietet. Solche Masch<strong>in</strong>en<br />
wird man jedoch zunehmend seltener f<strong>in</strong>den, da die Implementierung von NFS im L<strong>in</strong>ux-<br />
Userspace nicht mehr weiterentwickelt wird. Zusätzlich läuft e<strong>in</strong> weiterer RPC-Dienst zur<br />
NIS-Authentifizierung, <strong>der</strong> aber ebenfalls kaum noch irgendwo Verwendung f<strong>in</strong>det.<br />
s05-alt:~ # rpc<strong>in</strong>fo -p<br />
Program Vers Proto Port<br />
100000 2 tcp 111 portmapper<br />
100000 2 udp 111 portmapper<br />
100021 1 udp 32768 nlockmgr<br />
100021 3 udp 32768 nlockmgr<br />
100021 4 udp 32768 nlockmgr<br />
100007 2 udp 803 ypb<strong>in</strong>d<br />
100007 1 udp 803 ypb<strong>in</strong>d<br />
100007 2 tcp 806 ypb<strong>in</strong>d<br />
100007 1 tcp 806 ypb<strong>in</strong>d<br />
100005 1 udp 829 mountd<br />
100005 2 udp 829 mountd<br />
100005 1 tcp 833 mountd<br />
100005 2 tcp 833 mountd<br />
100003 2 udp 2049 nfs<br />
100003 2 tcp 2049 nfs<br />
100011 1 udp 855 rquotad
11.1. UNIX-NETZWERKDATEISYSTEM - NFS 161<br />
100011 2 udp 855 rquotad<br />
100011 1 tcp 858 rquotad<br />
100011 2 tcp 858 rquotad<br />
11.1.3 NFS-Clients<br />
<strong>E<strong>in</strong></strong> Client versucht, e<strong>in</strong> Verzeichnis von e<strong>in</strong>em entfernten Host an se<strong>in</strong> lokales Verzeichnis<br />
zu mounten, genau wie er dies mit e<strong>in</strong>em physikalischen Gerät machen würde. Allerd<strong>in</strong>gs<br />
ist die für e<strong>in</strong> entferntes Verzeichnis zu verwendende Syntax an<strong>der</strong>s. Soll zum Beispiel<br />
das Verzeichnis /opt/applix vom Host ”server” an /opt/office auf <strong>der</strong> Masch<strong>in</strong>e gemountet<br />
werden, führt man folgenden Befehl aus:<br />
mount -t nfs -o ro,rsize=8192 server:/opt/openoffice /opt/office<br />
11.1.4 NFS-Server<br />
Die Freigaben, welche <strong>der</strong> NFS-Server zur Verfügung stellen soll, werden <strong>in</strong> <strong>der</strong> Datei<br />
/etc/exports def<strong>in</strong>iert:<br />
/usr 172.19.100.0/255.255.255.0(ro)<br />
/opt/applix 172.19.100.0/255.255.255.0(ro)<br />
/tmp/users 10.10.156.0/255.255.255.0(rw,no_root_squash)<br />
Der jeweilige NFS-Server muss je nach <strong>E<strong>in</strong></strong>satzgebiet und Anzahl <strong>der</strong> angeschlossenen<br />
Clients e<strong>in</strong>ges leisten. Von ihm hängt die Performance <strong>der</strong> Anwendungen auf den plattenlosen<br />
Geräten ab, da alle Zugriffe auf Dateien, Bibliotheken und Programme über ihn abgewickelt<br />
werden. <strong>E<strong>in</strong></strong>e leistungsfähige CPU, viel Hauptspeicher, nicht zu langsame Festplatten<br />
und e<strong>in</strong>e gute <strong>Netzwerk</strong>verb<strong>in</strong>dung s<strong>in</strong>d entscheidende Faktoren. Mit <strong>der</strong> heute üblichen<br />
Leistung auch <strong>der</strong> <strong>E<strong>in</strong></strong>stiegsprozessoren, die man auf vielen Clients f<strong>in</strong>den wird, kann e<strong>in</strong>e<br />
100 Mbit-Leitung durchaus bis an ihre theoretische Transfergrenze von über 10 Mbyte/s<br />
ausgelastet werden.<br />
Soll es nicht zu unnötigen Wartezeiten auf den Clients kommen, sollte <strong>der</strong> Server über<br />
e<strong>in</strong> o<strong>der</strong> mehrere Gigabit-<strong>Netzwerk</strong><strong>in</strong>terfaces verfügen, die idealerweise an <strong>der</strong> Switch angeschlossen<br />
s<strong>in</strong>d, welche die Verteilung an die Endgeräte übernimmt. Damit nicht alle Daten<br />
erneut von <strong>der</strong> Festplatte <strong>in</strong> den Hauptspeicher und dann über das <strong>Netzwerk</strong> geschaufelt<br />
werden müssen, macht e<strong>in</strong> großer Arbeitsspeicher S<strong>in</strong>n. Durch diesen wird e<strong>in</strong> Cache häufig<br />
angefor<strong>der</strong>ter Festplattenblöcke angelegt, welch dann direkt aus dem Hauptspeicher an den<br />
anfragenden Client ausgeliefert werden können.<br />
11.1.5 NFS und (Un)Sicherheit<br />
Der <strong>E<strong>in</strong></strong>satz von NFS bis e<strong>in</strong>schliesslich Version 3 ist unter Sicherheitsaspekten nicht problemfrei.<br />
Die Überprüfung ob e<strong>in</strong> bestimmtes Gerät auf den NFS-Server zugreifen darf o<strong>der</strong><br />
nicht erfolgt lediglich anhand <strong>der</strong> IP-Nummer. Es werden ke<strong>in</strong>erlei an<strong>der</strong>e Credentials, wie<br />
Benutzerkennung o<strong>der</strong> Passwort abgefragt. Das vere<strong>in</strong>facht den <strong>E<strong>in</strong></strong>satz von NFS im Umfeld<br />
von Diskless Clients o<strong>der</strong> zur Verteilung geme<strong>in</strong>samer Daten <strong>in</strong> nur lesbarem Zugriff.<br />
Sensible Daten sollten deshalb nicht mittels NFS-Freigaben bis zur Version 3 bereitgestellt<br />
werden. Hierfür sollten an<strong>der</strong>e <strong>Netzwerk</strong>dateisysteme, wie Samba o<strong>der</strong> das Andrew File<br />
System (AFS) e<strong>in</strong>gesetzt werden.<br />
Die Weiterentwicklung von NFS <strong>in</strong> <strong>der</strong> Version 4 br<strong>in</strong>gt e<strong>in</strong>ige Fortschritte <strong>in</strong> Richtung<br />
Authentifizierung und Verschlüsselung <strong>der</strong> Daten.
162 KAPITEL 11. FILESERVER<br />
Auf jeden Fall sollten Adm<strong>in</strong>istratoren nur NFS-Freigaben <strong>in</strong> das lokal zu bedienende<br />
Sub-Netz e<strong>in</strong>richten und e<strong>in</strong>en NFS-Server nicht gleichzeitig als Gateway <strong>in</strong>s Internet<br />
o<strong>der</strong> ähnliches e<strong>in</strong>setzen. NFS-Zugriffe kann man nur teilweise per Firewall beschränken,<br />
da NFS und zusätzliche Dienste we gen <strong>der</strong> RPC-Architektur nicht mit bestimmten fest<br />
vorgegebenen Portnummern verknüpft s<strong>in</strong>d.<br />
11.2 Andrew Filesystem (AFS)<br />
11.2.1 Die Clientseite<br />
Das Kürzel AFS steht für Andrew File System o<strong>der</strong> A distributed File System. AFS wurde<br />
ursprünglich von <strong>der</strong> Carnegie-Mellon University entwickelt. Kommerzialisiert wurde AFS<br />
später von Transarc. Diese Firma wurde 1994 von IBM gekauft. IBM ihrerseits stellte im<br />
Jahre 2000 AFS als Open Source zur Verfügung. Seit dieser Zeit wird AFS von <strong>der</strong> OpenAFS<br />
Community gepflegt. AFS wird nicht mehr offiziell von IBM weiterentwickelt. Das Andrew<br />
File System (AFS) ist e<strong>in</strong> <strong>Netzwerk</strong>-Dateisystem, welches Dateien netzwerk- und weltweit<br />
zur Verfügung stellen kann. Dieses Dateisystem arbeitet nach dem Client-Server-Pr<strong>in</strong>zip:<br />
Daten werden auf dem Fileserver gespeichert, <strong>der</strong> Zugriff erfolgt von Seiten <strong>der</strong> Clients.<br />
Die AFS-Unterstützung wird über e<strong>in</strong> Kernelmodul realisiert, welches alle benötigten<br />
Bibliotheksfunktionen zur Verfügung stellt. Zu diesem Modul werden Kernelprozesse gestartet,<br />
welche die <strong>Netzwerk</strong><strong>in</strong>teraktion realisieren. Ausschnitt <strong>der</strong> Anzeige aller geladenen<br />
Module und AFS-Prozesse:<br />
l<strong>in</strong>ux:~/test # lsmod<br />
Module Size Used by Ta<strong>in</strong>ted: PF<br />
[...]<br />
nls_cp437 4316 1 (autoclean)<br />
nls_iso8859-1 2812 1 (autoclean)<br />
smbfs 34384 1 (autoclean)<br />
snd-pcm-oss 45888 1 (autoclean)<br />
snd-mixer-oss 13560 0 (autoclean) [snd-pcm-oss]<br />
videodev 5600 0 (autoclean)<br />
libafs 442528 2<br />
[...]<br />
l<strong>in</strong>ux:~/test # ps aux | grep afs<br />
root 2001 0.0 0.0 0 0 ? SW Aug11 0:08 [afs_rxlistener]<br />
root 2003 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_callback]<br />
root 2005 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_rxevent]<br />
root 2007 0.0 0.0 0 0 ? SW Aug11 0:00 [afsd]<br />
root 2009 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_checkserver]<br />
root 2011 0.0 0.0 0 0 ? SW Aug11 0:01 [afs_background]<br />
root 2013 0.0 0.0 0 0 ? SW Aug11 0:01 [afs_background]<br />
root 2015 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_cachetrim]<br />
AFS besitzt gegenüber an<strong>der</strong>en verteilten Dateisystem wie z.B. Samba o<strong>der</strong> NFS e<strong>in</strong>ige<br />
Vorteile. Es arbeitet plattformunabhänig und verwendet zur Beschleunigung des Zugriffs<br />
auf jedem Client e<strong>in</strong> Cache von bis zu 2 GByte. Dieser dient zur Entlastung des <strong>Netzwerk</strong>es,<br />
zur Beschleunigung von Zugriffen und zur Überbrückung von Schwankungen, da AFS auf<br />
die Verwendung <strong>in</strong> Wide Area Networks angelegt ist. Für e<strong>in</strong>e grössere Ausfallsicherheit<br />
können Volumes über mehrere Fileserver repliziert werden.<br />
Der Integrationsaufwand <strong>in</strong> das jeweilige Betriebssystem fällt jedoch höher aus, als<br />
für die meisten bereits genannten Filesysteme. Es existieren Implementationen für W<strong>in</strong>-
11.2. ANDREW FILESYSTEM (AFS) 163<br />
dows 1 , MacOS X und diverse UNIXe <strong>in</strong>klusive L<strong>in</strong>ux. AFS kennt e<strong>in</strong>en weltweit e<strong>in</strong>deutigen<br />
Namensraum. Egal wo und an welcher Masch<strong>in</strong>e e<strong>in</strong> Benutzer arbeitet, <strong>der</strong> Pfad<br />
für e<strong>in</strong>en Benutzer stellt sich immer identisch dar. Der Pfadname beg<strong>in</strong>nt mit /afs (dem<br />
sogenannten Top Level). Auf <strong>der</strong> nächsten Hierarchieebene (Second Level) kommt <strong>der</strong> sogenannte<br />
Cell-Name. Die Zellennamen für bereits bestehende AFS-Zellen f<strong>in</strong>den sich auf:<br />
www.central.org/dl/cellservdb/CellServDB.<br />
Für die dar<strong>in</strong> enthaltenen Unterverzeichnisse darunter existieren ebenfalls Konventionen,<br />
die e<strong>in</strong>gehalten werden sollten. vgl. hierzu Tabelle 11.2.1 auf S. 163<br />
Name Beschreibung<br />
common Systemunabhängige Daten<br />
public Öffentliche Daten<br />
service Koord<strong>in</strong>ation und Konfiguration <strong>der</strong> Zelle<br />
sys type Systemspezifische Daten z.B. i586 l<strong>in</strong>ux<br />
usr Home-Verzeichnisse für Benutzer<br />
wsadm<strong>in</strong> Konfiguration von Clients<br />
Jedem Benutzer kann e<strong>in</strong> eigenes Volume zugeordnet werden. Sie bilden die Basis des<br />
ganzen Konzeptes, ihre Lage ist für den Client völlig transparent. Die Volumes können<br />
während des Betriebes von Fileserver zu Filserver verschoben werden. Auf diesem Volume<br />
wird e<strong>in</strong> Quota def<strong>in</strong>iert. AFS implementiert e<strong>in</strong>e ausgefeiltere Kontrolle über die Zugriffsberechtigungen<br />
mit Access Control Lists (ACLs), die anstelle <strong>der</strong> <strong>Unix</strong>-Rechte-Bits auf<br />
Verzeichnisebene zum <strong>E<strong>in</strong></strong>satz kommen.<br />
Je<strong>der</strong> Benutzer kann eigene Gruppen erzeugen und verwalten. Wenn e<strong>in</strong> normaler Benutzer<br />
ohne Systemrechte e<strong>in</strong>e Gruppe erzeugen will, muss er als Präfix se<strong>in</strong>en eigenen Namen<br />
verwenden. Dieses kann so aussehen: user:group Ausserdem s<strong>in</strong>d die folgenden drei System-<br />
Gruppen schon def<strong>in</strong>iert: system:anyuser, system:authuser und system:adm<strong>in</strong>istrators, diese<br />
Gruppen s<strong>in</strong>d <strong>in</strong> allen AFS Systemen vorhanden. system:anyuser s<strong>in</strong>d alle Benutzer (mit<br />
o<strong>der</strong> ohne gültigem Token), system:authuser alle Benutzer mit gültigem Token und system:adm<strong>in</strong>istrators<br />
Benutzer mit Adm<strong>in</strong>istrator-Privilegien.<br />
<strong>E<strong>in</strong></strong>e weitere Eigenschaft von AFS ist, dass es e<strong>in</strong>en eigenen Log<strong>in</strong> für die Freigabe se<strong>in</strong>es<br />
Inhaltes benötigt. NFS <strong>in</strong> den Versionen 2 und 3 arbeitet mit e<strong>in</strong>er IP-basierten Freigabe,<br />
die wenig <strong>E<strong>in</strong></strong>schränkungen gegen geplanten Missbrauch bietet. Durch die Verwendung von<br />
Kerberos 4 bzw. 5 Authentifizierung kann es deshalb bedenkenloser als an<strong>der</strong>e <strong>Netzwerk</strong>dateisysteme<br />
zur weltweiten Verteilung e<strong>in</strong>gesetzt werden.<br />
Kommando Beschreibung<br />
kpasswd wird benutzt um das AFS-Passwort zu än<strong>der</strong>n<br />
klog Erwerben e<strong>in</strong>es Tokens<br />
tokens Überblick <strong>der</strong> gültigen Tokens<br />
pts kann Benutzer und Gruppen anzeigen und verwalten<br />
fs kann ACLs und Quotas anzeigen/verwalten<br />
Tabelle 11.1: <strong>E<strong>in</strong></strong>ige wichtige AFS-Kommandos<br />
Mit <strong>der</strong> Authentifizierung gegenüber AFS, beim Log<strong>in</strong> über PAM o<strong>der</strong> durch das Kommando<br />
klog erhält <strong>der</strong> angemeldete Benutzer e<strong>in</strong> Token. Dieses Token<br />
gestattet den Zugrif auf das AFS-Filesystem. Das Token hat aber nur e<strong>in</strong>e begrenzte Gültigkeitsdauer.<br />
Nach Ablauf <strong>der</strong> Gültigkeit ist <strong>der</strong> Zugrif auf die AFS-Dateien wie<strong>der</strong> gesperrt.<br />
1 für die “Consumerw<strong>in</strong>dows” - Spielkonsolen W<strong>in</strong>95/98/ME - jedoch nur <strong>der</strong> Client
164 KAPITEL 11. FILESERVER<br />
Mit dem Befehl tokens kann man anschauen, welche Token gerade gehalten werden und<br />
wie lange die e<strong>in</strong>zelnen Token noch gültig s<strong>in</strong>d.<br />
Die Syntax <strong>der</strong> AFS-Kommandos ist etwas ungewohnt, da im Gegensatz zu den Standard-<br />
UNIX Kommandos die AFS-Kommandos nicht nur e<strong>in</strong>em Zweck dienen, son<strong>der</strong>n mehrere<br />
Kommandos zu sogenannten Command Suites zusammenfassen. Die Syntax ist bei allen<br />
AFS Kommandos identisch: command suite operation code -switch -flag<br />
Kommando Beschreibung<br />
fs help erklärt alle zur Verfügung stehenden Optionen<br />
fs lq zeigt def<strong>in</strong>iertes Quota für e<strong>in</strong> Verzeichnis an<br />
fs la listet die gesetzten Rechte<br />
fs sa setzt Rechte für e<strong>in</strong> Verzeichnis<br />
fs q Prozentangabe <strong>der</strong> Quotaauslastung<br />
Tabelle 11.2: Setzen und Ansehen <strong>der</strong> Zugriffsrechte<br />
Zur Anzeige <strong>der</strong> Rechte auf e<strong>in</strong> AFS-Verzeichnis (nur auf diese können AFS-Rechte<br />
gesetzt werden, auf e<strong>in</strong>zelne Dateien nicht) verwendet man folgendes Kommando:<br />
dirk@lsfks02:/afs/.uni-freiburg.de/www/ks/htdocs/systeme> fs la<br />
Access list for . is<br />
Normal rights:<br />
webadm<strong>in</strong>s rlidwka<br />
system:adm<strong>in</strong>istrators rlidwka<br />
www rl<br />
www.ks rl<br />
dsuchod rlidwka<br />
Die Ausgabe zeigt, dass die Benutzer-IDs <strong>der</strong> e<strong>in</strong>geloggten Person an <strong>der</strong> Masch<strong>in</strong>e nicht<br />
zw<strong>in</strong>gend mit <strong>der</strong> AFS-Benutzer-ID übere<strong>in</strong>stimmen müssen. An <strong>der</strong> L<strong>in</strong>ux-Masch<strong>in</strong>e ist<br />
dirk e<strong>in</strong>geloggt, mit dem Kommando klog dsuchod und anschliessen<strong>der</strong> Passwort-<strong>E<strong>in</strong></strong>gabe<br />
hat sich <strong>der</strong> angemeldete Benutzer e<strong>in</strong> AFS-Token für den Zugriff auf die dsuchod freigeschalteten<br />
AFS-Bereiche geholt.<br />
Durch <strong>E<strong>in</strong></strong>gabe des Kommandos fs quota o<strong>der</strong> kürzer fs q im AFS-Baum bekommt<br />
man die Meldung, wieviel Prozent des eigenen Quotas aufgebraucht s<strong>in</strong>d:<br />
dirk@log<strong>in</strong>02:/afs/.uni-freiburg.de/www/ks/htdocs/> fs q<br />
74% of quota used.<br />
<strong>E<strong>in</strong></strong>e ausführlichere Information mit Angabe des zur Verfügung stehenden und verbrauchten<br />
Speicherplatzes bekommt man mit:<br />
dirk@log<strong>in</strong>02:/afs/.uni-freiburg.de/www/ks/htdocs/> fs lq<br />
Volume Name Quota Used %Used Partition<br />
www.ks 400000 295334 74% 73%<br />
Die Zugriffsberechtigungen von AFS beziehen sich immer auf e<strong>in</strong> ganzes Verzeichnis und<br />
alle dar<strong>in</strong> enthaltenen Dateien. Sie beziehen sich nicht automatisch auf enthaltene Unterverzeichnisse.<br />
Wenn die Zugriffsberechtigung für e<strong>in</strong>e e<strong>in</strong>zelne Datei geän<strong>der</strong>t werden soll,<br />
muss diese e<strong>in</strong> an<strong>der</strong>es Verzeichnis mit den gewünschten Zugriffsrechten verschoben werden.<br />
Die Zugriffsberechtigung wird dabei vom übergordneten Verzeichnis geerbt. AFS def<strong>in</strong>iert<br />
<strong>in</strong>sgesammt sieben Rechtearten, dabei beziehen sich vier Zugriffsrechte auf das Verzeichnis.<br />
Drei weitere Berechtigungen beziehen sich auf die Dateien <strong>in</strong>nerhalb des Verzeichnisses
11.2. ANDREW FILESYSTEM (AFS) 165<br />
Kürzel AFS-Recht Beschreibung<br />
a adm<strong>in</strong>ister die ACLs än<strong>der</strong>n<br />
d delete Dateien und Verzeichnisse<br />
löschen o<strong>der</strong> verschieben<br />
i <strong>in</strong>sert Neue Dateien und Verzeichnisse<br />
anlegen<br />
l lookup Inhalt des Verzeichnis kann<br />
aufgelistet werden und e<strong>in</strong><br />
Wechsel <strong>in</strong> dieses Verzeichnis<br />
ist erlaubt<br />
r read Inhalt <strong>der</strong> Dateien lesen. Dazu<br />
gehört z.B. auch ls -l<br />
w write Än<strong>der</strong>n von Dateien<br />
k lock Ermöglicht das Ausführen<br />
von Programmen die über<br />
Systemcalls Dateien sperren<br />
(locks)<br />
Tabelle 11.3: AFS Rechteschema<br />
Beim Setzen des Rechtelevels lookup kann <strong>in</strong> das Verzeichnis gewechselt werden. Der<br />
Inhalt <strong>der</strong> Dateien kann nur dann auch gelesen werden, wenn ebenfalls die Berechtigung<br />
read zur Verfügung steht. Die wichtigsten Berechtigungen lassen sich zusammenfassen, wie<br />
<strong>in</strong> <strong>der</strong> Tabelle zur AFS Rechtegruppierung gezeigt.<br />
Zusammenfassung Beschreibung<br />
all alle Berechtigungen (rlidwka)<br />
none ke<strong>in</strong>e Berechtigung<br />
read nur lesen (rl)<br />
write lesen und schreiben (rlidwk), d.h. alle ausser a<br />
Tabelle 11.4: AFS Rechtegruppierung<br />
<strong>E<strong>in</strong></strong> nettes Feature ist, dass Rechte<strong>in</strong>haber im AFS selbst Verzeichnisse für an<strong>der</strong>e Benutzer<br />
bzw. Gruppen freigeben können. Hierzu dient zuerst e<strong>in</strong>mal das Kommando pts.<br />
pts creategroup dsuchod:systeme<br />
group dsuchod:systeme2 has id -754<br />
pts adduser user01 dsuchod:systeme<br />
fs sa testdir dsuchod:systeme rliwka<br />
Das Ergebnis des Gruppenanlegens ist e<strong>in</strong>gerückt dargestellt. Anschliessend kann e<strong>in</strong> User<br />
(hier: user01) o<strong>der</strong> mehrere dieser Gruppe h<strong>in</strong>zugefügt werden. Mit dem AFS-Kommando<br />
fs sa testdir dsuchod:systeme rliwka wird dann e<strong>in</strong> Rechtemuster auf das Verzeichnis<br />
testdir für die Gruppe dsuchod:systeme e<strong>in</strong>getragen. Dieses Kommando muss entsprechend<br />
für alle gewünschten Verzeichnisse wie<strong>der</strong>holt werden. Dabei sollte man bedenken, dass<br />
auch übergeordnete Verzeichnisse zum<strong>in</strong>dest e<strong>in</strong> Lookup-Recht für die Gruppe bekommen<br />
sollten. Das Anzeigen <strong>der</strong> Rechte im Verzeichnis testdir liefert dann folgendes:<br />
dirk@l<strong>in</strong>ux02:/afs/.uni-freiburg.de/www/ks/htdocs/systeme> fs la<br />
Access list for . is<br />
Normal rights:<br />
dsuchod:systeme rliwka
166 KAPITEL 11. FILESERVER<br />
webadm<strong>in</strong>s rlidwka<br />
system:adm<strong>in</strong>istrators rlidwka<br />
www rl<br />
www.ks rl<br />
dsuchod rlidwka<br />
11.3 File Transfer Protocol<br />
11.3.1 Dateiarchiv - FTP-Server<br />
<strong>E<strong>in</strong></strong>e <strong>der</strong> ältesten Internet-Anwendungen ist <strong>der</strong> Transport von Dateien. Hierfür wurde<br />
e<strong>in</strong> eigenes Protokoll geschaffen. FTP-Server haben heutzutage die Aufgabe große Datenmengen,<br />
meistens Softwarebestände e<strong>in</strong>fach zugänglich zu machen. Meistens wird unter<br />
L<strong>in</strong>ux <strong>der</strong> proftpd e<strong>in</strong>gesetzt. Dieser wird über die Datei /etc/proftpd.conf e<strong>in</strong>gerichtet.<br />
Der FTP-Server kann als standalone Prozess immer im H<strong>in</strong>tergrund laufen o<strong>der</strong> über den<br />
Internet-Superdämon <strong>in</strong>etd o<strong>der</strong> x<strong>in</strong>etd bei Bedarf gestartet werden. Ersteres bedeutet<br />
höheren Speicherverbrauch, die zweite Lösung benötigt durch den Start mehr Resourcen<br />
und braucht etwas längere Antwortzeiten.<br />
11.3.2 FTP-Clients<br />
Nach dem <strong>E<strong>in</strong></strong>loggen bef<strong>in</strong>det man sich auf <strong>der</strong> Kommandoebene von FTP. Hier steht<br />
nicht <strong>der</strong> gesamte UNIX-Befehlswortschatz, son<strong>der</strong>n nur e<strong>in</strong>ige Befehle zur Dateiverwaltung<br />
und zum Datentransport zur Verfügung. Im folgenden sei mit Arbeitsrechner <strong>der</strong> Rechner<br />
geme<strong>in</strong>t, auf dem FTP gestartet wurde, und Zielrechner sei <strong>der</strong> Rechner, mit dem man per<br />
FTP die Verb<strong>in</strong>dung hergestellt hat.<br />
11.4 Das M<strong>in</strong>imal-FTP (TFTP)<br />
Das Trivial File Transfer Protocol (TFTP) 2 dient <strong>in</strong> erster L<strong>in</strong>ie zur Übertragung von zu<br />
bootenden Netzkernels 3 o<strong>der</strong> e<strong>in</strong>es PXE-Bootimages 4 für spezielle Programme zu e<strong>in</strong>em<br />
sehr frühen Zeitpunkt des Rechnerstarts.<br />
Das Protokoll wird zu Beg<strong>in</strong>n des Bootvorganges ausgeführt und muss meistens neben<br />
<strong>der</strong> BOOTP-Implentation auf e<strong>in</strong>em 16 kByte bzw. 32 kByte EPROM Platz f<strong>in</strong>den.<br />
Deshalb ist es auf ger<strong>in</strong>gen Codeumfang optimiert. tftp, die Client-Applikation, braucht<br />
man <strong>in</strong>zwischen häufiger mal wie<strong>der</strong> auf se<strong>in</strong>er Masch<strong>in</strong>e, da viele Embedded Devices e<strong>in</strong>en<br />
e<strong>in</strong>gebauten TFTP-Server zum Update ihres Flash-ROMs haben. Es lässt sich ählich wie<br />
ftp <strong>in</strong>teraktiv bedienen, wenn auch <strong>der</strong> Funktionsumfang vorgebenermassen ziemlich e<strong>in</strong>geschränkt<br />
ist.<br />
2 TFTP wird <strong>in</strong> den folgenden RFCs beschrieben:<br />
• RFC1350 : ”The TFTP Protocol (REVISION 2)”, Juli 1992<br />
• RFC2090 : ”TFTP Multicast Option”, Februar 1997<br />
• RFC2347 : ”TFTP Option Extension”, Mai 1998<br />
• RFC2348 : ”TFTP Blocksize Option”, Mai 1998<br />
• RFC2349 : ”TFTP Timeout Interval and Transfer Size Options”, Mai 1998<br />
3 Welche Optionen dieser enthalten muss, welche Anpassungen notwendig s<strong>in</strong>d und wie man ihn mit e<strong>in</strong>er<br />
entsprechenden Bootsignatur versieht, wird <strong>in</strong> den folgenden Abschnitten erklärt<br />
4 Die notwendigen Erweiterungen von TFTP im Zusammenhang mit PXE f<strong>in</strong>den sich im RFC2349
11.4. DAS MINIMAL-FTP (TFTP) 167<br />
Kommando Funktion<br />
cd Ver- Verzeichnisse wechseln<br />
zeichnis<br />
mkdir Verzeichnis<br />
Verzeichnisse anlegen<br />
rmdir Verzeichnis<br />
Verzeichnisse löschen auf dem Zielrechner<br />
lcd Ver- Verzeichnis auf Arbeitsrechner wechseln<br />
zeichnis<br />
dir zeigt das Directory des Zielrechners an<br />
ldir zeigt das Directory des Arbeitsrechners an<br />
!Kommando aktiviert e<strong>in</strong>e Shell auf dem Arbeitsrechner und führt Kommando<br />
aus<br />
put Da- kopiert Date<strong>in</strong>ame auf den Zielrechner<br />
te<strong>in</strong>ame<br />
mput Date<strong>in</strong>ame(n)<br />
wie put, nur s<strong>in</strong>d hier die Wildcards ** und ? erlaubt<br />
get Da- kopiert Date<strong>in</strong>ame vom Zielrechner auf den Arbeitsrechner<br />
te<strong>in</strong>ame<br />
mget Date<strong>in</strong>ame(n)<br />
entspricht get mit Platzhaltern<br />
ascii schaltet auf den für den Transport von ASCII-Dateien notwendigen<br />
ASCII-Modus um, Vore<strong>in</strong>stellung von Mickey-<br />
FTP<br />
b<strong>in</strong> schaltet auf den für den Transport von b<strong>in</strong>ären Daten notwendigen<br />
B<strong>in</strong>ärmodus um<br />
? o<strong>der</strong> help zeigt e<strong>in</strong>e Liste <strong>der</strong> zur Verfügung stehenden Befehle an<br />
quit beendet FTP<br />
Tabelle 11.5: <strong>E<strong>in</strong></strong>ige wichtige FTP-Kommandos
168 KAPITEL 11. FILESERVER<br />
In aktuellen L<strong>in</strong>ux-Distributionen stehen oft mehrere Implementierungen zur Auswahl.<br />
Der <strong>in</strong>.tftpd ist die klassische Version, <strong>der</strong> atftpd kann mehr und kommt besser mit<br />
PXE klar. Die optimale Konfiguration <strong>in</strong> <strong>der</strong> jeweiligen Umgebung bekommt man wohl am<br />
besten durch Tests heraus. Es kann jedoch immer nur e<strong>in</strong> Dienst gleichzeitig auf e<strong>in</strong>em Port<br />
betrieben werden. Der TFTP-Standard-Port ist UDP 69.<br />
TFTP bietet ke<strong>in</strong>en Schutz durch Passwortauthentifizierung und sollte deshalb mit<br />
Vorsicht, d.h. m<strong>in</strong>destens durch Beschränkung des Hauptverzeichnisses auf den benötigten<br />
Bereich, aufgesetzt werden. Dazu kann durch den (x)<strong>in</strong>etd e<strong>in</strong> TFTP-Root angegeben<br />
werden, was e<strong>in</strong>en Zugriff auf höhere Verzeichnis-Ebenen des Servers verh<strong>in</strong><strong>der</strong>t. Zur Illustration<br />
dienen die nachfolgenden Ausschnitte aus den jeweiligen Konfigurationsdateien.<br />
Der folgende Ausschnitt zeigt e<strong>in</strong> Teil <strong>der</strong> /etc/<strong>in</strong>etd.conf.<br />
[...]<br />
#<br />
# Tftp service is provided primarily for boot<strong>in</strong>g. Most sites<br />
# run this only on mach<strong>in</strong>es act<strong>in</strong>g as "boot servers".<br />
#<br />
tftp dgram udp wait nobody /usr/sb<strong>in</strong>/tcpd <strong>in</strong>.tftpd /boot<br />
bootps dgram udp wait root /usr/sb<strong>in</strong>/bootpd bootpd -c /nfsroot<br />
#<br />
[...]<br />
O<strong>der</strong>: (Ausschnitt <strong>der</strong> /etc/x<strong>in</strong>etd.conf)<br />
[...]<br />
# disabled = bootps<br />
# disabled = tftp<br />
[...]<br />
service tftp<br />
{<br />
socket_type = dgram<br />
protocol = udp<br />
wait = yes<br />
user = nobody<br />
only_from = 172.16.0.0/16 10.0.0.0/8<br />
server = /usr/sb<strong>in</strong>/<strong>in</strong>.tftpd<br />
server_args = /nfsroot<br />
}<br />
<strong>E<strong>in</strong></strong>e mo<strong>der</strong>ne Implementation von TFTP ist <strong>der</strong> atftpd, welcher auch im Standalone-<br />
Betrieb e<strong>in</strong>gesetzt werden kann. Die <strong>E<strong>in</strong></strong>stellungen erfolgen <strong>in</strong> den neueren L<strong>in</strong>ux-Distributionen<br />
mittels Sysconfig-Datei: /etc/sysconfig/atftpd. Hier entnimmt das Runlevel-Skript üblicherweise<br />
die Startoptionen. Der erfolgreiche Start des TFTP-Servers (/etc/<strong>in</strong>it.d/atftpd<br />
start) zeigt sich im System-Logfile auf diese Weise:<br />
Oct 6 21:50:39 hermes atftpd[25183]: Advanced Trivial FTP server started (0.7)<br />
...<br />
Oct 6 21:55:12 hermes atftpd[25184]: Serv<strong>in</strong>g /nfsroot/10.0/boot/vml<strong>in</strong>uz to \<br />
10.20.0.1:41470<br />
Angenommen, das Kernel-Image liegt im Verzeichnis /nfsroot/10.0/boot und trägt den Namen<br />
vml<strong>in</strong>uz. Dann könnte <strong>der</strong> Test auf e<strong>in</strong> funktionierendes TFTP so aussehen:
11.5. WEITERE FILESERVER-KONZEPTE 169<br />
rechner02:~ # atftp bootserver.mydoma<strong>in</strong>.site<br />
tftp> get /nfsroot/10.0/boot/vml<strong>in</strong>uz<br />
tftp> quit<br />
rechner02:~ # ls -lha vml<strong>in</strong>uz<br />
-rw-r--r-- 1 root root 1.5M Oct 6 17:38 vml<strong>in</strong>uz<br />
Liegt dann <strong>der</strong> Kernel <strong>in</strong> <strong>der</strong> richtigen Größe <strong>in</strong> dem Verzeichnis, aus dem man den TFTP-<br />
Client heraus gestartet hat, g<strong>in</strong>g alles glatt. Der <strong>E<strong>in</strong></strong>trag im Logfile sieht dann wie oben<br />
gezeigt aus.<br />
11.5 Weitere Fileserver-Konzepte<br />
Die Idee, Festplattenkapazitäten zu zentralisieren und e<strong>in</strong>er ganzen Reihe verschiedener Masch<strong>in</strong>en<br />
übers e<strong>in</strong> <strong>Netzwerk</strong> zu Verfügung zu stellen, existiert schon lange. Im kommerziellen<br />
Umfeld haben sich neben den Lösungen mit sogenannten Network Attached Storage (NAS),<br />
die dateibasierte Dienste wie NFS o<strong>der</strong> SMB bereistellen, Storage Area Networks (SAN)<br />
etabliert, die meistens auf e<strong>in</strong>er eigenen vom klassischen LAN unabhängigen Fibre-Channel<br />
Fabric basieren.<br />
Die Preise <strong>der</strong> e<strong>in</strong>zelnen Komponenten liegen dabei weit über dem Gewohnten im privaten<br />
Bereich. Für den Anschluss von preiswerteren und leistungsärmeren Endgeräten versucht<br />
die Industrie den iSCSI-Standard zu verbreiten. L<strong>in</strong>ux-Masch<strong>in</strong>en können iSCSI benutzen,<br />
da <strong>der</strong> Kernel die notwendige Treiberunterstützung mitbr<strong>in</strong>gt. Der Overhead ist<br />
für den e<strong>in</strong>fachen Standardarbeitsplatz jedoch immer noch sehr hoch, weshalb sich die Verbreitung<br />
noch sehr <strong>in</strong> Grenzen hält. Die Abbildung zeigt, dass Dateien o<strong>der</strong> Blöcke auf<br />
Server <strong>Netzwerk</strong><br />
Client<br />
Anwendung<br />
VFS<br />
Dateisystem<br />
Blockgerät<br />
ftp, scp, http<br />
LUFS<br />
NFS, SMB<br />
iSCSI, AoE, NBD<br />
Anwendung<br />
VFS<br />
Dateisystem<br />
Blockgerät<br />
Abbildung 11.1: Arbeitsweise von Blockgeräten und Dateisystemen<br />
verschiedenen Ebenen ausgetauscht werden können. Es wird hier nicht berücksichtigt wo<br />
Server und Client letztendlich implementiert s<strong>in</strong>d, son<strong>der</strong>n auf welcher Ebene sie die Daten<br />
<strong>in</strong>terpretieren. Das L<strong>in</strong>ux Userland Filesystem (LUFS) spielt e<strong>in</strong>e Son<strong>der</strong>rolle - es kann<br />
beispielsweise die Dateien e<strong>in</strong>es FTP-Servers als Dateisystem e<strong>in</strong>hängen.<br />
Dieser durchaus s<strong>in</strong>nvolle Ansatz lässt sich mit e<strong>in</strong>igen <strong>E<strong>in</strong></strong>schränkungen auch weitaus<br />
günstiger realisieren. Parallel zu den kommerziellen Implementierungen von SANs haben<br />
sich Kernel-Entwickler darangemacht, Ähnliches auch für L<strong>in</strong>ux zu implementieren. Seit vier<br />
Jahren liegt <strong>der</strong> Code für das Network Block Device dem Ma<strong>in</strong>stream-Kernel bei. Ausgehend<br />
von diesem hat es weitere Entwicklungen auch für durchaus beson<strong>der</strong>e Anfor<strong>der</strong>ungen<br />
gegeben.
170 KAPITEL 11. FILESERVER<br />
11.6 Network Block Devices<br />
<strong>Netzwerk</strong>blockgeräte und <strong>Netzwerk</strong>dateisysteme unterscheiden sich deutlich vone<strong>in</strong>an<strong>der</strong>,<br />
selbst wenn <strong>der</strong> <strong>E<strong>in</strong></strong>satzzweck am Ende recht ähnlich se<strong>in</strong> kann. Dateisysteme kümmern sich<br />
um den Zugriff auf Dateien - Blockgeräte abstrahieren <strong>in</strong> <strong>der</strong> Regel Hardware (z.B. Festplatten)<br />
und erlauben den Datenaustausch <strong>in</strong> Blöcken. <strong>E<strong>in</strong></strong>e Verb<strong>in</strong>dung zwischen beiden<br />
ergibt sich, wenn gewöhnliche Dateisysteme auf blockbasierte Geräte aufgebracht 5 werden,<br />
um die Dateien <strong>in</strong> Form von Blöcken festzuhalten.<br />
<strong>E<strong>in</strong></strong> mo<strong>der</strong>nes Betriebssystem steigert die Performance, <strong>in</strong>dem es Blocktransfers zwischenspeichert,<br />
d.h. Blöcke werden nicht sofort auf Platte geschrieben, son<strong>der</strong>n zuerst noch<br />
im Speicher festgehalten.<br />
In dem sich e<strong>in</strong> Adm<strong>in</strong>istrator auf e<strong>in</strong> <strong>Netzwerk</strong>dateisystem festlegt, bestimmt er die<br />
erlaubten Dateienarten, -größen und Zugriffssteuerungen. So kennt beispielsweise Samba<br />
<strong>in</strong> <strong>der</strong> Default-Konfiguration ke<strong>in</strong>e speziellen <strong>Unix</strong>-Dateien wie Sockets und Named Pipes,<br />
welches e<strong>in</strong>ige Applikationen und grafische L<strong>in</strong>ux-Desktops stolpern lässt. Blockdevices erlauben<br />
pr<strong>in</strong>zipiell den <strong>E<strong>in</strong></strong>satz beliebiger blockbasierter Dateisysteme, völlig unabhängig<br />
davon, ob sie lokal e<strong>in</strong>gebunden werden o<strong>der</strong> per <strong>Netzwerk</strong> zur Verfügung stehen. Das erweitert<br />
die Auswahl ganz erheblich und erlaubt es speziellen Anfor<strong>der</strong>ungen, wie Kompression<br />
<strong>der</strong> Daten, zu berücksichtigen.<br />
<strong>Netzwerk</strong>blockgeräte lassen sich wie <strong>Netzwerk</strong>dateisysteme sowohl nur lesbar als auch<br />
schreibbar exportieren. Der wesentliche Unterschied ergibt beim geme<strong>in</strong>samen Schreiben auf<br />
e<strong>in</strong>e Ressource. <strong>Netzwerk</strong>dateisysteme stellen hier beispielsweise Lock<strong>in</strong>g-Mechanismen bereit<br />
o<strong>der</strong> koord<strong>in</strong>ieren Dateizugriffe so, dass ke<strong>in</strong>e Daten beschädigt werden. <strong>Netzwerk</strong>blockgeräte<br />
betreiben deutlich weniger Aufwand, d.h. e<strong>in</strong> Block wird gelesen o<strong>der</strong> geschrieben.<br />
Sicherheitsmechanismen beschränken sich darauf, dass Blocktransfers atomar durchgeführt<br />
werden. Blockgeräte <strong>in</strong>teressieren sich <strong>in</strong>sbeson<strong>der</strong>e nicht dafür, ob die Blöcke mit e<strong>in</strong>em<br />
Dateisystem <strong>in</strong> Verb<strong>in</strong>dung stehen, d.h. sie haben ke<strong>in</strong>e Ahnung von <strong>der</strong> darüberliegenden<br />
Datenschicht und ihrer Organisation, was <strong>der</strong> verteilten Nutzung e<strong>in</strong>es <strong>Netzwerk</strong>blockgeräts<br />
zusammen mit e<strong>in</strong>em gewöhnlichen blockbasierten Dateisystem e<strong>in</strong>ige Schwierigkeiten bereit.<br />
Würden mehrere Clients geme<strong>in</strong>sam e<strong>in</strong> <strong>Netzwerk</strong>blockgerät ausgestattet mit e<strong>in</strong>em<br />
Dateisystem beschreiben, so gäbe es ke<strong>in</strong>e Instanz, die den verteilten Zugriff regelt. Die<br />
Dateisysteme, die letztendlich e<strong>in</strong> geme<strong>in</strong>sames Blockgerät benutzten, wüssten nichts von<br />
ihrer gegenseitigen Existenz und ke<strong>in</strong>es davon würde es ”begreifen” bzw. berücksichtigen,<br />
dass sich Blöcke plötzlich wie von Zauberhand verän<strong>der</strong>n. Durch lokales Cach<strong>in</strong>g (und damit<br />
noch weniger Synchronisation) ist dann das Wirr-Warr perfekt und die Dateisysteme auf<br />
den unterschiedlichen Clients sehen bald nur noch un<strong>in</strong>terpretierbaren Müll, welches <strong>in</strong> den<br />
meisten Fällen fatale Auswirkungen haben dürfte. Dieses Problem spielt jedoch für spezielle<br />
Szenarien, wie beispielsweise den Betrieb von L<strong>in</strong>ux Diskless Clients nur e<strong>in</strong>e untergeordnete<br />
Rolle.<br />
Bei <strong>Netzwerk</strong>dateisystemen werden viele dieser Probleme vom Kernel abgenommen. Die<br />
Server für die ”e<strong>in</strong>fachen” <strong>Netzwerk</strong>dateisysteme, wie NFS o<strong>der</strong> Samba operieren direkt auf<br />
den normalen Verzeichnissen, wie sie an irgende<strong>in</strong>er Stelle im Serverdateisystem e<strong>in</strong>gehängt<br />
wurden. Damit kann e<strong>in</strong> und dasselbe Unterverzeichnis <strong>in</strong> verschiedenen Arten über das<br />
<strong>Netzwerk</strong> exportiert werden. Oft f<strong>in</strong>det man diese Anwendung bei <strong>der</strong> Bereitstellung von<br />
Home-Verzeichnissen für W<strong>in</strong>dows- und <strong>Unix</strong>-Clients. Das hat den wesentlichen Vorteil,<br />
dass Schreibvorgänge sowohl auf dem Server als auch unterschiedlichen Clients transparent<br />
sichtbar werden. So kann <strong>der</strong> Adm<strong>in</strong> auf dem Server beispielsweise e<strong>in</strong> Software-Update<br />
5 Dieser Vorgang wird geme<strong>in</strong>h<strong>in</strong> als ”formatieren” (e<strong>in</strong>er Festplatte o<strong>der</strong> Partition, ...) bezeichnet
11.7. NBDS IM EINSATZ 171<br />
e<strong>in</strong>spielen, welches sich recht schnell auf alle angeschlossenen Clients auswirkt.<br />
11.7 NBDs im <strong>E<strong>in</strong></strong>satz<br />
Zu den ältesten netzwerktransparenten Blockgeräten zählt das Network Block Device NBD,<br />
welches seit dem späten 2.1er Kernel <strong>in</strong> den Code-Baum aufgenommen wurde. In den modularen<br />
Kernels <strong>der</strong> meisten Ma<strong>in</strong>stream-Distributionen ist NBD deshalb üblicherweise als<br />
Modul enthalten. Es lässt sich e<strong>in</strong>fach mit modprobe nbd laden. Es sollte ke<strong>in</strong>e Fehlermeldung<br />
ersche<strong>in</strong>en, an<strong>der</strong>nfalls ist es nicht korrekt <strong>in</strong>stalliert.<br />
Die notwendigen Userspace-Tools liefern die meisten Distributionen als eigenes Paket<br />
mit.<br />
hermes:~ # modprobe nbd<br />
hermes:~ # which nbd-server<br />
/usr/b<strong>in</strong>/nbd-server<br />
hermes:~ # rpm -q nbd<br />
nbd-2.7.4-2<br />
11.7.1 Erste Versuche mit NBD<br />
Um <strong>Netzwerk</strong>probleme auszuschliessen, führt man Tests zuerst am besten auf <strong>der</strong>selben<br />
Masch<strong>in</strong>e durch. Am e<strong>in</strong>fachsten operiert man mit e<strong>in</strong>er weiteren Partition auf <strong>der</strong> nicht das<br />
Root-Filesystem des Servers liegt. Hat man diese nicht zur Verfügung kann man alternativ<br />
e<strong>in</strong>e Conta<strong>in</strong>er-Datei anlegen und diese mit e<strong>in</strong>em Dateisystem <strong>der</strong> Wahl, welches vom<br />
Serverkernel unterstützt wird, formatieren. Erfolgreich getestet wurden an dieser Stelle die<br />
Dateisysteme ReiserFS, ext2 und XFS. Jedes Formatwerkzeug weist darauf h<strong>in</strong>, dass es sich<br />
bei <strong>der</strong> Datei nicht um e<strong>in</strong> Blockgerät handelt, was aber ohne Folgen ignoriert werden kann.<br />
hermes:~ # mkdir /exports<br />
hermes:~ # dd if=/dev/zero of=/exports/nbd-export bs=1024 count=100000<br />
100000+0 Datensätze e<strong>in</strong><br />
100000+0 Datensätze aus<br />
102400000 bytes (102 MB) copied, 0,987222 seconds, 84 MB/s<br />
hermes:~ # mke2fs nbd-export<br />
mke2fs 1.38 (30-Jun-2005)<br />
/exports/nbd-export ist ke<strong>in</strong> spezielles Block-Gerät.<br />
Trotzdem fortsetzen? (y,n) y<br />
Dateisystem-Label=<br />
OS-Typ: L<strong>in</strong>ux<br />
Blockgröße=1024 (log=0)<br />
[ ... ]<br />
hermes:~ # nbd-server 5000 /exports/nbd-export<br />
hermes:~ # nbd-client 127.0.0.1 5000 /dev/nbd0<br />
Negotiation: ..size = 100000KB<br />
bs=1024, sz=100000<br />
hermes:~ # mount /dev/nbd0 /mnt<br />
hermes:~ # ls /mnt<br />
. .. lost+found<br />
hermes:~ # df<br />
Dateisystem 1K-Blöcke Benutzt Verfügbar Ben% <strong>E<strong>in</strong></strong>gehängt auf<br />
[ ... ]<br />
/dev/nbd0 96828 13 91815 1% /mnt<br />
hermes:/ # time dd if=/dev/zero of=/mnt/text count=8192 bs=1024<br />
8192+0 Datensätze e<strong>in</strong><br />
8192+0 Datensätze aus
172 KAPITEL 11. FILESERVER<br />
8388608 bytes (8,4 MB) copied, 0,038112 seconds, 220 MB/s<br />
real 0m0.046s<br />
user 0m0.008s<br />
sys 0m0.036s<br />
Im Beispiel agiert <strong>der</strong> NBD-Server auf e<strong>in</strong>er 100 MByte grossen Datei. Er bietet se<strong>in</strong>e<br />
Dienste auf Port 5000 an. Die Portnummer kann frei gewählt werden. So lassen sich<br />
auch mehrere Server für verschiedenen Conta<strong>in</strong>er starten. Der NBD-Client setzt das geladene<br />
Kernelmodul voraus und benötigt als Parameter beim Aufruf die IP-Adresse und<br />
Portnummer des Servers gefolgt vom Namen des lokal anzusprechenden Blockdevices.<br />
Zum (Performance-)Vergleich kann man die Datei e<strong>in</strong>fach ”loopback” mounten:<br />
hermes:/ # mount -o loop /exports/nbd-export /mnt<br />
hermes:/ # time dd if=/dev/zero of=/mnt/text count=8192 bs=1024<br />
8192+0 Datensätze e<strong>in</strong><br />
8192+0 Datensätze aus<br />
8388608 bytes (8,4 MB) copied, 0,034517 seconds, 243 MB/s<br />
real 0m0.040s<br />
user 0m0.008s<br />
sys 0m0.024s<br />
Der Performance-Verlust, zugegebenermaßen ist die Messmethode eher grob, hält sich bei<br />
<strong>der</strong> Verwendung des <strong>Netzwerk</strong>blockgerätes <strong>in</strong> Grenzen. Wenn alles auf e<strong>in</strong>er Masch<strong>in</strong>e geklappt<br />
hat, kann man darangehen und auf e<strong>in</strong>er entfernten Masch<strong>in</strong>e das Blockdevice e<strong>in</strong>b<strong>in</strong>den.<br />
Dazu muss im Aufruf lediglich die Localhost-Adresse gegen die IP-Adresse des<br />
Servers getauscht werden.<br />
Möchte man e<strong>in</strong>e Partition o<strong>der</strong> e<strong>in</strong> LVM-Volume an Stelle e<strong>in</strong>er Datei exportieren,<br />
tauscht man den Date<strong>in</strong>amen gegen den Namen des speziellen Devices aus:<br />
l<strong>in</strong>ux01:/ # nbd-server 5001 /dev/sda4<br />
Nachdem <strong>der</strong> Server läuft, kann sich <strong>der</strong> Client auf diesen mit IP-Adresse und Portnummer<br />
verb<strong>in</strong>den. Die Verb<strong>in</strong>dung wurde erfolgreich <strong>in</strong>itialisiert, wenn nbd-client ke<strong>in</strong>e Fehlermeldung<br />
ausgibt.<br />
Die Verb<strong>in</strong>dung zum Server kann vom Client durch den Aufruf von nbd-client -d<br />
/dev/nbd0 gelöst werden. Vorher sollte jedoch das e<strong>in</strong>gehängte Blockdevice ausgemountet<br />
werden:<br />
l<strong>in</strong>ux01:/ # umount /mnt<br />
l<strong>in</strong>ux01:/ # nbd-client -d /dev/nbd0<br />
NBD ist recht e<strong>in</strong>fach gestrickt: Es überlässt die Integritätsprüfung <strong>der</strong> übertragenen Daten<br />
dem darunterliegenden TCP.<br />
11.7.2 NBD und Filesysteme<br />
In <strong>der</strong> bisher geschil<strong>der</strong>ten Anwendung des Blockdevices gelten die identischen <strong>E<strong>in</strong></strong>schränkungen<br />
für e<strong>in</strong>e Festplatte bzw. e<strong>in</strong>e Partition auf dieser: Nur e<strong>in</strong>e Masch<strong>in</strong>e kann gleichzeitig<br />
lesend und schreibend darauf zugreifen. Es gibt an<strong>der</strong>s als bei <strong>Netzwerk</strong>dateisystemen<br />
ke<strong>in</strong>en e<strong>in</strong>gebauten Mechanismus <strong>der</strong> sich um Lock<strong>in</strong>g o<strong>der</strong> den Abgleich <strong>der</strong> Buffer <strong>der</strong><br />
verschiedenen Masch<strong>in</strong>en kümmert.<br />
Nun spielt dieses Szenario des geme<strong>in</strong>samen schreibenden Zugriffs <strong>in</strong> vielen Fällen, wie<br />
beispielsweise für das Root-Filesystem von Diskless Clients o<strong>der</strong> das Bereitstellen e<strong>in</strong>es geme<strong>in</strong>samen<br />
Applikationsverzeichnisses ke<strong>in</strong>e Rolle. Dann kann man den Blockdevice-Server
11.7. NBDS IM EINSATZ 173<br />
mit <strong>der</strong> Option ”-r” im nur lesbaren Modus starten: Nun kann ke<strong>in</strong> Client Än<strong>der</strong>ungen am<br />
Blockdevice vornehmen. Bei Verwendung dieser Option s<strong>in</strong>d Journal<strong>in</strong>g-Filesysteme ausgeschlossen.<br />
We<strong>der</strong> ext3, noch ReiserFS o<strong>der</strong> XFS liessen sich per nur lesbarem Blockdevice<br />
erfolgreich mounten. Die Fehlermeldungen fielen dabei je nach Dateisystem unterschiedlich<br />
harsch aus:<br />
hermes:~ # mount -t reiserfs /dev/nbd0 /mnt<br />
Kernel call returned: Connection reset by peerClos<strong>in</strong>g: que, sock, done<br />
mount: wrong fs type, bad option, bad superblock on /dev/nbd0,<br />
miss<strong>in</strong>g codepage or other error<br />
In some cases useful <strong>in</strong>fo is found <strong>in</strong> syslog - try<br />
dmesg | tail or so<br />
hermes:~ # mount -t xfs /dev/nbd0 /mnt/<br />
Kernel call returned: Connection reset by peerClos<strong>in</strong>g: que, sock, done<br />
mount: /dev/nbd0: Konnte den Superblock nicht lesen<br />
Auch <strong>der</strong> <strong>E<strong>in</strong></strong>satz <strong>der</strong> Mount-Option ”-o ro” brachte ke<strong>in</strong>e Entspannung. Die Dateisysteme<br />
SquashFS und ext2 hatten jedoch ke<strong>in</strong>e Schwierigkeiten.<br />
<strong>E<strong>in</strong></strong>e Alternative beschreiben die Autoren mit <strong>der</strong> Option ”-c”. Dann kann <strong>der</strong> NBD-<br />
Server e<strong>in</strong> Copy-on-Write ausführen. Dazu legt er für jeden Client e<strong>in</strong>e Datei an, <strong>in</strong> die alle<br />
Än<strong>der</strong>ungen geschrieben werden.<br />
hermes:~ # nbd-server 5000 /exports/nbd-export -c<br />
hermes:~ # nbd-client 127.0.0.1 5000 /dev/nbd0<br />
hermes:~ # mount -t xfs /dev/nbd0 /mnt<br />
hermes:~ # ls -al /exports<br />
<strong>in</strong>sgesamt 100008<br />
drwxr-xr-x 2 root root 60 2006-04-03 12:39 .<br />
drwxr-xr-x 23 root root 4096 2006-03-25 21:16 ..<br />
-rw-r--r-- 1 root root 102400000 2006-04-03 12:33 nbd-export<br />
-rw------- 1 root root 270336 2006-04-03 12:39 nbd-export-127.0.0.1-7812.diff<br />
Hier sieht man nun, dass e<strong>in</strong>e separate Datei für die Än<strong>der</strong>ungen angelegt wird. Nach<br />
e<strong>in</strong>em Disconnect des Clients gehen diese Än<strong>der</strong>ungen verloren, obwohl die Datei selbst erhalten<br />
bleibt. Macht man nun das Experiment das Blockdevice unter e<strong>in</strong>em <strong>der</strong> Journal<strong>in</strong>g-<br />
Dateisysteme Readonly e<strong>in</strong>zub<strong>in</strong>den, sieht man, dass trotzdem etwas auf das Device geschrieben<br />
wird. Das erklärt die vorher beschriebenen Probleme.<br />
Die ”-c” Option wird von den Entwicklern des Network Block Device als nicht beson<strong>der</strong>s<br />
performant beschrieben, weshalb sich hier besser clientseite Lösungen, wie UnionFS<br />
o<strong>der</strong> das COW-Modul anbieten. Generell muss auch beim NBD gesagt werden, dass das Sicherheitskonzept<br />
alles an<strong>der</strong>e als ausgefeilt ist. Ähnlich zu NFS, jedoch deutlich unflexibler,<br />
kann man e<strong>in</strong>e Liste von Rechnern angeben, denen <strong>der</strong> Zugriff auf das Device gestattet wird.<br />
Abhilfe könnten hier verschlüsselte Dateisysteme schaffen. An<strong>der</strong>nfalls hat man zum<strong>in</strong>dest<br />
auf <strong>der</strong> Ebene <strong>der</strong> Sicherheit gegenüber e<strong>in</strong>em NFS <strong>der</strong> Version 2 o<strong>der</strong> 3 nichts gewonnen.<br />
11.7.3 DNBD - e<strong>in</strong>e spezialisierte Alternative<br />
Neben NBD gibt es weitere freie Implementierung e<strong>in</strong>es <strong>Netzwerk</strong>blockgeräts, wie beispielsweise<br />
ENBD, GNBD o<strong>der</strong> ANBD. Da die jeweiligen Blockgerätetreiber aber (noch) nicht<br />
Bestandteil des Kernels s<strong>in</strong>d, sucht man e<strong>in</strong> <strong>in</strong>stallierbares Paket bei vielen Distributionen<br />
oft vergeblich. In diesem Fall müssen die Quellen von den unten angegeben Adressen selbst<br />
bezogen werden. Für den Mehraufwand bekommt man beispielsweise bei ENBD e<strong>in</strong>e Fehlerbehandlung<br />
mit dem automatischen Wie<strong>der</strong>aufbau e<strong>in</strong>er abgebrochenen Verb<strong>in</strong>dung, <strong>der</strong><br />
gleichzeitigen Benutzung mehrerer Kanäle und vieles mehr.
174 KAPITEL 11. FILESERVER<br />
Für e<strong>in</strong> recht spezifisches Umfeld, nämlich für den Diskless-Betrieb <strong>in</strong> Funknetzen,<br />
gibt es DNBD, welches hier auftretende Probleme auf beson<strong>der</strong>e Art und Weise handhabt.<br />
In e<strong>in</strong>em typischen Funknetz-Szenario assozieren sich Clients mit e<strong>in</strong>em Access Po<strong>in</strong>t<br />
und benutzen dabei dieselbe Frequenz, was natürlich bedeutet, dass für e<strong>in</strong>e funktionierende<br />
Kommunikation nur e<strong>in</strong> Client zu e<strong>in</strong>em bestimmten Zeitpunkt senden darf. H<strong>in</strong>zu<br />
kommt die niedrige Bandbreite, die bei den heute verwendeten Technologien, wie dem IE-<br />
EE 802.11b/a/g Standard, auf 54 Mbit/s begrenzt ist. Manche Hersteller versprechen zwar<br />
Datenraten von 108 Mbit/s - bei allen ist <strong>der</strong> effektive Durchsatz aber meist viel niedriger.<br />
Unabhängig von <strong>der</strong> Datenrate s<strong>in</strong>d aber die Kosten für neue Clients, was die Größe <strong>der</strong><br />
transferierten Datenmengen betrifft. Verdoppelt man die Anzahl <strong>der</strong> Clients, so lässt im<br />
Durchschnitt <strong>in</strong> e<strong>in</strong>em bestimmten Zeit<strong>in</strong>tervall nur noch die halbe Datenmenge je Client<br />
übertragen.<br />
Die Frage ist nun, ob es denn überhaupt möglich und s<strong>in</strong>nvoll ist, das Konzept festplattenloser<br />
Rechner zum Beispiel auf mobile Pools <strong>in</strong> Funknetzen auszuweiten. Das Problem<br />
<strong>der</strong> begrenzten Bandbreite und schlechten Skalierbarkeit zusammen mit dem Wunsch e<strong>in</strong>er<br />
Fehlerbehandlung (z.B. mit Failover auf replizierte Server) und das <strong>in</strong> unzuverlässigen<br />
Netzen mit Paketverlusten, sprechen nicht gerade für e<strong>in</strong>en solchen <strong>E<strong>in</strong></strong>satz.<br />
DNBD versucht deshalb, im Unterschied zu den bisher vorgestellten <strong>Netzwerk</strong>blockgeräten<br />
anfallende Datenmengen so weit wie möglich zu m<strong>in</strong>imieren und dabei die Beson<strong>der</strong>heiten<br />
e<strong>in</strong>es Funknetzes auszunutzen. Zuerst wird für e<strong>in</strong> vere<strong>in</strong>fachtes Protokoll auf<br />
Lock<strong>in</strong>g-Mechanismen verzichtet und nur lesbarer Zugriff erlaubt, was clientseitig beispielweise<br />
mit cowloop wie<strong>der</strong> aufgehoben werden kann. Zweitens werden Blöcke, die von e<strong>in</strong>em<br />
Client angefor<strong>der</strong>t werden und schließlich vom Server geliefert werden, von an<strong>der</strong>en Clients<br />
gecachet, falls diese später selbst Bedarf dafür haben sollten. Drittens wird UDP als<br />
verb<strong>in</strong>dungsloses Protokoll verwendet und Paketverluste und an<strong>der</strong>e Kommunikationsprobleme<br />
werden von DNBD selbst bearbeitet.<br />
Jetzt stellt sich nur noch die Frage, wie Blöcke abgefangen und gecachet werden können.<br />
Das geme<strong>in</strong>sam benutzte Medium bei Funknetzen erlaubt zwar pr<strong>in</strong>zipiell das Mithören<br />
<strong>der</strong> Kommunikation an<strong>der</strong>er Clients - lei<strong>der</strong> unterstützen aber nicht alle Karten e<strong>in</strong>en<br />
so genannten Promiscuous- bzw. Monitor-Modus. Und falls doch, so muss dieser für die<br />
jeweiligen Chipsätze meist auf unterschiedliche Art und Weise aktiviert werden. DNBD<br />
benutzt deshalb IP-Multicast, um e<strong>in</strong>e Gruppe von Clients gleichzeitig zu adressieren. <strong>E<strong>in</strong></strong>e<br />
IP-Multicast-Adresse liegt hier im Netz 224.0.0.0/4 - für Experimente sollte das Netz<br />
239.0.0.0/8 benutzt werden. Bevor bei DNBD e<strong>in</strong> Client auf e<strong>in</strong> <strong>Netzwerk</strong>blockgerät zugreifen<br />
kann, versucht er vorhandene Server zu f<strong>in</strong>den, <strong>in</strong>dem er bestimmte Pakete an<br />
die gegebene Multicast-Adresse schickt. Die Server beantworten die Anfrage und liefern<br />
gleichzeitig Informationen über das vorhandene Blockgerät. Die Clients benutzen diese Daten<br />
zu Konfiguration und können fortan Blöcke anfragen. Die komplette Kommunikation<br />
funktioniert mit UDP aus mehreren Gründen: Das e<strong>in</strong>fach gestrickte UDP (im Vergleich<br />
zu TCP) ist völlig ausreichend um Blöcke anzufor<strong>der</strong>n und bietet die Möglichkeit eigene<br />
(meist zeitgesteuerte) Methoden für den Datenfluss etc. zu realisieren; außerdem ist Multicast<br />
mit TCP beim L<strong>in</strong>ux-<strong>Netzwerk</strong>stack nicht implementiert und se<strong>in</strong>e Verwendung wäre<br />
überhaupt nicht möglich gewesen.<br />
Für e<strong>in</strong>e hohe Verfügbarkeit lassen sich Server zusätzlich replizieren. Neue Server werden<br />
von den Clients dabei automatisch gefunden, <strong>in</strong>dem dauernd statistische Daten gesammelt<br />
werden, und Server mit niedrigen Antwortzeiten ausgesucht werden. Für den<br />
<strong>E<strong>in</strong></strong>satz von DNBD <strong>in</strong> kabelgebundenen Netzen wird wegen des Overheads <strong>der</strong> Multicast-<br />
Kommunikation allerd<strong>in</strong>gs noch abgeraten bis DNBD auch Unicast-Kommunikation unterstützt.
11.8. SPEZIELLE BLOCKDEVICE-ERWEITERUNGEN 175<br />
Natürlich werden immer für s<strong>in</strong>nvolles Cach<strong>in</strong>g Lokalitätseigenschaften vorausgesetzt,<br />
d.h. <strong>in</strong> unserem Fall sollten unterschiedliche Clients <strong>in</strong> e<strong>in</strong>em gewissen Zeitraum auf dieselben<br />
Blöcke zugreifen. Dies ist zum Beispiel beim simultanen Start von verschiedenen<br />
Diskless Clients <strong>in</strong> Funknetzen gegeben. <strong>E<strong>in</strong></strong>e weitere Anwendung ist die Bereitstellung von<br />
Multimedia-Inhalten <strong>in</strong> Funknetzen: Mehrere Clients können e<strong>in</strong>e DVD über e<strong>in</strong> WLAN<br />
abspielen, wobei dank des Caches auch Zeitdifferenzen erlaubt s<strong>in</strong>d, ohne dass e<strong>in</strong> neuer<br />
Stream gestartet werden muss.<br />
11.8 Spezielle Blockdevice-Erweiterungen<br />
In Umgebungen von Diskless Clients spielt die Beschreibbarkeit des Dateisystems e<strong>in</strong>e beson<strong>der</strong>e<br />
Rolle. <strong>E<strong>in</strong></strong>erseits soll das Dateisystem auf dem Server ”sauber” bleiben, d.h. Clients<br />
bekommen ke<strong>in</strong>en Zugriff, Systemdateien zu verän<strong>der</strong>n. An<strong>der</strong>erseits setzen Clients<br />
voraus, dass Dateien, die für den Betrieb notwendig s<strong>in</strong>d, angelegt o<strong>der</strong> verän<strong>der</strong>t werden<br />
können, z.B. /etc/resolv.conf. Bei e<strong>in</strong>em nur lesbaren Blockgerät ergibt sich hier e<strong>in</strong>e<br />
Möglichkeit, <strong>in</strong>dem es mit cowloop (Copy-on-Write-Loopback Device) schreibbar gemacht<br />
wird. Geän<strong>der</strong>te Blöcke werden getrennt <strong>in</strong> e<strong>in</strong>em so genannten ”sparse file” aufbewahrt,<br />
welches sich wie<strong>der</strong>um <strong>in</strong> e<strong>in</strong>er Ramdisk bef<strong>in</strong>den kann. An<strong>der</strong>s als bei UnionFS, wo selbst<br />
bei kle<strong>in</strong>sten Än<strong>der</strong>ungen an e<strong>in</strong>er Datei diese schon komplett <strong>in</strong> die beschreibbare Schicht<br />
kopiert werden muss, geht cowloop sparsamer mit dem Platz um und vermerkt nur wirklich<br />
geän<strong>der</strong>te Blöcke. Es setzt dafür jedoch e<strong>in</strong> schreibbares Dateisystem voraus: <strong>E<strong>in</strong></strong> mit<br />
dem RO-Filesystem SquashFS formatiertes <strong>Netzwerk</strong>blockgerät wird auch durch spezielle<br />
Write-Loopback-Devices nicht verän<strong>der</strong>bar.<br />
<strong>E<strong>in</strong></strong> Nachteil bei dieser Benutzung von <strong>Netzwerk</strong>blockgeräten ist, dass sich die Clients<br />
nicht transparent updaten lassen. Än<strong>der</strong>ungen am Blockdevice auf dem Server erfor<strong>der</strong>n<br />
e<strong>in</strong>en Neustart <strong>der</strong> Clients o<strong>der</strong> zum<strong>in</strong>dest e<strong>in</strong>en komplizierten Remount Mechanismus. Da<br />
Än<strong>der</strong>ungen am System <strong>in</strong> <strong>der</strong> <strong>Praxis</strong> meist nur bei Sicherheitsupdates o<strong>der</strong> e<strong>in</strong>em Umstieg<br />
auf e<strong>in</strong>e neuen Ausgabe <strong>der</strong> Distribution wirklich notwendig s<strong>in</strong>d, hält sich <strong>der</strong> Aufwand <strong>in</strong><br />
Grenzen.<br />
Wurde e<strong>in</strong> Network Block Device wie im letzten Abschnitt beschrieben aufgesetzt, so<br />
lässt sich cowloop wie folgt e<strong>in</strong>setzen:<br />
l<strong>in</strong>ux01:~ # modprobe cowloop<br />
l<strong>in</strong>ux01:~ # cowdev -a /dev/nbd0 /tmp/nbd.cow<br />
/dev/cow/0<br />
l<strong>in</strong>ux01:~ # mkdir /mnt/nbd-rw && mount /dev/cow/0 /mnt/nbd-rw<br />
l<strong>in</strong>ux01:~ # umount /mnt/nbd-rw && cowdev -d /dev/cow/0<br />
In diesem Beispiel wird e<strong>in</strong> <strong>Netzwerk</strong>blockgerät mit <strong>der</strong> schreibbaren Datei /tmp/nbd.cow<br />
verknüpft und das neue Blockgerät dann gemountet. Schreibvorgänge <strong>in</strong> nbd-rw wirken sich<br />
deshalb nicht auf das zu Grunde liegende <strong>Netzwerk</strong>blockgerät aus. Falls sich cowloop über<br />
e<strong>in</strong> fehlendes /dev/cow/ctl o<strong>der</strong> /dev/cow/0 beschwert, so hilft<br />
l<strong>in</strong>ux01:~ # mkdir /dev/cow && mknod /dev/cow/ctl b 241 255<br />
l<strong>in</strong>ux01:~ # ln -s /dev/cowloop0 /dev/cow/0
176 KAPITEL 11. FILESERVER<br />
nur lesbares<br />
Blockgerät<br />
copy-on-write<br />
Blockgerät<br />
Dateisystem<br />
Lesen Lesen und Schreiben<br />
schreibbare<br />
Datei<br />
Abbildung 11.2: Das Cowloop-Blockgerät basiert auf e<strong>in</strong>em weiteren Blockgerät und hält<br />
geän<strong>der</strong>te Blöcke <strong>in</strong> e<strong>in</strong>er Datei fest
Kapitel 12<br />
Samba<br />
12.1 Samba - Brücke zwischen Microsoft- und <strong>Unix</strong>-Welt<br />
Für viele gehören Samba und L<strong>in</strong>ux e<strong>in</strong>fach zusammen - <strong>der</strong> Anteil von Samba an <strong>der</strong> Popularisierung<br />
von L<strong>in</strong>ux ist nicht zu unterschätzen. Samba bildet e<strong>in</strong>e <strong>der</strong> wichtigsten Brücken<br />
zwischen <strong>der</strong> L<strong>in</strong>ux/<strong>Unix</strong> und W<strong>in</strong>dowswelt. Dieses beg<strong>in</strong>nt bei e<strong>in</strong>fachen Verzeichnis- und<br />
Druckerfreigaben und läßt sich fortsetzen bis zu S<strong>in</strong>gle-Password- o<strong>der</strong> S<strong>in</strong>gle-Sign-On-<br />
Lösungen und komplexen Doma<strong>in</strong>controller-Aufgaben, die e<strong>in</strong> L<strong>in</strong>ux-Rechner übernehmen<br />
kann. ”Samba” steht für die freie Implementierung e<strong>in</strong>es Server Message Block Protokollservers.<br />
Samba spricht sich e<strong>in</strong>fach besser aus und kl<strong>in</strong>gt netter als die Abkürzung des<br />
Protokollnamens ”SMB”.<br />
Microsoft-Rechner benutzen dieses Protokoll untere<strong>in</strong>an<strong>der</strong>, um auf Dateien und Drucker<br />
über e<strong>in</strong> <strong>Netzwerk</strong> zuzugreifen. In dieses <strong>Netzwerk</strong> können sich auch L<strong>in</strong>ux o<strong>der</strong> <strong>Unix</strong>rechner<br />
dank Samba e<strong>in</strong>kl<strong>in</strong>ken. Sie können dabei dank Samba als Client agieren o<strong>der</strong> auch<br />
tragen<strong>der</strong>e Rollen übernehmen.<br />
Samba ist e<strong>in</strong> Open-Source-Projekt welches im Jahre 1991 von Andrew Tridgell an <strong>der</strong><br />
Canberra University <strong>in</strong> Australien gestartet wurde. Entsprechend steht <strong>der</strong> <strong>in</strong> C geschriebene<br />
Source-Code jedem zur Verfügung. Je<strong>der</strong> kann ihn anpassen, untersuchen und testen.<br />
Für Adm<strong>in</strong>istratoren <strong>in</strong> Firmen und Organisationen das Wichtigste: Samba ist frei. An<strong>der</strong>s<br />
als für jede Microsoft Installation fallen für das Aufsetzen e<strong>in</strong>es Samba-Servers o<strong>der</strong> die<br />
Benutzung <strong>der</strong> Samba-Dienste unter L<strong>in</strong>ux ke<strong>in</strong>erlei Lizenzgebühren an.<br />
12.1.1 <strong>E<strong>in</strong></strong>satzgebiete von Samba<br />
SMB beschränkt sich nicht auf die Funktion als <strong>Netzwerk</strong>dateisystem o<strong>der</strong> Remote-Pr<strong>in</strong>ter.<br />
Alle<strong>in</strong> schon für diese beiden Aufgaben gibt es <strong>in</strong> <strong>der</strong> <strong>Unix</strong>welt zwei verschiedene Dienste:<br />
Beispielsweise LPD für Drucker und NFS für <strong>Netzwerk</strong>dateisysteme. SMB kann e<strong>in</strong>e ganze<br />
Menge mehr:<br />
• Das Samba-Paket enthält SMB-Clients, mittels <strong>der</strong>er <strong>Unix</strong>-Rechner auf freigegebene<br />
Dateien o<strong>der</strong> Drucker an<strong>der</strong>er SMB-Server zugreifen können. <strong>E<strong>in</strong></strong> L<strong>in</strong>uxclient kann<br />
so Druckjobs an e<strong>in</strong>en W<strong>in</strong>dowsdrucker absetzen o<strong>der</strong> e<strong>in</strong> geme<strong>in</strong>sames Dokumentenverzeichnis<br />
von e<strong>in</strong>er W<strong>in</strong>dowsmasch<strong>in</strong>e e<strong>in</strong>b<strong>in</strong>den. Diese Funktionalität stellt e<strong>in</strong>e<br />
Bibliothek zur Verfügung, die von an<strong>der</strong>en Programmen genutzt werden kann, bsp.<br />
dem KDE-Konqueror. Für die Kommandozeile liefert Samba die Tools smbmount,<br />
smbclient und mount.cifs mit.<br />
• Samba realisiert e<strong>in</strong>ige Erweiterungen des SMB-Dateisystems, damit bestimmte <strong>Unix</strong>-<br />
Dateien auf entfernten SMB-Freigaben abgelegt werden können.<br />
177
178 KAPITEL 12. SAMBA<br />
• Samba kann die Aufgaben des W<strong>in</strong>dows-Namens-Dienstes (WINS) übernehmen: Als<br />
NetBIOS-Nameserver kann es Namen auf IP-Nummern und umgekehrt abbilden.<br />
Zusätzlich unterstützt es NetBIOS-Brows<strong>in</strong>g und Browse-Master-Auswahl.<br />
• Samba kann e<strong>in</strong> S<strong>in</strong>gle-Sign-On realisieren: Der Zugriff auf den L<strong>in</strong>ux-Account und<br />
die <strong>E<strong>in</strong></strong>b<strong>in</strong>dung des L<strong>in</strong>ux-Homeverzeichnisses unter W<strong>in</strong>dows laufen mit identischen<br />
IDs und Passwort.<br />
• Samba kann als primärer Domänen-Controller für W<strong>in</strong>dows-Clients e<strong>in</strong>gesetzt werden.<br />
• Samba br<strong>in</strong>gt Werkzeuge für entfernte Adm<strong>in</strong>istrationsaufgaben für W<strong>in</strong>dows-NTund<br />
Samba-Server mit.<br />
12.2 Erste Versuche<br />
Wenn Samba schon auf <strong>der</strong> Masch<strong>in</strong>e <strong>in</strong>stalliert ist, kann <strong>der</strong> Anwen<strong>der</strong> schonmal erste<br />
Schritte wagen. Wenn nicht, überspr<strong>in</strong>gt er diesen Abschnitt und kümmert sich erste<strong>in</strong>mal<br />
um die Installation. Samba funktioniert <strong>in</strong> ”beide Richtungen”: Es stellt Client- und Serverfunktionalität<br />
bereit. Für viele, die von <strong>der</strong> W<strong>in</strong>dows-Seite her kommen, ist es bekannt, wie<br />
Freigaben unter W<strong>in</strong>dows erfolgen. Man gibt e<strong>in</strong>fach mal e<strong>in</strong> Unterverzeichnis mit Klicken<br />
<strong>der</strong> rechten Maustaste auf den Ordner frei. Dann def<strong>in</strong>iert man die <strong>E<strong>in</strong></strong>stellungen <strong>in</strong> <strong>der</strong><br />
Registerkarte ...<br />
Abbildung 12.1: Freigeben e<strong>in</strong>es Verzeichnisses unter W<strong>in</strong>dowsXP und Setzen <strong>der</strong> Zugriffsrechte<br />
12.2.1 W<strong>in</strong>dows-Server - L<strong>in</strong>ux-Client<br />
Diese Freigabe o<strong>der</strong> ”Share” kann nun von L<strong>in</strong>ux aus e<strong>in</strong>gebunden werden. Hierzu gibts<br />
das Kommando smbmount o<strong>der</strong> se<strong>in</strong> Nachfolger mount.cifs. Mounts können aus Sicherheitsgründen<br />
unter L<strong>in</strong>ux nur vom Benutzer ”root” ausgeführt werden.<br />
Jedoch gibt es auch Möglichkeiten dieses normalen Usern zu erlauben. In <strong>der</strong> Standard<strong>in</strong>stallation<br />
liefert smbmount bei unpriveligiertem Aufruf die Fehlermeldungsmbmnt must<br />
be <strong>in</strong>stalled suid root for direct user mounts (500,500). Dem kann man unter
12.2. ERSTE VERSUCHE 179<br />
Verzicht auf etwas Sicherheit abhelfen:chmod u+s /usr/b<strong>in</strong>/smbmnt /usr/b<strong>in</strong>/smbumount.<br />
Anschliessend b<strong>in</strong>det <strong>der</strong> Aufruf<br />
smbmount //10.8.4.204/SharedFiles w<strong>in</strong> -o username=dirk<br />
die W<strong>in</strong>dows-Freigabe ”ShraredFiles” an das Unterverzeichnis w<strong>in</strong>. Die Verb<strong>in</strong>dung erfolgt<br />
mit <strong>der</strong> W<strong>in</strong>dows-UserID ”dirk”, das Passwort fragt smbmount dann <strong>in</strong>teraktiv ab. Anschliessend<br />
gibt das Kommando mount das e<strong>in</strong>gebundene Verzeichnis <strong>in</strong> se<strong>in</strong>er Liste mit<br />
an:<br />
dirk@l<strong>in</strong>ux:~> mount<br />
/dev/hdb2 on / type ext3 (rw)<br />
proc on /proc type proc (rw)<br />
tmpfs on /dev/shm type tmpfs (rw)<br />
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)<br />
/dev/hdc2 on /home type ext3 (rw)<br />
//10.8.4.204/SharedFiles on /home/dirk/w<strong>in</strong> type smbfs (0)<br />
Der Inhalt des Verzeichnisses w<strong>in</strong> s<strong>in</strong>d die Dateien, die sich auf <strong>der</strong> W<strong>in</strong>dows-Masch<strong>in</strong>e<br />
im freigegebenen Ordner bef<strong>in</strong>den. Es gibt jedoch e<strong>in</strong>ige <strong>E<strong>in</strong></strong>schränkungen: Dateien und<br />
Ordner kann <strong>der</strong> Nutzer wie gewohnt anlegen. Die Dateien gehören immer ihm, das <strong>Unix</strong>-<br />
Rechtemuster wird nur zum Teil abgebildet. Nicht möglich s<strong>in</strong>d spezielle Dateien, wie L<strong>in</strong>ks,<br />
Sockets o<strong>der</strong> Named Pipes. Der Vorteil von Samba: An<strong>der</strong>s als mit NFS o<strong>der</strong> Geräten muss<br />
ke<strong>in</strong> passen<strong>der</strong> <strong>E<strong>in</strong></strong>trag <strong>in</strong> <strong>der</strong> /etc/fstab stehen, um Benutzern das <strong>E<strong>in</strong></strong>b<strong>in</strong>den von W<strong>in</strong>dows-<br />
Freigaben zu erlauben.<br />
Umgekehrt wird <strong>der</strong> Nutzer das e<strong>in</strong>gebundene ”Share” durch den Befehl smbumount<br />
wie<strong>der</strong> los: smbumount w<strong>in</strong> meldet die Freigabe ab und die Liste des Mount-Kommandos<br />
reduziert sich um den entsprechenden <strong>E<strong>in</strong></strong>trag. Für diese kle<strong>in</strong>en Experimente ist es nicht<br />
notwendig, dass die beiden Samba-Dämonen smbd und nmbd gestartet s<strong>in</strong>d.<br />
Mit <strong>der</strong> Weiterentwicklung von W<strong>in</strong>dows und Samba wird das lange Zeit vorherrschende<br />
SMB-Filesystem (smbfs) zunehmend durch das mächtigere CIFS (Common Internet File<br />
System) ersetzt. Dieses drückt sich auch im Mount-Kommando für die Client-Seite aus:<br />
mount.cifs //10.8.4.204/SharedFiles w<strong>in</strong> -o username=dirk b<strong>in</strong>det mit identischer<br />
Syntax e<strong>in</strong> W<strong>in</strong>dows-Share an e<strong>in</strong> L<strong>in</strong>uxverzeichnis. Bisher ist dieses jedoch nur ”root”<br />
vorbehalten o<strong>der</strong> man räumt auch hier mittels SUID-Bit Usern das Recht e<strong>in</strong>. Lei<strong>der</strong> fehlt<br />
dazu noch e<strong>in</strong> passendes Pendant zum Ausmounten. Das <strong>E<strong>in</strong></strong>trag <strong>in</strong> <strong>der</strong> Mount-Liste sieht<br />
e<strong>in</strong> wenig an<strong>der</strong>s aus:<br />
//10.8.4.204/SharedFiles on /home/dirk/SharedFiles type cifs (rw,mand,nosuid,nodev)<br />
<strong>E<strong>in</strong></strong> weiteres Tool ist smbclient. Es kann neben an<strong>der</strong>en Funktionen dem Nutzer e<strong>in</strong> FTPähnliches<br />
Interface zum Verb<strong>in</strong>den auf SMB-Dienste bieten.<br />
dirk@l<strong>in</strong>ux:~> smbclient -U dsuchod //dsuchod.files.uni-freiburg.de/w<strong>in</strong>dows<br />
Password:<br />
Doma<strong>in</strong>=[PUBLIC] OS=[<strong>Unix</strong>] Server=[Samba 3.0.9-2.3-SUSE]<br />
smb: \> ls<br />
. D 0 Mon Sep 26 18:02:51 2005<br />
.. D 0 Sat Sep 24 01:44:53 2005<br />
.AbiSuite D 0 Sat Jun 5 02:41:49 2004<br />
[ ... Haufen weitere versteckte Dateien mit Punkt am Anfang ... ]<br />
Bil<strong>der</strong> D 0 Thu Apr 21 13:32:38 2005<br />
Desktop D 0 Thu Jun 30 22:28:19 2005<br />
Eigene Bil<strong>der</strong> D 0 Tue Aug 16 11:35:58 2005<br />
Eigene Musik D 0 Wed Sep 8 17:27:06 2004<br />
GNUstep D 0 Thu Jan 8 12:46:33 2004
180 KAPITEL 12. SAMBA<br />
IM01OLYM D 0 Mon Nov 17 16:37:14 2003<br />
Mail D 0 Mon Sep 26 18:07:45 2005<br />
OpenOffice.org1.1 D 0 Wed Oct 20 09:44:31 2004<br />
PDFs D 0 Mon Jan 10 19:06:34 2005<br />
PostScripts D 0 Wed Mar 31 13:41:28 2004<br />
Slides D 0 Fri Sep 10 14:28:28 2004<br />
artikel D 0 Wed Dec 22 14:48:45 2004<br />
[ ... Haufen weitere Dateien und Verzeichnisse ... ]<br />
32784 blocks of size 262144. 8028 blocks available<br />
smb: \><br />
smb: \> put e<strong>in</strong>stieg.txt<br />
putt<strong>in</strong>g file e<strong>in</strong>stieg.txt as \e<strong>in</strong>stieg.txt (1488,4 kb/s) (average<br />
1488,5 kb/s)<br />
smb: \> get ToDo<br />
Dieses Beispiel benutzt e<strong>in</strong>en Standard-Fileserver auf Samba-Basis. <strong>E<strong>in</strong></strong>e Die Verb<strong>in</strong>dung<br />
zu e<strong>in</strong>er Freigabe erfolgt <strong>in</strong> <strong>der</strong> bekannten W<strong>in</strong>dows-Syntax: //Rechnername/Freigabe o<strong>der</strong><br />
//IP-Adresse/Freigabe, wobei e<strong>in</strong>fach die Backslashes <strong>in</strong> Slashes umgeän<strong>der</strong>t werden. Erstere<br />
haben <strong>in</strong> <strong>der</strong> Shell e<strong>in</strong>e beson<strong>der</strong>e Bedeutung. Wenn die Verb<strong>in</strong>dung unter e<strong>in</strong>er vorgegebenen<br />
UserID erfolgen soll, kann <strong>der</strong> Anwen<strong>der</strong> diese mit <strong>der</strong> Option -U mitteilen. Bei<br />
<strong>der</strong> Verb<strong>in</strong>dungsaufnahme fragt dann smbclient nach dem Passwort. <strong>E<strong>in</strong></strong>e Verb<strong>in</strong>dung auf<br />
e<strong>in</strong>e W<strong>in</strong>dows-Masch<strong>in</strong>e unterscheidet sich bis auf die Statuszeile nicht:<br />
dirk@l<strong>in</strong>ux02:~> smbclient -U dirk //10.20.90.60/SharedFiles<br />
Password:<br />
Doma<strong>in</strong>=[MYLAPTOP] OS=[W<strong>in</strong>dows 5.1] Server=[W<strong>in</strong>dows 2000 LAN Manager]<br />
smb: \> quit<br />
Nach erfolgter Verb<strong>in</strong>dung liefert das Kommanod ls Dateien und Verzeichnisse <strong>in</strong> <strong>der</strong> Freigabe.<br />
Der Verzeichniswechsel erfolgt wie gewohnt mit cd. Mit put lassen sich Dateien auf<br />
das ”Share” hochladen, mit get welche <strong>in</strong> das lokale Verzeichnis kopieren, von wo aus<br />
smbclient gestartet wurde. Am Ende verlässt man die Samba-Shell mit quit.<br />
12.2.2 L<strong>in</strong>ux-Server - W<strong>in</strong>dows-Client<br />
Dieser Fall ist <strong>der</strong> <strong>in</strong> <strong>der</strong> Realität sicherlich häufigere: Warum im Serverraum e<strong>in</strong>e Masch<strong>in</strong>e<br />
mit aufwändiger grafischer Benutzeroberfläche und nicht zu vernachlässigenden Lizenzkosten<br />
stellen, wenn es stabile und günstige Alternativen gibt? Die Serverfunktionalität stellen<br />
zwei H<strong>in</strong>tergrundsdienste, die Dämonen smbd und nmbd bereit. Letzterer kümmert sich<br />
dabei um den W<strong>in</strong>dows-Namensdienst (WINS) und muss nicht zw<strong>in</strong>gend laufen.<br />
Der Adm<strong>in</strong>istrator konfiguriert beide Dienste mit <strong>der</strong> geme<strong>in</strong>samen Datei smb.conf.<br />
Diese bef<strong>in</strong>det sich je nach Distribution üblicherweise im Unterverzeichnis /etc/samba. Für<br />
e<strong>in</strong>en ersten Test legt <strong>der</strong> Adm<strong>in</strong> e<strong>in</strong>e M<strong>in</strong>imalkonfiguration dieser Datei an o<strong>der</strong> än<strong>der</strong>t<br />
die Vorgabe <strong>der</strong> liefernden Distribution passend ab. Für erste Versuche soll das Verzeichnis<br />
vorher frisch angelegte Verzeichnis /w<strong>in</strong>-export benutzt werden. Auf dieses sollen die beiden<br />
Benutzer ”test1” und ”test2” nach <strong>E<strong>in</strong></strong>gabe ihres Passworts zugreifen können.<br />
[global]<br />
workgroup = SAMBA<br />
netbios name = MYSMB<br />
os level = 2<br />
unix extensions = Yes<br />
encrypt passwords = Yes<br />
map to guest = nobody<br />
socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY<br />
hosts allow = ALL
12.3. WEITERGEHENDE KONFIGURATION 181<br />
log level = 10<br />
[w<strong>in</strong>share]<br />
comment = Testfreigabe fuer W<strong>in</strong>dows-Clients<br />
path = /w<strong>in</strong>-export<br />
lock<strong>in</strong>g = No<br />
read only = Yes<br />
valid users = test1 test2<br />
create mask = 0600<br />
directory mask = 0750<br />
Nach aussen bietet sich die Freigabe mit dem Namen ”w<strong>in</strong>share” an. Dieser Name muss <strong>in</strong> ke<strong>in</strong>er<br />
Weise mit dem Verzeichnis, welches exportiert wird, übere<strong>in</strong>stimmen. Im Übrigen ist die Groß- o<strong>der</strong><br />
Kle<strong>in</strong>schreibung <strong>in</strong> <strong>der</strong> smb.conf mit Ausnahme <strong>der</strong> Pfadangaben unter L<strong>in</strong>ux irrelevant. Die beiden<br />
Benutzer ”test1” und ”test2” müssen lediglich als System-Accounts existieren. User benötigen für<br />
Samba nicht zw<strong>in</strong>gend L<strong>in</strong>ux-Log<strong>in</strong>rechte o<strong>der</strong> e<strong>in</strong>en <strong>E<strong>in</strong></strong>trag <strong>in</strong> <strong>der</strong> /etc/shadow. Da L<strong>in</strong>ux und<br />
W<strong>in</strong>dows verschiedene Verschlüsselungsverfahren für Passwörter benutzen, muss selbst bei Existenz<br />
e<strong>in</strong>es gültigen L<strong>in</strong>ux-Passworts e<strong>in</strong> neues W<strong>in</strong>dows-Passwort generiert werden. Dieses triggert <strong>der</strong><br />
Systemadm<strong>in</strong>istrator durch:<br />
l<strong>in</strong>ux:/w<strong>in</strong>-export # smbpasswd -L -a test1<br />
New SMB password:<br />
Retype new SMB password:<br />
Passwörter, die auf diese Weise generiert wurden, landen <strong>in</strong> <strong>der</strong> Datei /etc/samba/smbpasswd. Anschliessend<br />
steht <strong>der</strong> (Neu-)Start des Dienstes durch rcsmb restart o<strong>der</strong> /etc/rc.d/smb restart<br />
an.<br />
Anschliessend greift sich <strong>der</strong> Anwen<strong>der</strong> e<strong>in</strong>e W<strong>in</strong>dowsmasch<strong>in</strong>e, die mit dem gleichen <strong>Netzwerk</strong>,<br />
wie <strong>der</strong> frisch aufgesetzte L<strong>in</strong>ux-Samba-Server verbunden ist und versucht am besten erstmal durch<br />
<strong>E<strong>in</strong></strong>gabe <strong>der</strong> IP-Nummer die neue Freigabe unter W<strong>in</strong>dows e<strong>in</strong>zub<strong>in</strong>den.<br />
Wenn <strong>der</strong> Nutzer unter e<strong>in</strong>er an<strong>der</strong>en UserID an se<strong>in</strong>er W<strong>in</strong>dows-Masch<strong>in</strong>e angemeldet ist,<br />
kann er diesen bei W<strong>in</strong>dows-XP beim Anmelden an die Freigabe wechseln. Auch das Passwort<br />
muss nicht mit dem <strong>der</strong> W<strong>in</strong>dows-Anmeldung übere<strong>in</strong>stimmen. Soll <strong>der</strong> Samba-Server automatisch<br />
beim Start <strong>der</strong> L<strong>in</strong>uxmasch<strong>in</strong>e hochfahren, kann <strong>der</strong> SuSE-Adm<strong>in</strong> diesen Dienst durch <strong>in</strong>sserv<br />
smb,start=3,5; <strong>in</strong>sserv nmb,start=3,5 für die Runlevel 3 und 5 aktivieren. Alternativ können<br />
auch L<strong>in</strong>ks <strong>in</strong> den entsprechenden Runlevel-Unterverzeichnissen /etc/<strong>in</strong>it.d/rc3.d und /etc/<strong>in</strong>it.d/<br />
rc5.d angelegt werden.<br />
Der Sambaserver sollte dann auch im ”Microsoft W<strong>in</strong>dows-<strong>Netzwerk</strong>” auftauchen (Abb. xpsambatestnetz).<br />
Wenn <strong>der</strong> Anwen<strong>der</strong> dann auf ”Samba” klickt, sieht er <strong>in</strong> diesem Netz m<strong>in</strong>destens<br />
den Samba-Server ”Mysmb”. Im Kommentar steht die Versionsbezeichnung von Samba. Wenn da<br />
etwas an<strong>der</strong>es ersche<strong>in</strong>en soll, fügt <strong>der</strong> Adm<strong>in</strong>server str<strong>in</strong>g = Kommentar mit se<strong>in</strong>em Kommentar<br />
<strong>in</strong> <strong>der</strong> [global] Sektion e<strong>in</strong>.<br />
12.3 Weitergehende Konfiguration<br />
Im gezeigten ersten Beispiel bekamen die beiden Benutzer ”test1” und ”test2” e<strong>in</strong> Verzeichnis auf<br />
e<strong>in</strong>er L<strong>in</strong>ux-Masch<strong>in</strong>e nur lesend nach <strong>E<strong>in</strong></strong>gabe ihres Benutzernamens und Passwortes zur Verfügung<br />
gestellt. Soll e<strong>in</strong>e Anmeldung für diese Freigabe auch ohne Passwort möglich se<strong>in</strong>, kann <strong>der</strong> Adm<strong>in</strong><br />
das Schlüsselwort ”public = Yes” def<strong>in</strong>ieren. Dann sollte er jedoch die Option ”valid users” leero<strong>der</strong><br />
weglassen.<br />
Im Fall von Fehlern und zur Kontrolle des korrekten Starts des Samba-Servers sollte <strong>der</strong> Adm<strong>in</strong><br />
das Logfile des Dienstes kontrollieren. Standardmäßig wird dieses bei e<strong>in</strong>er SuSE-Distribution unterhalb<br />
von /var/log/samba angelegt. Das Logfile des smbd heisst e<strong>in</strong>fach log.smbd, das des nmbd<br />
entsprechend.<br />
[2004/11/10 16:09:36, 0] smbd/server.c:ma<strong>in</strong>(757)<br />
smbd version 3.0.4-SUSE started.<br />
Copyright Andrew Tridgell and the Samba Team 1992-2004
182 KAPITEL 12. SAMBA<br />
Abbildung 12.2: Durch die direkte <strong>E<strong>in</strong></strong>gabe <strong>der</strong> IP-Nummer umgeht <strong>der</strong> Anwen<strong>der</strong> eventuelle<br />
Probleme bei <strong>der</strong> W<strong>in</strong>dows-Namensauflösung<br />
[2004/11/10 16:09:36, 5] lib/debug.c:debug_dump_status(369)<br />
INFO: Current debug levels:<br />
all: True/10<br />
tdb: False/0<br />
pr<strong>in</strong>tdrivers: False/0<br />
lanman: False/0<br />
smb: False/0<br />
rpc_parse: False/0<br />
rpc_srv: False/0<br />
rpc_cli: False/0<br />
passdb: False/0<br />
sam: False/0<br />
auth: False/0<br />
w<strong>in</strong>b<strong>in</strong>d: False/0<br />
vfs: False/0<br />
idmap: False/0<br />
quota: False/0<br />
acls: False/0<br />
do<strong>in</strong>g parameter veto files = /*.eml/*.nws/riched20.dll/*.{*}/<br />
[2004/11/10 16:09:36, 2] param/loadparm.c:do_section(3396)<br />
Process<strong>in</strong>g section "[w<strong>in</strong>share]"<br />
do<strong>in</strong>g parameter comment = Testfreigabe fuer W<strong>in</strong>dows-Clients<br />
do<strong>in</strong>g parameter path = /w<strong>in</strong>-export<br />
do<strong>in</strong>g parameter lock<strong>in</strong>g = No<br />
do<strong>in</strong>g parameter read only = Yes
12.3. WEITERGEHENDE KONFIGURATION 183<br />
do<strong>in</strong>g parameter valid users = test1 test2<br />
do<strong>in</strong>g parameter create mask = 0600<br />
do<strong>in</strong>g parameter directory mask = 0750<br />
[2004/11/10 16:09:36, 4] param/loadparm.c:lp_load(3913)<br />
pm_process() returned Yes<br />
[2004/11/10 16:09:36, 7] param/loadparm.c:lp_servicenumber(4026)<br />
lp_servicenumber: couldn’t f<strong>in</strong>d homes<br />
[2004/11/10 16:09:36, 3] param/loadparm.c:lp_add_ipc(2363)<br />
add<strong>in</strong>g IPC service<br />
[2004/11/10 16:09:36, 3] param/loadparm.c:lp_add_ipc(2363)<br />
add<strong>in</strong>g IPC service<br />
[ ... ]<br />
Mit dem im Beispiel e<strong>in</strong>gestellten Loglevel von 10 ist <strong>der</strong> Dienst ziemlich geschwätzig. Das<br />
macht bei funktionierendem Normalbetrieb weniger S<strong>in</strong>n. Je nach Sicherheits- und Informationsbedürfnis<br />
genügt e<strong>in</strong> Loglevel von 0 bis 3 für die wichtigsten Ereignisse. Meldungen<br />
über Fehler <strong>in</strong> <strong>der</strong> Konfigurationsdatei landen <strong>in</strong> jedem Fall hier.<br />
<strong>E<strong>in</strong></strong>e weitere Möglichkeit <strong>der</strong> Überprüfung des Server-Zustandes bietet das Kommando<br />
smbstatus. <strong>E<strong>in</strong></strong>fach aufgerufen liefert es e<strong>in</strong>e Liste <strong>der</strong> aktuell gültigen Verb<strong>in</strong>dungen:<br />
l<strong>in</strong>ux:~ # smbstatus<br />
Samba version 3.0.9-SUSE<br />
PID Username Group Mach<strong>in</strong>e<br />
-------------------------------------------------------------------<br />
30208 test2 testgroup zxs (10.8.4.160)<br />
Service pid mach<strong>in</strong>e Connected at<br />
------------------------------------------------------w<strong>in</strong>share<br />
30208 zxs Wed Sep 21 18:33:58 2004<br />
No locked files<br />
12.3.1 Homeverzeichnisse für W<strong>in</strong>dows und L<strong>in</strong>ux<br />
Sollen Benutzer e<strong>in</strong> geme<strong>in</strong>sames Homeverzeichnis unter L<strong>in</strong>ux und W<strong>in</strong>dows benutzen, erlaubt<br />
dieses die spezielle Sektion [homes] <strong>in</strong> <strong>der</strong> Konfigurationsdatei /etc/samba/smb.conf:<br />
[homes]<br />
comment = Home Directories<br />
valid users = %S<br />
browseable = Yes<br />
read only = No<br />
create mask = 0640<br />
directory mask = 0750<br />
Möchte man e<strong>in</strong>er Benutzergruppe das geme<strong>in</strong>same Zugriffsrecht auf e<strong>in</strong>e Freigabe e<strong>in</strong>räumen,<br />
muss diese vorher <strong>in</strong> /etc/group def<strong>in</strong>iert se<strong>in</strong>.<br />
[gruppenfreigabe]<br />
comment = Beispiel e<strong>in</strong>er Gruppenfreigabe<br />
read only = No<br />
browseable = No<br />
valid users = @testgroup<br />
force group = testgroup<br />
path = /gruppenfreigabe<br />
create mask = 0770<br />
force create mode = 0770<br />
directory mask = 0770<br />
force directory mode = 0770
184 KAPITEL 12. SAMBA<br />
In diesem Beispiel dürfen alle Mitglie<strong>der</strong> <strong>der</strong> Gruppe ”testgroup” sich mit dem Share verb<strong>in</strong>den.<br />
Alle Dateien und Verzeichnisse werden so angelegt, dass nur Gruppenmitglie<strong>der</strong> sie<br />
än<strong>der</strong>n dürfen. Die Maske 0770 erzw<strong>in</strong>gt Gruppenschreibrechte und verh<strong>in</strong><strong>der</strong>t gleichzeitig,<br />
dass Dateien nur vom Erzeuger selbst geän<strong>der</strong>t werden dürfen. Die Option browseable =<br />
No sorgt dafür, dass die Freigabe nicht <strong>in</strong> <strong>der</strong> <strong>Netzwerk</strong>umgebung auftaucht.<br />
12.3.2 Druckerfreigaben<br />
Bis zu diesem Punkt wurden verschiedene Arten <strong>der</strong> Verzeichnisfreigaben diskutiert. Das<br />
SMB-Protokoll erlaubt es aber auch, Drucker im Netz geme<strong>in</strong>sam zu benutzen. Hierzu gibt<br />
es die Sektion [pr<strong>in</strong>ters] <strong>in</strong> <strong>der</strong> /etc/samba/smb.conf.<br />
[pr<strong>in</strong>ters]<br />
comment = All Pr<strong>in</strong>ters<br />
path = /var/tmp<br />
pr<strong>in</strong>table = Yes<br />
create mask = 0600<br />
browseable = No<br />
writable = yes<br />
public = yes<br />
Viele <strong>der</strong> Optionen s<strong>in</strong>d nun schon von den an<strong>der</strong>en Beispielen bekannt. Die Pfadangabe<br />
dient nun nicht als Freigabe, son<strong>der</strong>n als Spoolverzeichnis. In diesem landen die abzuarbeitenden<br />
Jobs <strong>der</strong> berechtigten Benutzer. In den Globale<strong>in</strong>stellungen <strong>der</strong> smb.conf s<strong>in</strong>d zwei<br />
weitere Variablen zu def<strong>in</strong>ieren. Der Adm<strong>in</strong> legt fest, welches Drucksystem Verwendung<br />
f<strong>in</strong>det. Auf mo<strong>der</strong>nen Distributionen greift er üblicherweise auf das Common <strong>Unix</strong> Pr<strong>in</strong>ter<br />
System (CUPS) zurück:<br />
pr<strong>in</strong>t<strong>in</strong>g = CUPS<br />
pr<strong>in</strong>tcap name = CUPS<br />
Der Dienst CUPS muss vor Samba gestartet werden. Dieses überprüft <strong>in</strong>sserv beim Anlegen<br />
<strong>der</strong> Runlevel-L<strong>in</strong>ks. Die Installation von Druckern unter L<strong>in</strong>ux erledigt <strong>der</strong> Adm<strong>in</strong> am<br />
e<strong>in</strong>fachsten mit den mitgelieferten Konfigurationswerkzeugen, beispielsweise YaST2 von<br />
SuSE. Nach e<strong>in</strong>em Neustart von Samba stehen die frisch def<strong>in</strong>ierten Druckerwarteschlangen<br />
auch W<strong>in</strong>dows-Clients zur Verfügung.<br />
12.3.3 Nachrichtendienst auf L<strong>in</strong>ux-Clients<br />
Der W<strong>in</strong>dows-Nachrichtendienst ist bei Anwen<strong>der</strong>n, die mit ihrer W<strong>in</strong>dows-Masch<strong>in</strong>e direkt<br />
<strong>in</strong>s Internet gehen vielleicht etwas <strong>in</strong> Verruf geraten. Vielfach meldeten sich unaufgefor<strong>der</strong>t<br />
explizite Damen, um ihre Services irgendwo im Netz anzubieten. Im abgeschlossenen<br />
privaten Netz kann <strong>der</strong> Dienst jedoch ganz nützlich se<strong>in</strong>. Damit auch e<strong>in</strong> L<strong>in</strong>ux-<br />
Client W<strong>in</strong>dows-Nachrichten empfangen kann, muss e<strong>in</strong> Samba laufen. Dieses wurde <strong>in</strong><br />
<strong>der</strong> [global]-Sektion um den <strong>E<strong>in</strong></strong>trag message command = sh -c ‘/opt/kde3/b<strong>in</strong>/kpopup<br />
’’%s’’ ’’%f’’‘ erweitert. Das Programm kpopup ist meistens e<strong>in</strong> eigenes Paket, welches<br />
unter Umständen nach<strong>in</strong>stalliert werden muss. Je nach Distribution können Pfad und<br />
Paketname variieren.<br />
12.4 Die zentrale Samba-Konfigurationsdatei<br />
In den bisherigen Abschnitten kamen schon Beispiele für mögliche Varianten <strong>der</strong> smb.conf<br />
vor. Da es e<strong>in</strong>e ziemlich große Zahl an Konfigurationsparametern, sollen die wichtigsten<br />
hier zusammengestellt werden. <strong>E<strong>in</strong></strong>e gute Hilfe ist auch die Manpage (man smb.conf).
12.4. DIE ZENTRALE SAMBA-KONFIGURATIONSDATEI 185<br />
12.4.1 Struktur<br />
Die Datei smb.conf wird durch Konfigurationsblöcke strukturiert. Der Block [global] - er<br />
steht am besten immer am Anfang <strong>der</strong> Datei - ist immer vorhanden und def<strong>in</strong>iert generelle<br />
Servere<strong>in</strong>stellungen. Daneben existiert e<strong>in</strong>e weitere Gruppe von optionalen Blöcken,<br />
<strong>der</strong>en Namen fest vorgegeben s<strong>in</strong>d. Der Block [homes] def<strong>in</strong>iert die Freigabe <strong>der</strong> Homeverzeichnisse<br />
<strong>der</strong> auf e<strong>in</strong>em L<strong>in</strong>uxsystem e<strong>in</strong>getragenen Benutzer. So können Adm<strong>in</strong>s dafür<br />
sorgen, dass ihre Nutzer sowohl unter L<strong>in</strong>ux als auch unter W<strong>in</strong>dows auf das selbe Homeverzeichnis<br />
zugreifen können. Mit [pr<strong>in</strong>ters] erfolgt die Freigabe <strong>der</strong> auf e<strong>in</strong>em L<strong>in</strong>uxrechner<br />
verfügbaren Drucker. [pr<strong>in</strong>t$] ist e<strong>in</strong>e spezielle Freigabe, die es Adm<strong>in</strong>istratoren erlaubt,<br />
Druckertreiber bereit zu stellen. So müssen diese dann nicht mittels CD e<strong>in</strong>gespielt werden,<br />
wenn e<strong>in</strong> W<strong>in</strong>dows-Client auf e<strong>in</strong>en L<strong>in</strong>uxdrucker zugreift für den dieser noch ke<strong>in</strong>en<br />
Treiber <strong>in</strong>stalliert hat. Die Sektion [netlogon] spielt dann e<strong>in</strong>e Rolle, wenn Samba über<br />
Datei- und Druckerfreigaben h<strong>in</strong>aus reichende Aufgaben übernehmen soll. Zusätzlich kann<br />
e<strong>in</strong> Samba-Adm<strong>in</strong>istrator weitere Blöcke def<strong>in</strong>ieren. Die Namen dieser Blöcke entsprechen<br />
den Freigabenamen, die e<strong>in</strong> W<strong>in</strong>dows-Client sieht o<strong>der</strong> anspricht.<br />
Die Zuweisung von Inhalten an e<strong>in</strong>e Konfiguration erfolgt mittels simplem ”=” - l<strong>in</strong>ks<br />
steht <strong>der</strong> Variablenname und rechts die Zuweisung. Zuweisungen von mehr als e<strong>in</strong>em Wert<br />
s<strong>in</strong>d durch e<strong>in</strong>fache Abstände vone<strong>in</strong>an<strong>der</strong> getrennt.<br />
12.4.2 Wichtige Optionen <strong>in</strong> <strong>der</strong> Sektion [global]<br />
• workgroup = SAMBA - ordnet den L<strong>in</strong>ux-Samba-Server <strong>in</strong> die W<strong>in</strong>dows-Arbeitsgruppe<br />
o<strong>der</strong> Doma<strong>in</strong> ”SAMBA” e<strong>in</strong>. Diese Masch<strong>in</strong>e ersche<strong>in</strong>t sodann <strong>in</strong> <strong>der</strong> W<strong>in</strong>dows-<strong>Netzwerk</strong>umgebung<br />
<strong>in</strong> e<strong>in</strong>em Unterordner mit diesem Namen.<br />
• netbios name = MYSMB - legt fest, dass die Masch<strong>in</strong>e unter dem W<strong>in</strong>dows-Namen<br />
”MYSMB” <strong>in</strong> <strong>der</strong> <strong>Netzwerk</strong>umgebung auftaucht und angesprochen werden kann. Dieser<br />
Name muss nicht identisch zum FQDN des TCP/IP Doma<strong>in</strong> Name System se<strong>in</strong>.<br />
Soll Samba e<strong>in</strong>fach den L<strong>in</strong>ux-Rechnernamen benutzen, kann dieser <strong>E<strong>in</strong></strong>trag entfallen.<br />
• os level = 64 - bestimmt darüber mit welchem Wert sich Samba für Browse-Wahlen<br />
anbietet. Das entscheidet beispielsweise über die Chance e<strong>in</strong> lokaler Masterbrowser<br />
e<strong>in</strong>er Arbeitsgruppe zu werden.<br />
• unix extensions = Yes - dieser Parameter stellt e<strong>in</strong>, ob Samba die CIFS Extensions<br />
für <strong>Unix</strong> unterstützt. Damit stehen dann Symbolische L<strong>in</strong>ks, Hard L<strong>in</strong>ks, ... zur<br />
Verfügung. Nur <strong>in</strong>teressant für <strong>Unix</strong>-Clients.<br />
• encrypt passwords = Yes - neuere W<strong>in</strong>dows-Clients erwarten verschlüsselte Passwörter.<br />
Deshalb kann nicht die klassische <strong>Unix</strong>-Shadow zum <strong>E<strong>in</strong></strong>satz kommen. Damit<br />
Samba korrekt authentifizieren kann, hat es entwe<strong>der</strong> Zugriff auf e<strong>in</strong>e lokale smbpasswd<br />
Datei o<strong>der</strong> kann gegen e<strong>in</strong>en entsprechenden Dienst authentifizieren.<br />
• log file = /var/log/log.%m - überschreibt die e<strong>in</strong>kompilierte Default-Position des<br />
Logfiles. %m wird durch den Dienst nmbd o<strong>der</strong> smbd ersetzt, welcher Log-Informationen<br />
generiert.<br />
• log level = 10 - steigende Werte generieren umfangreichere Logfiles. Es können<br />
e<strong>in</strong>zelnen Komponenten unterschiedliche Loglevel zugeordnet werden: log level =<br />
3 passdb:4 auth:8 w<strong>in</strong>b<strong>in</strong>d:3.
186 KAPITEL 12. SAMBA<br />
• b<strong>in</strong>d <strong>in</strong>terfaces only = Yes - def<strong>in</strong>iert, auf welchen <strong>Netzwerk</strong>schnittstellen <strong>der</strong><br />
Samba-Server se<strong>in</strong>e Dienste anbietet. Diese Option arbeitet mit <strong>der</strong> folgenden eng<br />
zusammen.<br />
• <strong>in</strong>terfaces = 127.0.0.1 10.8.4.254/24 - legt fest, dass sowohl das Loopback-<br />
Interface und das Interface mit <strong>der</strong> IP 10.8.4.254 bedient werden. Letzeres umfasst<br />
e<strong>in</strong> <strong>Netzwerk</strong> von 256 Masch<strong>in</strong>en (Netzmaske 255.255.255.0).<br />
• hosts allow = All - legt ke<strong>in</strong>e Beschränkungen auf bestimmte Masch<strong>in</strong>en fest. Hier<br />
könnte sonst auch e<strong>in</strong>e leerzeichengetrennte Liste von IP-Nummern stehen, die auf<br />
den Service zugreifen dürfen.<br />
• message command = /b<strong>in</strong>/bash -c ‘/usr/X11R6/b<strong>in</strong>/xterm -T ’’W<strong>in</strong>Popup<br />
Message’’ -e /usr/b<strong>in</strong>/vim %s; rm %s’ & - erlaubt es unter L<strong>in</strong>ux ebenfalls<br />
W<strong>in</strong>dows-Popup-Messages zu empfangen. Die Nachrichten reicht Samba an e<strong>in</strong> externes<br />
Programm - hier e<strong>in</strong> e<strong>in</strong>faches xterm mit vi weiter. %s enthält den Inhalt <strong>der</strong><br />
Nachricht, %t ist <strong>der</strong> Zielname, an den die Nachricht g<strong>in</strong>g. %f bezeichnet den Client,<br />
von dem die Nachricht kam.<br />
12.4.3 Wichtige Optionen <strong>der</strong> an<strong>der</strong>en Abschnitte<br />
• comment = All Pr<strong>in</strong>ters o<strong>der</strong> comment = Geme<strong>in</strong>same Daten - setzen e<strong>in</strong> Kommentar<br />
für e<strong>in</strong>e Freigabe fest, die an die Clients übermittelt wird.<br />
• path = /w<strong>in</strong>-export - legt für Dateifreigaben fest, welches Verzeichnis im L<strong>in</strong>ux-<br />
Dateibaum Samba bereitstellen soll. Für Drucker def<strong>in</strong>iert diese Variable das Spoolverzeichnis.<br />
• create mask = 0600 - def<strong>in</strong>iert das Rechtemuster beim Anlegen von Dateien. Hierzu<br />
werden die Permissions vom Mapp<strong>in</strong>g von DOS o<strong>der</strong> L<strong>in</strong>ux bestimmt und diese dann<br />
mit dem Muster UND-verknüpft. Das Muster entspricht dem von chmod bekannten.<br />
• force create mask = 0600 - erzw<strong>in</strong>gt das Setzen e<strong>in</strong>es bestimmten Bitmusters für<br />
die Zugriffsrechte. Im Bespiel würde e<strong>in</strong>e Datei auf jeden Fall die Rechte -rw-----bekommen.<br />
• directory mask = 0750 - stellt das Analogon zu ”create mask” dar. Es legt fest mit<br />
welchem Rechtemuster Samba neu angelegte Verzeichnisse versieht. Auch hier gibt es<br />
die Option ”force directory mask”.<br />
• valid users = test1 test2 - nimmt e<strong>in</strong>e Leerzeichenseparierte Liste von Benutzern<br />
auf, die auf diesen Dienst verb<strong>in</strong>den dürfen. In <strong>der</strong> Sektion [homes] f<strong>in</strong>det man<br />
hier valid users = %S. %S wird durch den Namen des sich anmeldenden Nutzers<br />
automatisch ersetzt. Deshalb muss nicht für jeden <strong>der</strong> vielleicht viele hun<strong>der</strong>t o<strong>der</strong><br />
tausend Benutzer umfassenden Masch<strong>in</strong>e e<strong>in</strong>e eigene Freigabe def<strong>in</strong>iert werden.<br />
• browseable = No - kontrolliert, ob die Freigabe <strong>in</strong> e<strong>in</strong>er Browse-Liste <strong>der</strong> <strong>Netzwerk</strong>umgebung<br />
angezeigt wird o<strong>der</strong> nicht.<br />
• read only = No o<strong>der</strong>writable = Yes - erlaubt dem Benutzer e<strong>in</strong>es Services Dateien<br />
o<strong>der</strong> Verzeichnisse anzulegen und zu verän<strong>der</strong>n.<br />
• pr<strong>in</strong>table = Yes - erlaubt dem Client auf das Drucker-Spooler-Verzeichnis zu schreiben.
12.5. CONTROLLER-FUNKTIONALITÄT 187<br />
• public = Yes alternativ guest ok = Yes - legen fest, ob e<strong>in</strong>e Verb<strong>in</strong>dung ohne Passwort<br />
möglich ist. Die Rechte s<strong>in</strong>d dann die des Gast-Accounts.<br />
12.4.4 Virtuelle Samba-Server<br />
Der Apache-Webserver macht es seit e<strong>in</strong>iger Zeit vor: <strong>E<strong>in</strong></strong> Server sollte <strong>in</strong> <strong>der</strong> Lage se<strong>in</strong>, mehr<br />
als e<strong>in</strong>e Identität gleichzeitig anzunehmen. Auch das SMB-Protokoll kann namensbasierte<br />
virtuelle Server anzubieten. Dabei bef<strong>in</strong>den sich alle <strong>in</strong> <strong>der</strong> gleichen Arbeitsgruppe. S<strong>in</strong>n und<br />
Zweck dieser Übung - e<strong>in</strong>e Masch<strong>in</strong>e ist unter mehreren Namen <strong>in</strong> <strong>der</strong> <strong>Netzwerk</strong>umgebung<br />
sichtbar. Der Adm<strong>in</strong> konfiguriert dieses Verhalten durch die Option netbios aliases =<br />
VIRTUAL01 VIRTUAL02 VIRTUAL03.<br />
<strong>E<strong>in</strong></strong> solcher <strong>E<strong>in</strong></strong>trag steht <strong>in</strong> <strong>der</strong> smb.conf <strong>in</strong> <strong>der</strong> Sektion [global]. Die Anzahl <strong>der</strong> Aliases<br />
(hier drei) schreibt Samba nicht vor. Kommt die Option ”netbios aliases” zum <strong>E<strong>in</strong></strong>satz,<br />
muss auch <strong>der</strong> ”netbios name” e<strong>in</strong>gestellt se<strong>in</strong>. Das ist jetzt noch nicht beson<strong>der</strong>s<br />
spannend: Schaut man sich nun <strong>in</strong> <strong>der</strong> <strong>Netzwerk</strong>umgebung auf dem Client die Freigaben<br />
von VIRTUAL01, so unterscheiden diese sich nicht von den an<strong>der</strong>en. Will man e<strong>in</strong>em<br />
virtuellen Server nun e<strong>in</strong>e angepasste <strong>E<strong>in</strong></strong>stellung verpassen, braucht man e<strong>in</strong>e separate<br />
smb.conf für diesen. Der Name <strong>der</strong> Datei lautet am besten auf smb.conf + Servername =<br />
smb.conf.virtual01. Hier<strong>in</strong> können nun wie<strong>der</strong> beliebige Freigaben e<strong>in</strong>gestellt werden. Damit<br />
Samba weitere Konfigurationsdateien beim Start berücksichtigt, fügt man e<strong>in</strong> <strong>in</strong>clude Statement<br />
e<strong>in</strong>:<strong>in</strong>clude = /etc/samba/smb.conf.%L". %L setzt den Servernamen e<strong>in</strong>, <strong>der</strong> beim<br />
NetBIOS-Verb<strong>in</strong>dungsaufbau angefor<strong>der</strong> wurde. Beim Aufsetzen <strong>der</strong> verschiedenen Dateien<br />
ist zu beachten, dass alle Freigaben <strong>der</strong> Hauptdatei auch für alle virtuellen Server gelten.<br />
12.5 Controller-Funktionalität<br />
Die bisher vorgestellten Beispiele demonstrierten nur e<strong>in</strong>en Teil <strong>der</strong> Sambafähigkeiten. Solche<br />
Konfigurationen s<strong>in</strong>d eher <strong>in</strong> sehr kle<strong>in</strong>en und kle<strong>in</strong>en <strong>Netzwerk</strong>en mit wenigen Rechnern<br />
und Nutzern s<strong>in</strong>nvoll. In vielen Fällen kann es für Adm<strong>in</strong>istratoren attraktiv se<strong>in</strong>, den<br />
Samba-Server auch zur Namensauflösung als WINS-Server o<strong>der</strong> als Ersatz e<strong>in</strong>es Primary<br />
Doma<strong>in</strong> Controllers zu verwenden. Dann möchte er jedoch häufig auch Ziele, wie S<strong>in</strong>gle-<br />
Sign-On verwirklichen. Hierzu läßt sich Samba mit dem Directory-Dienst LDAP verb<strong>in</strong>den.<br />
Die notwendigen Konfigurationen s<strong>in</strong>d dann jedoch deutlich komplexer.<br />
12.5.1 Der W<strong>in</strong>dows Namensdienst<br />
Viele werden sich fragen, wozu e<strong>in</strong> weiterer Namensdienst, wo es doch schon das Doma<strong>in</strong><br />
Name System (DNS) gibt. DNS ist fest mit TCP/IP verknüpft - SMB jedoch nicht, auch<br />
wenn es heute kaum noch jemand an<strong>der</strong>s als zusammen mit diesem e<strong>in</strong>setzt. Viele kennen<br />
das Problem: Den Namen e<strong>in</strong>er Person können sich viele noch merken, mit den dazugehörigen<br />
Telefonnummern wird es schwieriger. Dann zieht diese Person um und die Nummer<br />
än<strong>der</strong>t sich. Hier möchte man e<strong>in</strong> Telefonbuch haben, welches Namen Nummern zuordnen<br />
kann. Diese Aufgabe übernimmt <strong>der</strong> W<strong>in</strong>dows Internet Name Service. Dieser unterscheidet<br />
sich signifikant vom klassischen DNS. So könnte man ja mal versuchen e<strong>in</strong>er W<strong>in</strong>dows-<br />
Masch<strong>in</strong>e per DHCP e<strong>in</strong>en Hostnamen zuzuweisen, was unter L<strong>in</strong>ux/<strong>Unix</strong> ke<strong>in</strong> Problem<br />
darstellt. Auch habt man sicherlich schnell festgestellt, dass Microsoft unter dem Konzept<br />
e<strong>in</strong> W<strong>in</strong>dows-Domäne etwas ganz an<strong>der</strong>es sieht als e<strong>in</strong> Doma<strong>in</strong>-Name, wie <strong>in</strong> Web-Adressen.<br />
Der NetBIOS-Name-Service wird <strong>in</strong> den RFCs 1001 und 1002 beschrieben. Er bietet<br />
Clients e<strong>in</strong>e vergleichbare Art von Dienst wie DNS. Es bestehen jedoch e<strong>in</strong>ige wesentliche<br />
Hauptunterschiede. NetBIOS-Namen existieren <strong>in</strong> e<strong>in</strong>em flachen Namensbereich.
188 KAPITEL 12. SAMBA<br />
Das ist beim DNS völlig an<strong>der</strong>s. Ke<strong>in</strong>er h<strong>in</strong><strong>der</strong>t e<strong>in</strong>en daran, e<strong>in</strong>en Rechner <strong>in</strong> <strong>der</strong> Subdoma<strong>in</strong><br />
pool01.lehrpools.rechenzentrum.uni-freiburg.de mit dem Namen dozenten-rechnervorne-l<strong>in</strong>ks<br />
zu betreiben. Die Namenskomponenten zwischen den Punkten dürfen 63 und<br />
<strong>der</strong> Gesamtname nicht 255 Zeichen überschreiten. Damit lassen sich e<strong>in</strong>ige Hierarchiestufen<br />
erreichen.<br />
Unter W<strong>in</strong>dowsXP gibt es zwei Möglichkeiten e<strong>in</strong>en WINS-Server e<strong>in</strong>zutragen. Zum<br />
e<strong>in</strong>en kann <strong>der</strong> Adm<strong>in</strong> des Netzes diese Information mittels DHCP an alle Clients verteilten:<br />
Abfragen lässt sich diese Information beispielsweise mit ipconfig -all <strong>in</strong> <strong>der</strong> ”<strong>E<strong>in</strong></strong>gabeauffor<strong>der</strong>ung”.<br />
Alternativ kann man die IP für WINS auch fest bei <strong>der</strong> Alternativen<br />
Konfiguration von TCP/IP e<strong>in</strong>tragen.<br />
Abbildung 12.3: Zwei Wege <strong>der</strong> Zuweisung <strong>der</strong> WINS-Server-Adresse<br />
12.5.2 NetBIOS Namen<br />
NetBIOS-Namen bestehen aus 16 alphanumerischen Zeichen, wobei a bis z, A bis Z und<br />
0 bis 9 erlaubt s<strong>in</strong>d. Zusätzlich dürfen die Son<strong>der</strong>zeichen !@#$% ˆ &()-’{}. vorkommen.<br />
Die ersten 15 Zeichen dienen <strong>der</strong> Benennung, das sechzehnte Zeichen ist e<strong>in</strong>e Zahl von<br />
0x00 bis 0xFF hexadezimal, die den Ressourcentyp des Namens bestimmt. Es gibt zwei<br />
Namenstypen: Entwe<strong>der</strong> sie s<strong>in</strong>d exklusiv e<strong>in</strong>em Benutzer o<strong>der</strong> e<strong>in</strong>er Masch<strong>in</strong>e zugeordnet<br />
o<strong>der</strong> sie s<strong>in</strong>d Gruppennamen. Letztere können geme<strong>in</strong>sam benutzt werden. Der NetBIOS-
12.5. CONTROLLER-FUNKTIONALITÄT 189<br />
ID Bedeutung<br />
< 00 > NetBIOS Name e<strong>in</strong>es Rechners (Freigabename e<strong>in</strong>er Workstation)<br />
< 03 > Messenger Service Name - verwendet zum Empfangen und Übertragen<br />
von Nachrichten, sowohl für User- als auch Rechnernamen<br />
< 06 > Rout<strong>in</strong>g und Remote Access Service (RAS) - Name des Servers<br />
< 1B > Doma<strong>in</strong> Masterbrowser Name - wird von Masch<strong>in</strong>en im Netz genutzt,<br />
um den Primary Doma<strong>in</strong> Controller (PDC) e<strong>in</strong>er W<strong>in</strong>dows-Doma<strong>in</strong> zu<br />
kontaktieren<br />
< 1F > Network Dynamic Data Exchange (NetDDE) Dienst<br />
< 20 > Server-Dienstname - Zugriffspunkte für freigegebene Dateien und Verzeichnisse<br />
< 21 > RAS-Client<br />
< BE > Network Monitor Agent<br />
< BF > Network Monitor Utility<br />
Tabelle 12.1: <strong>E<strong>in</strong></strong>deutige Namen<br />
Name MYSMB< 00 > aus dem Beispiel des vorangegangenen Abschnitts ist e<strong>in</strong> e<strong>in</strong>deutiger<br />
Name. Er beschreibt den Computer ”MYSMB”. Die Bezeichnung SAMBA-TESTNETZ<<br />
1e > h<strong>in</strong>gegen ist e<strong>in</strong> Gruppenname. Ihn benutzen Brows<strong>in</strong>g-Clients, um e<strong>in</strong>en Master-<br />
Browser unter sich zu bestimmen.<br />
NetBIOS-Namen spannen nur e<strong>in</strong>en flachen Namensbereich auf. Trotzdem s<strong>in</strong>d <strong>in</strong> e<strong>in</strong>m<br />
gleichen logischen Subnetz mehrere Namensbereiche erlaubt. Diese werden durch den<br />
NetBIOS-Scope unterschieden. Der NetBIOS-Scope ist e<strong>in</strong> Str<strong>in</strong>g, <strong>der</strong> zusammen mit dem<br />
NetBIOS-Namen 256 Zeichen nicht überschreiten darf.<br />
ID Bedeutung<br />
< 1D > Masterbrowser-Name - wird vom Client benutzt, um auf den Masterbrowser<br />
zuzugreifen (je nach Netz lokaler Masterbrowser)<br />
< 1E > Gruppenname - kommt bei <strong>der</strong> Wahl von Browse-Mastern zum <strong>E<strong>in</strong></strong>satz<br />
Tabelle 12.2: Gruppenressourcen<br />
Die Namensvergabe im NetBIOS geht an<strong>der</strong>s als bei DNS vom Client aus: <strong>E<strong>in</strong></strong>e Masch<strong>in</strong>e<br />
versucht beim Start e<strong>in</strong>en Namen zu registrieren. Dieses ist erfolgreich, wenn <strong>der</strong><br />
Client-Rechner e<strong>in</strong> erfolgreiches Namensangebot gemacht und vom Server den Namen für<br />
sich erhalten hat. Versucht e<strong>in</strong>e Masch<strong>in</strong>e A e<strong>in</strong>en im Scope schon vergebenen Namen zu<br />
registrieren, antwortet <strong>der</strong> Besitzer mit dem H<strong>in</strong>weis, dass er den Namen behält. Dieses<br />
Verfahren ist e<strong>in</strong>e Methode <strong>in</strong>aktive Hosts zu entdecken, die den Besitz e<strong>in</strong>es Namens nicht<br />
offiziell aufgegeben haben.<br />
ID Bedeutung<br />
< 00 > Zum Empfang von Browser-Broadcasts<br />
< 1C > Arbeitsgruppenname - wird vom Doma<strong>in</strong> Controller registriert und<br />
enthält e<strong>in</strong>e Liste von Computern, die sich unter dieser Gruppe registriert<br />
haben Internet Gruppe<br />
< 1E > Gleiche Bedeutung, wie bei Gruppenressourcen<br />
< 20 > Identifikation e<strong>in</strong>e Gruppe von Rechnern für adm<strong>in</strong>istrative Zwecke<br />
Tabelle 12.3: Domänennamen
190 KAPITEL 12. SAMBA<br />
NetBIOS kennt zwei Methoden für die Registrierung und Auflösung von Namen: Broadcast<br />
und Po<strong>in</strong>t-to-Po<strong>in</strong>t. Die Po<strong>in</strong>t-to-Po<strong>in</strong>t-Registrierung und -Auflösung geschieht mittels<br />
e<strong>in</strong>es eigenen Dienstes - NetBIOS-Nameserver (NBNS).<br />
Broadcast-Registrierung o<strong>der</strong> -Auflösung heißt, dass die Anfrage an alle Hosts im gleichen<br />
logischen Subnetz mit dem gleichen Scope gesendet wird. Router können diese Broadcasts<br />
weitergeben. Das ist <strong>in</strong> <strong>der</strong> Regel <strong>in</strong> größeren Netzen mit vielen W<strong>in</strong>dwosmasch<strong>in</strong>en<br />
nicht sehr clever, da sehr viel Datenverkehr generiert wird. Diese Methode kam implizit <strong>in</strong><br />
den Konfigurationsbeispielen <strong>der</strong> vorangegangenen Abschnitte zum <strong>E<strong>in</strong></strong>satz.<br />
12.5.3 Der Nameserver (WINS)<br />
<strong>E<strong>in</strong></strong> WINS macht nicht nur zur Reduzierung <strong>der</strong> Menge des Broadcast-Datenverkehrs S<strong>in</strong>n,<br />
die durch e<strong>in</strong>e große Anzahl von NetBIOS-Clients erzeugt werden kann. <strong>E<strong>in</strong></strong> weiteres Problem<br />
<strong>in</strong> NetBIOS-Netzen ist die übliche Beschränkung <strong>der</strong> Broadcasts auf e<strong>in</strong> logisches<br />
Subnetz. Das führt dazu, dass Rechner <strong>in</strong> verschiedenen Subnetzen nicht über die Namen<br />
mite<strong>in</strong>an<strong>der</strong> kommunizieren können. WINS löst beide Probleme. Die Aufgabe e<strong>in</strong>es WINS<br />
übernimmt im Samba-Paket <strong>der</strong> nmbd.<br />
Die Aktivierung erfolgt durch die Option w<strong>in</strong>s support = Yes. Ist bereits e<strong>in</strong> solcher<br />
Dienst im Subnetz vorhanden, steht <strong>in</strong> ”w<strong>in</strong>s server” die IP des entsprechenden Rechners.<br />
”w<strong>in</strong>s support” sollte dann auf ”No” gesetzt se<strong>in</strong>. Da die Namensvergabe durch die Clients<br />
<strong>in</strong>itiiert wird, s<strong>in</strong>d ke<strong>in</strong>e wesentlichen <strong>E<strong>in</strong></strong>stellungen neben ”workgroup” und eventuell<br />
”netbios name” <strong>in</strong> <strong>der</strong> smb.conf notwendig.<br />
Samba erlaubt es DNS und WINS mite<strong>in</strong>an<strong>der</strong> zu verknüpfen. Wenn Samba als WINS-<br />
Server (w<strong>in</strong>s support = Yes) agiert, kann <strong>der</strong> nmbd alle Namensanfragen im DNS versuchen<br />
zu f<strong>in</strong>den, wenn er ke<strong>in</strong>en entsprechenden <strong>E<strong>in</strong></strong>trag <strong>in</strong> <strong>der</strong> lokalen WINS-Datenbank<br />
gefunden hat. Der Parameter ”dns proxy” bestimmt dieses Verhalten. Samba befragt standardmäßig<br />
den DNS, wenn e<strong>in</strong> Name nicht <strong>in</strong> WINS gefunden wird. Dieses Verhalten entspricht:<br />
dns proxy = Yes. Gibt es ke<strong>in</strong> DNS im eigenen <strong>Netzwerk</strong>, macht Sambas ”dns<br />
proxy” nicht viel S<strong>in</strong>n. Mittels dns proxy = No läßt er sich deaktivieren.<br />
<strong>E<strong>in</strong></strong>e Methode zur Namensauflösung <strong>in</strong> sehr kle<strong>in</strong>en <strong>Netzwerk</strong>en ist <strong>der</strong> Weg über e<strong>in</strong>e<br />
Textdatei. Das Konzept <strong>der</strong> lmhosts Datei kennt <strong>der</strong> Adm<strong>in</strong> vielleicht schon W<strong>in</strong>dows-<br />
Rechnern. Sie kann auch von Samba verwendet werden und entspricht funktionell <strong>der</strong> von L<strong>in</strong>ux<br />
bekannten Datei /etc/hosts. Der e<strong>in</strong>zige Unterschied: Sie ordnet IP-Adressen NetBIOS-<br />
Namen zu anstelle von Hostnamen. Samba schaut <strong>in</strong> <strong>der</strong> lmhosts nur für eigene Fragen nach,<br />
nicht für die Anfragen von an<strong>der</strong>en Masch<strong>in</strong>en im <strong>Netzwerk</strong>. Der Parameter ”name resolve<br />
or<strong>der</strong>” bestimmt dieses Verhalten. Wenn also die Reihenfolge name resolve or<strong>der</strong> =<br />
lmhosts w<strong>in</strong>s e<strong>in</strong>gestellt ist, würde Samba selbst ke<strong>in</strong>e Namensanfragen per Broadcast aussenden<br />
und nicht versuchen, Namen über den DNS aufzulösen. Es würde nur <strong>in</strong> <strong>der</strong> lokalen<br />
lmhosts Datei nachschauen und bei Misserfolg den konfigurierten WINS-Server befragen.<br />
<strong>E<strong>in</strong></strong>e NetBIOS-Namensanfrage macht nmblookup -R -U localhost MYSMB. Die Optionen<br />
sorgen dafür, dass e<strong>in</strong> WINS-Server befragt wird, anstatt lediglich e<strong>in</strong> Broadcast <strong>in</strong> das<br />
lokale Subnetz zu machen.<br />
Sambas lmhosts Datei und e<strong>in</strong>e, die von W<strong>in</strong>dows-Clients verwendet wird, unterscheiden<br />
sich im Format etwas. Es kann S<strong>in</strong>n machen hier den PDC e<strong>in</strong>zutragen, da manchmal sonst<br />
e<strong>in</strong>e Verb<strong>in</strong>dung auf diesen über Router h<strong>in</strong>weg fehlschlägt. Unter W<strong>in</strong>dowsXP liegt diese<br />
Datei <strong>in</strong> /WINDOWS/system32/drivers/etc. Üblicherweise sieht e<strong>in</strong> <strong>E<strong>in</strong></strong>trag so aus:<br />
10.8.4.254 MYSMB #PRE #DOM:SAMBA<br />
Für e<strong>in</strong>fache Hosts reicht die Komb<strong>in</strong>ation aus IP-Nummer und NetBIOS-Name.
12.6. SAMBA ALS PDC 191<br />
12.6 Samba als PDC<br />
Zur großen Form läuft Samba auf, wenn es nicht nur e<strong>in</strong>fache Freigaben bereitstellt und<br />
Namen auflöst. W<strong>in</strong>dowsnetze erlauben seit W<strong>in</strong>dows-NT e<strong>in</strong>e zentralisierte Steuerung. So<br />
können beispielsweise Benutzer zentral an e<strong>in</strong>er Masch<strong>in</strong>e authentifiziert werden, ohne dass<br />
sie auf dem lokalen Endgerät e<strong>in</strong>getragen s<strong>in</strong>d. Hierzu führte Microsoft das Konzept <strong>der</strong><br />
Domäne e<strong>in</strong>. <strong>E<strong>in</strong></strong>e Domäne def<strong>in</strong>iert e<strong>in</strong>e Gruppe von Rechnern, die e<strong>in</strong>e geme<strong>in</strong>same Benutzerdatenbank<br />
verwenden. Diese Benutzerdatenbank stellen sogenannte Primary (PDC)<br />
und Backup Doma<strong>in</strong> Controller (BDC) zur Verfügung. Für jedes Domänenmitglied - dieses<br />
können Benutzer und Rechner se<strong>in</strong> - wird e<strong>in</strong> zentrales Konto angelegt. Für jedes Domänenmitglied<br />
muss e<strong>in</strong> Benutzerkonto, auch Computerkonto genannt, auf dem PDC existieren.<br />
Samba kann die Rolle des PDC, bisher jedoch noch nicht die e<strong>in</strong>es BDC übernehmen.<br />
Hierzu stellt <strong>der</strong> Adm<strong>in</strong> <strong>in</strong> <strong>der</strong> globalen Sektion <strong>der</strong> smb.conf zuerst folgende Optionen e<strong>in</strong>:<br />
workgroup = SAMBA<br />
netbios name = MYSMB<br />
os level = 64<br />
doma<strong>in</strong> master = Yes<br />
doma<strong>in</strong> logons = Yes<br />
preferred master = Yes<br />
w<strong>in</strong>s support = Yes<br />
w<strong>in</strong>s proxy = Yes<br />
<strong>E<strong>in</strong></strong>ige Optionen sollten aus dem bisher gesagten bekannt se<strong>in</strong>. Der hohe OS-Level sorgt<br />
dafür, dass die Masch<strong>in</strong>e die Wahl <strong>der</strong> Browser gew<strong>in</strong>nt. Nun sollte <strong>der</strong> Samba-Server neu<br />
gestartet werden: rcsmb restart; rcnmb restart.<br />
Die Sache mit W<strong>in</strong>9x-Clients ist e<strong>in</strong>fach: Man kann den Samba-PDC sofort ohne weitere<br />
Konfiguration als Anmeldeserver verwenden. Beim <strong>E<strong>in</strong></strong>satz <strong>der</strong> professionellen W<strong>in</strong>dowsvarianten<br />
NT, 2000 o<strong>der</strong> XP s<strong>in</strong>d noch e<strong>in</strong>ige Nacharbeiten notwendig. Es müssen<br />
erst Computer-Konten existieren (Im Beispiel die Masch<strong>in</strong>e zxs) und e<strong>in</strong> Benutzer ”root”<br />
<strong>in</strong> die Samba-Passwort-Datenbank aufgenommen se<strong>in</strong>, bevor die Aufnahme e<strong>in</strong>er solchen<br />
Masch<strong>in</strong>e gel<strong>in</strong>gt.<br />
useradd -d /var/tmp -s /b<strong>in</strong>/false zxs\$<br />
smbpasswd -a -m zxs\$<br />
smbpasswd -a root<br />
Nun s<strong>in</strong>d auf <strong>der</strong> W<strong>in</strong>dows-Masch<strong>in</strong>e e<strong>in</strong>ige Schritte dran: Zuerst legt man e<strong>in</strong>en Key <strong>in</strong><br />
<strong>der</strong> W<strong>in</strong>dows-Registry an. Das geschieht beispielsweise mittels Datei, die <strong>in</strong> die Registry<br />
geladen wird:<br />
W<strong>in</strong>dows Registry Editor Version 5.00<br />
[HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]<br />
"requiresignorseal"=dword:00000000<br />
Anschliessend startet man die Systemsteuerung und wählt dort den Unterpunkt ”System”.<br />
In den nun angezeigten Systemeigenschaften geht es zur Karteikarte mit den Computernamen.<br />
Hier<strong>in</strong> erlaubt <strong>der</strong> Knopf ” Än<strong>der</strong>n” die Aufnahme <strong>der</strong> Masch<strong>in</strong>e <strong>in</strong> e<strong>in</strong>e W<strong>in</strong>dows-<br />
Domäne. Im nun ersche<strong>in</strong>enden Dialog legt man den NetBIOS-Namen <strong>der</strong> Masch<strong>in</strong>e fest<br />
und tritt <strong>der</strong> Domäne bei. Dafür muss <strong>der</strong> Radio-Button ”Mitglied von Dommäne” aktiviert<br />
und <strong>der</strong> Name <strong>der</strong> beizutretenden Domäne daneben e<strong>in</strong>getragen werden. Nach dem
192 KAPITEL 12. SAMBA<br />
Abbildung 12.4: W<strong>in</strong>dowsXP-Masch<strong>in</strong>e <strong>in</strong> e<strong>in</strong>e Domäne aufnehmen<br />
Bestätigen durch ”OK” ersche<strong>in</strong>t e<strong>in</strong> Anmeldedialog für den Doma<strong>in</strong>-Adm<strong>in</strong>istrator. Das<br />
ist <strong>der</strong> Benutzer ”root”, dem mittels smbpasswd e<strong>in</strong> Sambapasswort verpasst wurde.<br />
Wenn nun alles glatt g<strong>in</strong>g, ersche<strong>in</strong>t e<strong>in</strong>e kurze Willkommensmeldung, die den Domänenbeitritt<br />
bestätigt (Siehe Abb. 12.6). Anschliessend muss <strong>der</strong> Client neu starten. Nach erfolgtem<br />
Start kommt nun <strong>der</strong> klassischen Anmelde-Dialog. Unter ”Optionen” können Benutzer<br />
jetzt auswählen, ob sie sich lokal an <strong>der</strong> Masch<strong>in</strong>e o<strong>der</strong> durch Authentifizierung gegen die<br />
Doma<strong>in</strong> ”SAMBA” anmelden wollen. Nun können sich alle Benutzer anmelden, die Samba<br />
bekannt s<strong>in</strong>d. Wenn die Beispiele aus den vorangegangenen Abschnitten beibehalten<br />
wurden, s<strong>in</strong>d das die Benutzer ”test1” und ”test2”.<br />
12.6.1 Benutzerprofile und Logon-Skripten<br />
Beim ersten Test-Log<strong>in</strong> sehen die Benutzerprofile <strong>der</strong> beiden ”test1” und ”test2” noch<br />
sehr nackt aus. Es ersche<strong>in</strong>t lediglich die W<strong>in</strong>dows-Vore<strong>in</strong>stellung des Desktops. Damit e<strong>in</strong><br />
Benutzer an verschiedenen Workstations stets das gleiche Profil vorf<strong>in</strong>det, läßt sich das<br />
Profil serverbasiert speichern. Es wird dann wärend des Anmeldevorganges auf die Client-<br />
Masch<strong>in</strong>e kopiert, vor <strong>der</strong> <strong>der</strong> Benutzer sitzt. Dieses kann nicht e<strong>in</strong>fach umgangen werden,<br />
da viele Anwendungsprogramme e<strong>in</strong> lokales Profil verlangen, das nicht e<strong>in</strong>fach, wie von<br />
L<strong>in</strong>ux gewohnt, im Homeverzeichnis liegt.<br />
Da sich die <strong>E<strong>in</strong></strong>stellungen im Laufe e<strong>in</strong>er Sitzung än<strong>der</strong>n können, müssen sie auch wie<strong>der</strong><br />
zurückgesichert werden. Das geschieht beim Abmelden von <strong>der</strong> Arbeitsstation.<br />
Will <strong>der</strong> Adm<strong>in</strong>istrator ganz neue Benutzer h<strong>in</strong>zufügen, muss er diese erst als L<strong>in</strong>ux-<br />
Accounts anlegen und anschliessend mit smbpasswd -a UserID <strong>in</strong> die Samba-Benutzerdatenbank<br />
kopieren. Nun müssen noch e<strong>in</strong>ige <strong>E<strong>in</strong></strong>tragungen <strong>in</strong> <strong>der</strong> smb.conf vorgenommen<br />
werden. Mit dem <strong>E<strong>in</strong></strong>trag
12.6. SAMBA ALS PDC 193<br />
Abbildung 12.5: Domänen-Aufnahme - Passwortdialog<br />
logon path = \\%N \%U\profile (für NT/2000/XP)<br />
; alternativ:<br />
logon home = \\%N \%U\profile (für W<strong>in</strong>dows 9x)<br />
<strong>in</strong> <strong>der</strong> [global]-Section <strong>der</strong> smb.conf wird im Heimatverzeichnis des Benutzers e<strong>in</strong> Verzeichnis<br />
namens profile erstellt und das Profil dort gespeichert. Der Service erhält e<strong>in</strong>e<br />
eigene Sektion <strong>in</strong> <strong>der</strong> Konfigurationsdatei:<br />
[profiles]<br />
comment = Network Profiles Service<br />
path = %H<br />
read only = No<br />
store dos attributes = Yes<br />
create mask = 0600<br />
directory mask = 0700<br />
Zur Aktivierung dieses Features ist e<strong>in</strong> Neustart des Servers erfor<strong>der</strong>lich. Damit bei <strong>der</strong><br />
Benutzeranmeldung noch Anpassungen se<strong>in</strong>er Umgebung vorgenommen werden können,<br />
kann e<strong>in</strong> Logon-Skript ausgeführt werden. Dieses def<strong>in</strong>iert <strong>der</strong> Adm<strong>in</strong> mittels logon script<br />
= scripts/default.bat<br />
Dieses Skript wird unter W<strong>in</strong>dows ausgeführt, sollte also die richtigen Zeilenschaltungen<br />
besitzen. Entwe<strong>der</strong> <strong>der</strong> Adm<strong>in</strong> editiert es unter W<strong>in</strong>dows selbst und kopiert es <strong>in</strong> das<br />
Netlogon-Verzeichnis. O<strong>der</strong> man konvertiert die Datei entsprechend. Auch dieser Dienst<br />
besitzt e<strong>in</strong>en eigenen Abschnitt:<br />
[netlogon]<br />
comment = Network Logon Service<br />
path = /hom/netlogon<br />
write list = @ntadm<strong>in</strong><br />
force group = ntadm<strong>in</strong>
194 KAPITEL 12. SAMBA<br />
create mask = 0664<br />
directory mask = 0775<br />
browsable = No<br />
Abbildung 12.6: Begrüßung <strong>in</strong> <strong>der</strong> neuen Domäne<br />
<strong>E<strong>in</strong></strong> Beispielskript für NT f<strong>in</strong>det sich je nach e<strong>in</strong>gesetzter L<strong>in</strong>ux-Distribution im Samba-<br />
Doku-Paket unter: .../doc/.../samba/examples/ntlogon/ntlogon.conf.<br />
12.7 Samba und LDAP<br />
Was <strong>in</strong> kle<strong>in</strong>en Netzen noch per Hand zu managen ist, will <strong>der</strong> Adm<strong>in</strong> <strong>in</strong> großen Netzen<br />
professioneller regeln. Das Anlegen von Benutzern nach dem soeben beschriebenen Verfahren<br />
ist für große Netze mit vielen L<strong>in</strong>ux- und W<strong>in</strong>dows-Rechnern, an denen sich e<strong>in</strong> Nutzer<br />
anmelden kann, zu umständlich. Hier hilft e<strong>in</strong>e hierarchische Datenbank weiter, die sich für<br />
solche Zwecke geradezu anbietet. LDAP - das Lightwight Directory Access Protocol (vgl.<br />
Kap. 13.3) ist e<strong>in</strong> verabschiedeter Internet-Standard. Microsoft verwendet dieses als Grundlage<br />
für se<strong>in</strong>e Active Directory Service. OpenLDAP ist e<strong>in</strong>e OpenSource-Implementierung,<br />
die standardmäßig bei Ihrer L<strong>in</strong>uxdistribution dabei se<strong>in</strong> sollte. LDAP arbeitet im Client-<br />
Server-Modell über TCP/IP. Samba kann als LDAP-Client agieren und alle Informationen,<br />
die es für se<strong>in</strong>en Betrieb braucht aus dem Directory beziehen und verän<strong>der</strong>te Daten wie<strong>der</strong><br />
zurückschreiben. Diese Daten landen sonst <strong>in</strong> den *.tdb, die sich unter /etc/samba und<br />
/var/lib/samba f<strong>in</strong>den.<br />
Sollte noch ke<strong>in</strong> LDAP-Server auf <strong>der</strong> Samba-Masch<strong>in</strong>e <strong>in</strong>stalliert se<strong>in</strong>, sollte man diesen<br />
Schritt nun nachholen. Neben den Basispaketen für den Server und die Client-Programme<br />
benötigt die Installation zusätzlich ”pam ldap”, ”nss ldap” und ”ldapsmb”, wenn auch die<br />
Verwaltung <strong>der</strong> L<strong>in</strong>ux-Benutzer mittels LDAP erfolgen soll.
12.7. SAMBA UND LDAP 195<br />
12.7.1 Konfiguration des LDAP-Servers<br />
Es gibt e<strong>in</strong> eigenes Kapitel dieses Skriptes 1 . Im nächsten Schritt erweitert man die Liste<br />
<strong>der</strong> standardmäßig benutzten Schemas um e<strong>in</strong>es für Samba3. Dieses <strong>in</strong>stalliert SuSE bereits<br />
automatisch <strong>in</strong> das richtige Verzeichnis. Kümmert sich Ihre Distribution nicht darum, f<strong>in</strong>det<br />
man sicherlich das Schema als Beispiel <strong>in</strong> <strong>der</strong> Dokumentation des Samba-Paketes.<br />
M<strong>in</strong>imalkonfiguration <strong>der</strong> /etc/openldap/slapd.conf<br />
<strong>in</strong>lcude /etc/openldap/schema/samba3.schema<br />
[ ... ]<br />
suffix "dc=my-doma<strong>in</strong>,dc=site"<br />
rootdn "cn=Manager,dc=my-doma<strong>in</strong>,dc=site"<br />
rootpw GeheiM<br />
Zusätzlich passen Sie die Benennung Ihrer LDAP-Wurzel an (suffix), def<strong>in</strong>ieren entsprechend<br />
den Datenbank-Manager (rootdn) und setzen für diesen e<strong>in</strong> Passwort (rootpw). <strong>E<strong>in</strong></strong>ige<br />
dieser <strong>E<strong>in</strong></strong>stellungen f<strong>in</strong>den Sie auch <strong>in</strong> <strong>der</strong> neuen smb.conf wie<strong>der</strong> (ldap *).<br />
12.7.2 Die neue Samba-Konfiguration<br />
Für den Schritt h<strong>in</strong> zu e<strong>in</strong>em LDAP-Backend sichern Sie am besten Ihre bisherige Konfiguration<br />
und starten mit e<strong>in</strong>er neuen. <strong>E<strong>in</strong></strong>e sehr gute Hilfe und Bauanleitung liefert auch <strong>der</strong><br />
Samba-Guide, <strong>der</strong> als PDF und HTML <strong>in</strong> <strong>der</strong> Samba-Dokumentation mitgeliefert wird.<br />
[global]<br />
unix charset = LOCALE<br />
workgroup = SMB-LDAP<br />
netbios name = MYSMBLDAP<br />
passdb backend = ldapsam:ldap://132.230.4.178/<br />
# username map = /etc/samba/smbusers<br />
log level = 1<br />
smb ports = 139 445<br />
doma<strong>in</strong> logons = Yes<br />
preferred master = Yes<br />
w<strong>in</strong>s support = Yes<br />
name resolve or<strong>der</strong> = w<strong>in</strong>s bcast hosts<br />
time server = Yes<br />
ldap suffix = dc=my-doma<strong>in</strong>,dc=site<br />
ldap mach<strong>in</strong>e suffix = ou=user<br />
ldap user suffix = ou=user<br />
ldap group suffix = ou=group<br />
ldap idmap suffix = ou=idmap<br />
ldap adm<strong>in</strong> dn = cn=Manager,dc=my-doma<strong>in</strong>,dc=site<br />
idmap backend = ldap:ldap://10.8.4.254/<br />
idmap uid = 10000-20000<br />
idmap gid = 10000-20000<br />
map acl <strong>in</strong>herit = Yes<br />
add user script = /var/lib/samba/sb<strong>in</strong>/smbldap-useradd.pl -a -m ’%u’<br />
delete user script = /var/lib/samba/sb<strong>in</strong>/smbldap-userdel.pl %u<br />
add group script = /var/lib/samba/sb<strong>in</strong>/smbldap-groupadd.pl -p ’%g’<br />
delete group script = /var/lib/samba/sb<strong>in</strong>/smbldap-groupdel.pl ’%g’<br />
add user to group script = /var/lib/samba/sb<strong>in</strong>/smbldap-groupmod.pl -m ’<br />
delete user from group script = /var/lib/samba/sb<strong>in</strong>/smbldap-groupmod.pl<br />
1 zum<strong>in</strong>dest <strong>in</strong> den meisten Kompilationen. (vgl. Kap. 13.3) Sonst gibt es das evtl. extra o<strong>der</strong> über<br />
http://goe.net per CVS zu beziehen.
196 KAPITEL 12. SAMBA<br />
set primary group script = /var/lib/samba/sb<strong>in</strong>/smbldap-usermod.pl -g ’%<br />
add mach<strong>in</strong>e script = /var/lib/samba/sb<strong>in</strong>/smbldap-useradd.pl -w ’%u’<br />
logon script = scripts\logon.bat<br />
logon path = \\%L\profiles\%U<br />
logon drive = H:<br />
pr<strong>in</strong>tcap name = CUPS<br />
pr<strong>in</strong>t<strong>in</strong>g = cups<br />
pr<strong>in</strong>ter adm<strong>in</strong> = Adm<strong>in</strong>istrator<br />
[homes]<br />
comment = Home Directories<br />
valid users = %S<br />
read only = No<br />
<strong>in</strong>herit permissions = Yes<br />
browseable = No<br />
[profiles]<br />
comment = Network Profiles Service<br />
path = %H<br />
read only = No<br />
create mask = 0600<br />
directory mask = 0700<br />
store dos attributes = Yes<br />
[users]<br />
comment = All users<br />
path = /home<br />
read only = No<br />
<strong>in</strong>herit permissions = Yes<br />
[groups]<br />
comment = All groups<br />
path = /home/groups<br />
read only = No<br />
<strong>in</strong>herit permissions = Yes<br />
Vor dem Neustart des Samba-Servers mit <strong>der</strong> umgebauten Konfiguration entfernt <strong>der</strong> Adm<strong>in</strong><br />
am besten noch die alten *.tdb und *.dat Dateien aus den beiden oben angebenen<br />
Verzeichnissen. Da <strong>der</strong> Samba-Server mit dem LDAP-Server kommuniziert und <strong>E<strong>in</strong></strong>träge<br />
anlegt, benötigt Samba das Manager-Passwort:<br />
l<strong>in</strong>ux2:/etc/samba # smbpasswd -w GeheiM<br />
Sett<strong>in</strong>g stored password for "cn=Manager,dc=my-doma<strong>in</strong>,dc=site" <strong>in</strong><br />
secrets.tdb<br />
Dann wird es Zeit die Server mit:<br />
rcsmb (re)start; rcnmb (re)start; rcldap (re)start; - o<strong>der</strong> passend zur jeweiligen<br />
Distribution - neu zu starten. Am besten wirft man e<strong>in</strong>en kurzen Blick <strong>in</strong>s Logfile<br />
/var/log/samba/log.smbd, ob ke<strong>in</strong>e Fehler aufgetreten s<strong>in</strong>d. Der Befehl smbclient -L<br />
localhost -U% sollte nun e<strong>in</strong>e Serverstatusmeldung generieren. Mit dem Kommando<br />
l<strong>in</strong>ux2:/etc/samba # net getlocalsid<br />
[2004/11/22 19:51:17, 0] lib/smbldap.c:smbldap_search_suffix(1101)<br />
smbldap_search_suffix: Problem dur<strong>in</strong>g LDAP search: (No such object)<br />
SID for doma<strong>in</strong> MYSMBLDAP is: S-1-5-21-2420552454-2742262544-3303448865<br />
l<strong>in</strong>ux2:/etc/samba # ls -la secrets.tdb<br />
-rw------- 1 root root 8192 Nov 22 19:45 secrets.tdb<br />
erzeugt man e<strong>in</strong>en e<strong>in</strong>deutigen Idenfier für die Masch<strong>in</strong>e. Anschliessend gibts auch wie<strong>der</strong><br />
e<strong>in</strong>e secrets.tdb.
12.7. SAMBA UND LDAP 197<br />
12.7.3 Die IDEALX-Skripten<br />
Nun braucht mal die idealx.com Samba-LDAP-Skripten. Die muss sich <strong>der</strong> Adm<strong>in</strong> meistens<br />
nicht irgendwoher organisieren. Sie sollten Bestandteil des Samba-Doc-Paketes se<strong>in</strong>.<br />
Die Autoren des Samba-Guide schlagen vor die Skripten und e<strong>in</strong> zu kompilierendes mkntpwd<br />
<strong>in</strong> e<strong>in</strong> Unterverzeichnis /var/lib/samba/sb<strong>in</strong> zu verschieben. Auf e<strong>in</strong>em SuSE-L<strong>in</strong>ux<br />
ist mkntpwd bereits unter /usr/sb<strong>in</strong> <strong>in</strong>stalliert. Der Compile-Schritt kann entfallen. Also<br />
führt man <strong>in</strong><br />
l<strong>in</strong>ux2:/usr/share/doc/packages/samba/examples/LDAP/smbldap-tools #<br />
cd mkntpwd<br />
make<br />
cd ..<br />
mkdir /var/lib/samba/sb<strong>in</strong><br />
cp *.pl *.pm mkntpwd/mkntpwd /var/lib/samba/sb<strong>in</strong><br />
chmod 755 /var/lib/samba/sb<strong>in</strong>/smb*.pl<br />
chmod 644 /var/lib/samba/sb<strong>in</strong>/smb*.pm<br />
aus. Nun steht e<strong>in</strong>e kle<strong>in</strong>e Konfigurationsorgie <strong>der</strong> Datei smbldap conf.pm an. Diese im<br />
Liebl<strong>in</strong>gseditor öffnen und los gehts:<br />
[ ... ]<br />
# Put your own SID<br />
# to obta<strong>in</strong> this number do: "net getlocalsid"<br />
$SID=’S-1-5-21-2420552454-2742262544-3303448865’;<br />
[ ... ]<br />
# LDAP Suffix<br />
# Ex: $suffix = "dc=IDEALX,dc=ORG";<br />
$suffix = "dc=my-doma<strong>in</strong>,dc=site";<br />
[ ... ]<br />
# Where are stored Users<br />
# Ex: $usersdn = "ou=Users,$suffix"; for ou=Users,dc=IDEALX,dc=ORG<br />
$usersou = q(user);<br />
$usersdn = "ou=$usersou,$suffix";<br />
# Where are stored Computers<br />
# Ex: $computersdn = "ou=Computers,$suffix";<br />
# for ou=Computers,dc=IDEALX,dc=ORG<br />
$computersou = q(user);<br />
$computersdn = "ou=$computersou,$suffix";<br />
# Where are stored Groups<br />
# Ex $groupsdn = "ou=Groups,$suffix"; for ou=Groups,dc=IDEALX,dc=ORG<br />
$groupsou = q(group);<br />
$groupsdn = "ou=$groupsou,$suffix";<br />
[ ... ]<br />
# B<strong>in</strong>d DN used<br />
# Ex: $b<strong>in</strong>ddn = "cn=Manager,$suffix"; for cn=Manager,dc=IDEALX,dc=org<br />
$b<strong>in</strong>ddn = "cn=Manager,$suffix";<br />
# B<strong>in</strong>d DN passwd used<br />
# Ex: $b<strong>in</strong>dpasswd = ’secret’; for ’secret’<br />
$b<strong>in</strong>dpasswd = "GeheiM";<br />
[ ... ]<br />
# Log<strong>in</strong> defs<br />
# Default Log<strong>in</strong> Shell<br />
# Ex: $_userLog<strong>in</strong>Shell = q(/b<strong>in</strong>/bash);<br />
$_userLog<strong>in</strong>Shell = q(/b<strong>in</strong>/bash);<br />
# Home directory prefix (without username)<br />
# Ex: $_userHomePrefix = q(/home/);
198 KAPITEL 12. SAMBA<br />
$_userHomePrefix = q(/home/);<br />
[ ... ]<br />
$_userSmbHome = q(\\\\MYSMBLDAP\\homes);<br />
[ ... ]<br />
$_userProfile = q(\\\\MYSMBLDAP\\profiles\\);<br />
[ ... ]<br />
$_userHomeDrive = q(H:);<br />
[ ... ]<br />
# Allows not to use smbpasswd (if $with_smbpasswd == 0 <strong>in</strong><br />
# smbldap_conf.pm) but prefer mkntpwd... most of the time, it’s<br />
# a wise choice :-)<br />
$with_smbpasswd = 0;<br />
$smbpasswd = "/usr/b<strong>in</strong>/smbpasswd";<br />
$mk_ntpasswd = "/usr/sb<strong>in</strong>/mkntpwd";<br />
Die <strong>E<strong>in</strong></strong>träge für $usersou und $groupsou müssen natürlich mit den Def<strong>in</strong>itionen <strong>in</strong> <strong>der</strong><br />
smb.conf übere<strong>in</strong>stimmen. Man ist jedoch nicht auf ”user” und ”group” festgelegt und<br />
können geän<strong>der</strong>t werden. Ähnliches gilt für den NetBIOS-Namen des Samba-Servers und<br />
den Buchstaben für das Home-Laufwerk.<br />
Für die meisten <strong>der</strong> <strong>der</strong>zeit aktuelle Samba-Versionen und Idealx-Skripten müssen Computer<br />
und Benutzer unterhalb e<strong>in</strong>es geme<strong>in</strong>samen LDAP-Knotens angelegt se<strong>in</strong>. In diesem<br />
Beispiel wurden die Computer <strong>in</strong> ”user” aufgenommen. Bei unterschiedlich gewählten Ablagen<br />
schlägt e<strong>in</strong> Domänenbeitritt fehl, da e<strong>in</strong>e Masch<strong>in</strong>e zwar sauber <strong>in</strong> den LDAP e<strong>in</strong>getragen,<br />
danach aber nicht wie<strong>der</strong>gefunden wird. Dieses Problem sche<strong>in</strong>t mit den neuesten<br />
Samba-Versionen und Idealx-Skripten2 behoben. Ebenfalls entfallen die Ergänzungen <strong>der</strong><br />
Objektklassen. Dafür muss dann jedoch die LDAP Schema-Datei von Idealx und nicht die<br />
von Samba e<strong>in</strong>gesetzt werden, da sonst e<strong>in</strong>ige Objekte nicht korrekt <strong>in</strong>itialisiert werden.<br />
Am Ende <strong>der</strong> Datei muss <strong>der</strong> Pfad zu mkntpwd stimmen. Bef<strong>in</strong>den sich LDAP- und<br />
Samba-Server nicht auf e<strong>in</strong>er Masch<strong>in</strong>e s<strong>in</strong>d für den <strong>Netzwerk</strong>zugriff des Samba auf LDAP<br />
natürlich noch IP und Port oben <strong>in</strong> <strong>der</strong> Datei anzugleichen. Generell fügt das Skript umfangreichere<br />
Informationen e<strong>in</strong>, als für e<strong>in</strong> re<strong>in</strong>es Samba-Backend benötigt würden. Zusätzlich<br />
s<strong>in</strong>d auch alle Informationen für <strong>Unix</strong>-Benutzer enthalten.<br />
Lei<strong>der</strong> s<strong>in</strong>d die Skripten je nach e<strong>in</strong>gesetzter L<strong>in</strong>ux-Distribution nicht ganz passend zu<br />
e<strong>in</strong>igen neueren LDAP-Versionen, so dass bei smbldap-populate.pl folgende o<strong>der</strong> ähnliche<br />
Fehlermeldung mehrfach auftreten kann:<br />
failed to add entry: no structural object class provided at<br />
./smbldap-populate2.pl l<strong>in</strong>e 323, l<strong>in</strong>e 8.<br />
Diese läßt sich <strong>in</strong> den Griff bekommen durch das <strong>E<strong>in</strong></strong>fügen zweier struktureller LDAP-<br />
Objektklassen <strong>in</strong> die Datei smbldap-populate.pl Zeilen 323 und folgende:<br />
dn: cn=Doma<strong>in</strong> Adm<strong>in</strong>s,$groupsdn<br />
objectClass: posixGroup<br />
+objectClass: top<br />
+objectClass: namedObject<br />
objectClass: sambaGroupMapp<strong>in</strong>g<br />
gidNumber: 512<br />
cn: Doma<strong>in</strong> Adm<strong>in</strong>s<br />
Das Ergebnis sieht dann so aus:<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # ./smbldap-populate.pl<br />
Us<strong>in</strong>g built<strong>in</strong> directory structure<br />
2 www.idealx.org - Version 0.8.5, die 0.8.4 funktioniert nicht korrekt
12.7. SAMBA UND LDAP 199<br />
add<strong>in</strong>g new entry: dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: ou=user,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: ou=computer,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: uid=Adm<strong>in</strong>istrator,ou=user,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: uid=nobody,ou=user,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Doma<strong>in</strong> Adm<strong>in</strong>s,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Doma<strong>in</strong> Users,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Doma<strong>in</strong> Guests,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Adm<strong>in</strong>istrators,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Users,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Guests,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Power Users,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Account Operators,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Server Operators,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Pr<strong>in</strong>t Operators,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Backup Operators,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Replicator,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
add<strong>in</strong>g new entry: cn=Doma<strong>in</strong> Computers,ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
Nach erfolgreichem Durlauf von smbldap-populate.pl muss <strong>der</strong> LDAP-Server neu gestartet<br />
werden: rcldap restart. Als nächstes benötigt <strong>der</strong> LDAP-Server e<strong>in</strong> Conta<strong>in</strong>er-Objekt<br />
für IDMAP-Informationen. Dieser ist überlicherweise nicht vorhanden und muss per Hand<br />
erzeugt werden. Dazu legen Sie e<strong>in</strong>e Datei idmap.ldif mit folgendem Inhalt an:<br />
dn: ou=Idmap,dc=my-doma<strong>in</strong>,dc=site<br />
objectClass: top<br />
objectClass: organizationalUnit<br />
ou: Idmap<br />
Diese Datei liegt im sogenannten LDIF vor - e<strong>in</strong> Austauschformat zwischen LDAP-Datenbanken.<br />
Mit dem Kommando<br />
ldapadd -x -D "cn=Manager,dc=my-doma<strong>in</strong>,dc=site"-w GeheiM -f idmap.ldif<br />
fügt man den <strong>E<strong>in</strong></strong>trag <strong>der</strong> LDAP-Datenbasis h<strong>in</strong>zu. Zur Kontrolle ob <strong>der</strong> LDAP-Server<br />
korrekt läuft und auf Requests antwortet, kann das Kommandozeilentool ldapsearch verwendet<br />
werden. Es funktioniert analog zu ldapadd zum Auslesen <strong>der</strong> Datenbank.<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # ldapsearch -x -b "dc=my-doma<strong>in</strong>,dc=site"<br />
# extended LDIF<br />
#<br />
# LDAPv3<br />
# base with scope sub<br />
# filter: (objectclass=*)<br />
# request<strong>in</strong>g: ALL<br />
#<br />
# my-doma<strong>in</strong>.site<br />
dn: dc=my-doma<strong>in</strong>,dc=site<br />
objectClass: dcObject<br />
objectClass: organization<br />
dc: my-doma<strong>in</strong><br />
o: my-doma<strong>in</strong><br />
[ ... ]<br />
# Idmap, my-doma<strong>in</strong>.site
200 KAPITEL 12. SAMBA<br />
dn: ou=Idmap,dc=my-doma<strong>in</strong>,dc=site<br />
objectClass: top<br />
objectClass: organizationalUnit<br />
ou: Idmap<br />
# search result<br />
search: 2<br />
result: 0 Success<br />
# numResponses: 21<br />
# numEntries: 20<br />
Es sollte e<strong>in</strong>e ziemlich lange Liste liefern. Dann wird es Zeit sich um den Name Service<br />
Switch zu kümmern, so dass dieser auch LDAP-Benutzer auflösen kann. An<strong>der</strong>nfalls kann<br />
Ihr System Samba-Usern ke<strong>in</strong>e System-User zuordnen.<br />
/etc/nsswitch.conf<br />
passwd: compat<br />
group: compat<br />
passwd_compat: ldap<br />
group_compat: ldap<br />
[ ... ]<br />
# o<strong>der</strong> alternativ<br />
passwd: files ldap<br />
group: files ldap<br />
Die <strong>E<strong>in</strong></strong>stellungen <strong>in</strong> dieser Datei als auch die LDAP-Client-Konfiguration kann ebenfalls<br />
mit YaST2 vorgenommen werden (Abb. yast2-ldap-client Erreichbar <strong>in</strong> YaST2 über <strong>Netzwerk</strong>dienste<br />
LDAP-Client).<br />
# /etc/ldap.conf<br />
host 127.0.0.1<br />
base ou=user,dc=my-doma<strong>in</strong>,dc=site<br />
ldap_version 3<br />
ssl no<br />
nss_map_attribute uniqueMember member<br />
pam_filter objectclass=posixAccount<br />
nss_base_passwd ou=user,dc=my-doma<strong>in</strong>,dc=site<br />
nss_base_shadow ou=user,dc=my-doma<strong>in</strong>,dc=site<br />
nss_base_group ou=group,dc=my-doma<strong>in</strong>,dc=site<br />
Wenn alles geklappt hat, liefert getent nun auch die Samba-Accounts und Gruppen:<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # getent passwd<br />
[ ... ]<br />
Adm<strong>in</strong>istrator:x:998:512:Netbios Doma<strong>in</strong> Adm<strong>in</strong>istrator:/home:/b<strong>in</strong>/false<br />
nobody:x:999:514:nobody:/dev/null:/b<strong>in</strong>/false<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # getent group<br />
[ ... ]<br />
Doma<strong>in</strong> Adm<strong>in</strong>s:x:512:Adm<strong>in</strong>istrator<br />
Doma<strong>in</strong> Users:x:513:<br />
Doma<strong>in</strong> Guests:x:514:
12.7. SAMBA UND LDAP 201<br />
Adm<strong>in</strong>istrators:x:544:<br />
[ ... ]<br />
Nun wäre es nur noch e<strong>in</strong> kle<strong>in</strong>er Schritt auch den Zugriff auf die L<strong>in</strong>uxmasch<strong>in</strong>e mittels<br />
PAM-LDAP e<strong>in</strong>zurichten. Dieses würde aber den Rahmen des hier Beschriebenen sprengen.<br />
Auf diesem Wege können Adm<strong>in</strong>istratoren jedoch e<strong>in</strong> ”s<strong>in</strong>gle-password” realisieren. Bisher<br />
waren nur Systembenutzer automatisch angelegt worden. Mit den entsprechenden Tools<br />
können nun weitere h<strong>in</strong>gezufügt werden:<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # ./smbldap-useradd.pl -m -a test1<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # ./smbldap-passwd.pl test1<br />
Chang<strong>in</strong>g password for test1<br />
New password :<br />
Retype new password :<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # ./smbldap-usermod.pl -u 0 Adm<strong>in</strong>istrator<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # ./smbldap-passwd.pl Adm<strong>in</strong>istrator<br />
Chang<strong>in</strong>g password for test1<br />
New password :<br />
Retype new password :<br />
Der Adm<strong>in</strong>istrator hat vorerst noch e<strong>in</strong>e UID ungleich null. Das än<strong>der</strong>t man mit smbldapusermod.pl<br />
wie im Beispiel gezeigt. Für ihn brauchen Sie auch noch e<strong>in</strong> Passwort für den<br />
späteren Domänenbeitritt. Mittels - <strong>der</strong> im smb.conf Beispiel auskommentierten - ”username<br />
map” kann <strong>der</strong> Adm<strong>in</strong>istrator auch auf den <strong>Unix</strong>-Adm<strong>in</strong> ”root” abgebildet werden. Diese<br />
Nutzer stehen sofort auch unter L<strong>in</strong>ux zur Verfügung, wie getent passwd o<strong>der</strong> id test1 3<br />
zeigen. Dass <strong>der</strong> User auch für die W<strong>in</strong>dowswelt sichtbar wird, zeigt:<br />
l<strong>in</strong>ux2:/var/lib/samba/sb<strong>in</strong> # pdbedit -Lv test1<br />
Search<strong>in</strong>g for:[(&(objectClass=sambaDoma<strong>in</strong>)(sambaDoma<strong>in</strong>Name=SMB-LDAP))]<br />
smbldap_open_connection: connection opened<br />
Search<strong>in</strong>g for:[(&(objectClass=sambaDoma<strong>in</strong>)(sambaDoma<strong>in</strong>Name=SMB-LDAP))]<br />
smbldap_open_connection: connection opened<br />
<strong>in</strong>it_sam_from_ldap: Entry found for user: test1<br />
<strong>Unix</strong> username: test1<br />
NT username: test1<br />
Account Flags: [U ]<br />
User SID: S-1-5-21-3516781642-1962875130-3438800523-3000<br />
Primary Group SID: S-1-5-21-3516781642-1962875130-3438800523-513<br />
Full Name: System User<br />
Home Directory: \\MYSMBLDAP\homes<br />
HomeDir Drive: H:<br />
Logon Script: test1.cmd<br />
Profile Path: \\MYSMBLDAP\profiles\test1<br />
Doma<strong>in</strong>: SMB-LDAP<br />
Account desc: System User<br />
Workstations:<br />
Munged dial:<br />
Logon time: 0<br />
Logoff time: Fri, 13 Dec 1901 21:45:51 GMT<br />
Kickoff time: Fri, 13 Dec 1901 21:45:51 GMT<br />
3 siehe hierzu auch den Teil zur Benutzerverwaltung mit LDAP
202 KAPITEL 12. SAMBA<br />
Password last set: Tue, 23 Nov 2004 01:49:59 GMT<br />
Password can change: 0<br />
Password must change: Fri, 07 Jan 2005 01:49:59 GMT<br />
Last bad password : 0<br />
Bad password count : 0<br />
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF<br />
Nun könnte <strong>der</strong> Adm<strong>in</strong> noch e<strong>in</strong>e Gruppe ”testgroup” wie im e<strong>in</strong>führenden Beispiel des<br />
letzten Abschnitts anlegen: smbldap-groupadd.pl -a testgroup. Hatte man schon das<br />
Problem, dass smbldap-polulate.pl gepatcht werden musste, bleibt es e<strong>in</strong>em für smbldap<br />
tools.pm nicht erspart: Ab Zeile 283 müssen zwei Zuweisungen h<strong>in</strong>zugefügt werden:<br />
objectClass => ’top’,<br />
objectClass => ’namedObject’,<br />
die die Objektklasse ”posixGroup” ergänzen. Treten weitere Probleme mit e<strong>in</strong>em <strong>der</strong> an<strong>der</strong>en<br />
Tools auf, liegt es häufig an den <strong>E<strong>in</strong></strong>stellungen zu den LDAP-Objekten. <strong>E<strong>in</strong></strong> letzter<br />
Test überprüft die korrekte Zuweisung <strong>der</strong> Gruppen: net groupmap list.<br />
Damit sollte nun das Setup abgeschlossen und e<strong>in</strong> PDC mit verän<strong>der</strong>tem Backend aufgesetzt<br />
worden se<strong>in</strong>. Nun können Sie die Schritte wie im Abschnitt ”Samba als PDC”<br />
beschrieben wie<strong>der</strong>holen. Die Domäne heisst nun etwas an<strong>der</strong>s, um den Unterschied herauszustellen.<br />
Für den W<strong>in</strong>dows-Client än<strong>der</strong>t sich nicht viel (Abb. smbldap-doma<strong>in</strong> ”<strong>E<strong>in</strong></strong>fügen<br />
e<strong>in</strong>er W<strong>in</strong>dows-XP Masch<strong>in</strong>e <strong>in</strong> e<strong>in</strong>e Domäne mit Samba/LDAP-Backend” und ”Anmeldung<br />
an <strong>der</strong> neuen Domäne” Abb. xp-sambatestnetz).<br />
12.7.4 Fazit von Samba-LDAP-Aktionen<br />
Der Aufwand für e<strong>in</strong>e solche Aktion ist deutlich höher als ohne Verwendung von LDAP, da<br />
e<strong>in</strong>e ganze Reihe von Schritten durchzuführen s<strong>in</strong>d. Wegen <strong>der</strong> höheren Komplexität schleichen<br />
sich schneller Fehler e<strong>in</strong>. <strong>E<strong>in</strong></strong> Adm<strong>in</strong> braucht schon e<strong>in</strong>e Menge Geduld, um eventuell<br />
nicht passende Skripten anzupassen o<strong>der</strong> Software-Bugs zu umschiffen. Nicht jede Komb<strong>in</strong>ation<br />
von Samba und LDAP-Skripten funktioniert. Bei vermutlich je<strong>der</strong> Distribution ist mit<br />
händischer Nach- und Anpassungsarbeit zu rechnen. Belohnt wird <strong>der</strong> Adm<strong>in</strong>istrator am<br />
Ende jedoch von e<strong>in</strong>er komfortablen Lösung zum bequemen Management e<strong>in</strong>er W<strong>in</strong>dows-<br />
Domäne ohne hierfür teure Microsoft-Server-Lizenzen beschaffen zu müssen. Fast nebenbei<br />
fällt e<strong>in</strong> elegantes ”s<strong>in</strong>gle-password” für W<strong>in</strong>dows- und L<strong>in</strong>uxmasch<strong>in</strong>en ab. Zusätzlich kann<br />
LDAP dazu benutzt werden zentrale Adressbücher bereitzustellen o<strong>der</strong> e<strong>in</strong>e generelle Verwaltung<br />
bestimmter IT-Ressourcen zu realisieren.
Kapitel 13<br />
Ressourcenverwaltung<br />
13.1 <strong>E<strong>in</strong></strong>leitung<br />
In sehr grossen Netzen mit vielen gleichartigen Masch<strong>in</strong>en und vielen Benutzern, die sich<br />
an fast allen Masch<strong>in</strong>en anmelden können, ist die klassische dezentrale Verwaltung von<br />
Benutzern und Resourcen nicht mehr leistbar.<br />
13.2 NIS<br />
13.2.1 Zielsetzung<br />
Wenn e<strong>in</strong> lokales <strong>Netzwerk</strong> betrieben wird, besteht e<strong>in</strong> Ziel üblicherweise dar<strong>in</strong>, allen Benutzern<br />
e<strong>in</strong>e Umgebung zur Verfügung zu stellen, die überall gleich konfiguriert ist. Die Benutzer<br />
sollen e<strong>in</strong> e<strong>in</strong>heitliches Homeverzeichnis vorf<strong>in</strong>den und überall den gleichen Account<br />
verwenden, für den das gleiche Passwort gültig ist. Hierzu s<strong>in</strong>d die lebenswichtigen Daten<br />
wie Account-Informationen zwischen allen Hosts zu synchronisieren. Darüberh<strong>in</strong>aus lassen<br />
sich auch weitere Dateien synchronisieren, wie die /etc/hosts, /etc/services, /etc/groups ...<br />
Deshalb entwickelte Sun vor e<strong>in</strong>iger Zeit NIS, das Network Information System. NIS bietet<br />
e<strong>in</strong>fache Datenbank-Zugriffse<strong>in</strong>richtungen, die verwendet werden können, um Informationen,<br />
wie sie <strong>in</strong> den Dateien passwd und groups enthalten s<strong>in</strong>d, an alle Hosts im <strong>Netzwerk</strong><br />
zu verteilen.<br />
NIS basiert auf RPC (Remote Procedure Call und besteht aus e<strong>in</strong>em Server, e<strong>in</strong>er<br />
Bibliothek für die Client-Seite und verschiedenen adm<strong>in</strong>istrativen Tools. Bekannt wurde<br />
NIS unter dem Namen Yellow Pages (”Gelbe Seiten”), kurz YP, <strong>der</strong> heute immer noch<br />
häufig verwendet wird. An<strong>der</strong>erseits ist ”Yellow Pages” e<strong>in</strong> e<strong>in</strong>getragenes Warenzeichen,<br />
so daß Sun den Namen fallen ließ. Da <strong>der</strong> Begriff aber gut merkbar war, bleiben manche<br />
Namen e<strong>in</strong>fach hängen, und so lebt YP als Präfix für die Namen <strong>der</strong> meisten NIS-Befehle<br />
wie ypserv, ypb<strong>in</strong>d, ypset etc. weiter.<br />
13.2.2 NIS-Datenbanken<br />
NIS hält se<strong>in</strong>e Datenbank-Informationen <strong>in</strong> sogenannten Maps (etwa: Zuordnungen), die<br />
Key/Value-Paare <strong>in</strong> Hashtables speichern. Die Maps werden auf e<strong>in</strong>em zentralen Host vorgehalten,<br />
auf dem <strong>der</strong> NIS-Server läuft. Clients können die Informationen dann von diesem<br />
Server über verschiedene RPC-Calls abrufen.<br />
Die Maps selbst werden normalerweise aus Master-Textdateien wie /etc/hosts o<strong>der</strong><br />
/etc/passwd generiert. Aus manchen Dateien werden mehrere Maps generiert, jeweils e<strong>in</strong>e<br />
pro Suchschlüssel. Zum Beispiel können Sie die Datei hosts nach e<strong>in</strong>em Hostnamen ebenso<br />
203
204 KAPITEL 13. RESSOURCENVERWALTUNG<br />
wie nach e<strong>in</strong>er IP-Adresse durchsuchen. Entsprechend werden zwei NIS-Maps daraus erzeugt:<br />
hosts.byname und hosts.byaddr. Im folgenden wird e<strong>in</strong>e Aufstellung <strong>der</strong> gängigen<br />
Maps sowie <strong>der</strong> Dateien, aus denen sie generiert werden, gezeigt:<br />
13.2.3 NIS-Server<br />
13.2.4 NIS-Client<br />
Master-Datei Mapfile(s)<br />
/etc/hosts hosts.byname, hosts.byaddr<br />
/etc/networks networks.byname, networks.byaddr<br />
/etc/passwd passwd.byname, passwd.byuid<br />
/etc/group group.byname, group.bygid<br />
/etc/services services.byname, services.bynumber<br />
/etc/rpc rpc.byname, rpc.bynumber<br />
/etc/protocols protocols.byname, protocols.bynumber<br />
/etc/aliases mail.aliases<br />
Die Konfigurationsdatei für NIS ist yp.conf.<br />
# Syntax:<br />
# ypserver <br />
ypserver 134.76.60.23<br />
Tabelle 13.1: NIS-Maps<br />
Der NIS-Doma<strong>in</strong>-Str<strong>in</strong>g enthalten <strong>in</strong> <strong>der</strong> DHCP-Variablen ”option-doma<strong>in</strong> ”dxs”;” wird<br />
mittels des Kommandos ”doma<strong>in</strong>name name <strong>der</strong> nis doma<strong>in</strong>” e<strong>in</strong>getragen. Alternativ kann<br />
dieser <strong>E<strong>in</strong></strong>trag auch direkt nach /proc/sys/kernel/doma<strong>in</strong>name geschrieben werden.<br />
13.3 Hierarchische Datenbank: LDAP<br />
13.3.1 Intro<br />
In verteilten Umgebungen werden Informationen über Personen, Anwendungen, Dateien,<br />
Drucker und an<strong>der</strong>e, über das Netz zugängliche Ressourcen oft <strong>in</strong> e<strong>in</strong>er speziellen Datenbank,<br />
e<strong>in</strong>em sogenannten Directory gespeichert. <strong>E<strong>in</strong></strong> Directory Service ist e<strong>in</strong> Name Service,<br />
<strong>der</strong> neben <strong>der</strong> Zuordnung Name-Objekt auch Metadaten enthält.<br />
LDAP ist e<strong>in</strong> Kommunikationsprotokoll, das den Zugriff auf und die Aktualisierung von<br />
Directory Informationen regelt. Es ist e<strong>in</strong> offener Industriestandard und e<strong>in</strong>e vere<strong>in</strong>fachte<br />
Alternative zum X.500 Standard. Die <strong>Netzwerk</strong>kommunikation wird mittels TCP/IP standardmäßig<br />
auf Port 389 abgewickelt. Es kann Bestandteil von Browsern, wie z.B. Netscape<br />
se<strong>in</strong>. Ursprünglich wurde die Entwicklung von Netscape vorangetrieben, um den eigenen<br />
Kunden e<strong>in</strong> übergreifendes Directory für Mail- und Webanwendungen anbieten zu können.<br />
Das Protokoll arbeitet im klassischen Client-Server-Modell und verwendet Str<strong>in</strong>gs zur Datendarstellung.<br />
X.500 wurde 1988 von <strong>der</strong> CCITT spezifiziert als ”e<strong>in</strong>e Menge offener Systeme, die<br />
geme<strong>in</strong>sam e<strong>in</strong>e Datenbank halten, <strong>in</strong> <strong>der</strong> Informationen über Objekte <strong>der</strong> realen Welt<br />
abgelegt s<strong>in</strong>d”. Die CCITT spezifiziert im wesentlichen drei Protokolle: DAP (Directory<br />
Access Protocol), das zum Zugriff auf die Informationen dient, DSP (Directory Service<br />
Protocol), mit dem die Kommunikation zwischen Servern durchgeführt wird, und DISP
13.3. HIERARCHISCHE DATENBANK: LDAP 205<br />
(Directory Information Shadow<strong>in</strong>g Protocol). Allerd<strong>in</strong>gs setzt X.500 auf e<strong>in</strong>em vollständigen<br />
ISO/OSI-Stack auf, was e<strong>in</strong>en durchschlagenden Erfolg unmöglich machte.<br />
X.500 kann als vollständig bezeichnet werden: Nichts, was nicht <strong>in</strong> ihm gespeichert werden<br />
könnte. Das Verzeichnis stellt e<strong>in</strong>e Objektdatenbank dar. Zu speichernde Informationen<br />
werden <strong>in</strong> Objektklassen beschrieben: Attributnamen, Typen und <strong>der</strong>en Wertebereich.<br />
Wesentliche Nachteile s<strong>in</strong>d <strong>der</strong> hohe Implementationsaufwand und <strong>der</strong> ”schwergewichtige”<br />
Zugriff: die Kommunikation zwischen Client und Server erzeugt e<strong>in</strong>e recht hohe Netzlast, die<br />
e<strong>in</strong>er allgegenwärtigen Nutzung h<strong>in</strong><strong>der</strong>lich ist - denn schließlich spielt e<strong>in</strong> Verzeichnisdienst<br />
erst mit <strong>der</strong> allgeme<strong>in</strong>en Verwendung se<strong>in</strong>e Stärken aus. LDAP schlägt e<strong>in</strong>e Brücke.<br />
13.3.2 Was kann mit LDAP abgebildet werden<br />
LDAP speichert se<strong>in</strong>e Informationen <strong>in</strong> e<strong>in</strong>er Baumhierarchie. Diese Hierarchie kann diverse<br />
Informationen enthalten. <strong>E<strong>in</strong></strong>en Überblick verschafft RFC 2307, <strong>in</strong> dem mögliche Inhalte<br />
<strong>der</strong> LDAP Hierarchie spezifiziert s<strong>in</strong>d:<br />
• Benutzer<br />
• Gruppen<br />
• IP-Dienste<br />
• IP-Protokolle<br />
• RPC’s<br />
• NIS-<strong>Netzwerk</strong>gruppen<br />
• Boot-Informationen<br />
• <strong>E<strong>in</strong></strong>hängepunkte für Dateisysteme<br />
• IP-Hosts und <strong>Netzwerk</strong>e<br />
• RFC 822 konforme Mail-Aliase<br />
Hat man Daten <strong>in</strong> Datenbanken, so ist es wichtig, diese Informationen zu strukturieren.<br />
Beson<strong>der</strong>s, wenn viele verschiedene Clients auf die Datenbank zugreifen wollen, zum Beispiel<br />
Netscape, Outlook und an<strong>der</strong>e, muss die Struktur genau def<strong>in</strong>iert se<strong>in</strong>. Wenn e<strong>in</strong> Mailclient<br />
e<strong>in</strong>e eMail-Adresse braucht, muss er wissen, wie er diese bekommt.<br />
<strong>E<strong>in</strong></strong>e zentrale Benutzerverwaltung setzt das Vorhandense<strong>in</strong> e<strong>in</strong>er geeigneten Authentifizierungs<strong>in</strong>frastruktur<br />
auf je<strong>der</strong> Masch<strong>in</strong>e voraus. Hierfür wurde ursprünglich von SUN<br />
vor <strong>in</strong>zwischen knapp 15 Jahren das Network Information System (NIS) entwickelt, welches<br />
lange Zeit den Standard e<strong>in</strong>er verteilten Benutzerauthentifizierung und -verwaltung<br />
im <strong>Unix</strong>-Umfeld darstellte. Dieses wird <strong>in</strong> e<strong>in</strong>em eigenen Abschnitt kurz erklärt.<br />
Mit den heute üblichen heterogenen Umgebungen, <strong>der</strong>en vielfältigen Authentifizierungsanfor<strong>der</strong>ungen<br />
(z.B. die Anmeldung an e<strong>in</strong>em Radius-Server für Modem- o<strong>der</strong> ISDN-<strong>E<strong>in</strong></strong>wahl)<br />
und den gestiegenen Sicherheitsfor<strong>der</strong>ungen konnte NIS nicht mehr mithalten. Neben<br />
den <strong>in</strong>zwischen recht umfänglichen Daten, die die Verwaltung e<strong>in</strong>es Benutzers erfo<strong>der</strong>t,<br />
kommen weitere Wünsche nach e<strong>in</strong>er zentralisierten Organisation von Rechner-Pools h<strong>in</strong>zu.<br />
Diese Daten sollen meist ebenfalls geeignet abgelegt und komfortabel zugänglich gemacht<br />
werden. Solche Aufgaben übernehmen ab e<strong>in</strong>em bestimmten Umfang <strong>der</strong> Anfor<strong>der</strong>ungen<br />
Datenbanken.
206 KAPITEL 13. RESSOURCENVERWALTUNG<br />
13.3.3 Das Datenmodell<br />
Bevor e<strong>in</strong>e Datenbank mit Inhalten bestückt wird, sollte sich <strong>der</strong> Adm<strong>in</strong>istrator mit ihrer<br />
Funktionsweise grob vertraut machen. Das betrifft den Aufbau und die Ablage <strong>der</strong> Daten sowie<br />
das zugrundeliegende Kommunikationsmodell. Es gibt immer e<strong>in</strong>e e<strong>in</strong>zige Wurzel “root”<br />
e<strong>in</strong>es Directories. Diese kann später we<strong>der</strong> verschoben noch verän<strong>der</strong>t werden. Unterhalb<br />
von Root kann entwe<strong>der</strong> e<strong>in</strong> Country-Objekt ’c’ o<strong>der</strong> o<strong>der</strong> e<strong>in</strong>e Organisation ’o’ angelegt<br />
werden. <strong>E<strong>in</strong></strong> Country-Objekt muss nicht, darf aber nur e<strong>in</strong>mal existieren. Unterhalb von<br />
Country o<strong>der</strong> Root muss e<strong>in</strong> Organisationsobjekt ’o’ stehen. Davon kann es mehrere geben.<br />
Unterhalb von ’o’ folgen Blattobjekte, die <strong>E<strong>in</strong></strong>träge o<strong>der</strong> Organisationsuntere<strong>in</strong>heiten ’ou’.<br />
<strong>E<strong>in</strong></strong>zelne <strong>E<strong>in</strong></strong>träge werden vielfach durch ihren Common Name ’cn’ bezeichnet.<br />
Alternativ zur beschriebenen Hierarchie hat sich die Bezeichnung durch Doma<strong>in</strong> Components<br />
durchgesetzt. Die Wurzel wird beg<strong>in</strong>nend mit <strong>der</strong> Toplovel-Doma<strong>in</strong> des Doma<strong>in</strong><br />
Name Service bezeichnet, <strong>in</strong> den darunterliegenden Hierachien folgen Second-Level-Doma<strong>in</strong><br />
und vergleichbar mit den Organizational Units Sublevel-Doma<strong>in</strong>-Namen.<br />
Jedes Objekt im Verzeichnis muss e<strong>in</strong>en e<strong>in</strong>deutigen Namen, den “Dist<strong>in</strong>guished Name”<br />
’dn’ haben. Der ’dn’ setzt sich aus den ’dn’ von <strong>der</strong> Wurzel aus zusammen, häufig<br />
wird <strong>der</strong> Common Name zur Benennung verwendet. <strong>E<strong>in</strong></strong>träge <strong>in</strong> e<strong>in</strong>em Objekt werden als<br />
Attribute bezeichnet. <strong>E<strong>in</strong></strong> Attribut ist <strong>der</strong> bereits angesprochene Common Name. Für e<strong>in</strong>e<br />
e<strong>in</strong>fache Benutzerverwaltung benötigt e<strong>in</strong> L<strong>in</strong>ux-Sytem, wenn <strong>der</strong> Common Name den Realnamen<br />
e<strong>in</strong>er Person o<strong>der</strong> Dienstes bezeichnet, noch e<strong>in</strong>en e<strong>in</strong>deutigen Str<strong>in</strong>g, welcher die<br />
User-ID bezeichnet, e<strong>in</strong>e e<strong>in</strong>deutige Benutzer- und Gruppennummer, e<strong>in</strong> Homeverzeichnis,<br />
e<strong>in</strong>e Log<strong>in</strong>shell und eventuell e<strong>in</strong> Passwort. Zusätzliche Daten, wie Telefonnummer, Emailadresse,<br />
persönliche Webseite, Büro und weiteres können gespeichert werden, wenn aus <strong>der</strong><br />
Datenbank auch die Adressbücher <strong>der</strong> Mitarbeiter gefüttert werden sollen.<br />
Ist <strong>der</strong> übergeordnete Conta<strong>in</strong>er für das jeweilige Objekt bereits bestimmt, genügt zur<br />
Angabe auch e<strong>in</strong> “Relative Dist<strong>in</strong>guished Name” ’rdn’. Der Dist<strong>in</strong>guished Name kann mit<br />
dem Primärschlüssel e<strong>in</strong>er relationalen Datenbank verglichen werden.<br />
Je<strong>der</strong> Directory-<strong>E<strong>in</strong></strong>trag beschreibt e<strong>in</strong> Objekt, welches e<strong>in</strong>e Person, e<strong>in</strong>e Verwaltungse<strong>in</strong>heite<br />
o<strong>der</strong> auch e<strong>in</strong> Server, Drucker usw. se<strong>in</strong> kann. Je<strong>der</strong> <strong>E<strong>in</strong></strong>trag hat e<strong>in</strong>en ausgezeichneten<br />
bzw. herausgestellten Namen, den dist<strong>in</strong>guished name abgekürzt dn. <strong>E<strong>in</strong></strong> <strong>E<strong>in</strong></strong>trag kann<br />
e<strong>in</strong>e Reihe weiterer Attribute besitzen, die e<strong>in</strong>en Typ und e<strong>in</strong>en bzw. mehrere Werte haben.<br />
Syntax Bedeutung<br />
b<strong>in</strong> Daten im B<strong>in</strong>ärformat, Bil<strong>der</strong>, Ausführbare Dateien<br />
ces CaseSensitive, Textfel<strong>der</strong><br />
cis CaseInSensitive, Textfel<strong>der</strong><br />
tel Telefonnummer<br />
dn Dist<strong>in</strong>guished Name<br />
Tabelle 13.2: Attribute im LDAP<br />
Auf Basis dieser Attribute s<strong>in</strong>d allgeme<strong>in</strong>e <strong>E<strong>in</strong></strong>tragsschemata def<strong>in</strong>ierbar. Hierbei implementiert<br />
LDAP folgendes Namensmodell: Je<strong>der</strong> ausgezeichnete Name (dn) besteht aus e<strong>in</strong>er<br />
Sequenz von Teilen, die als relativ ausgezeichnete Namen bezeichnet werden. Alle <strong>E<strong>in</strong></strong>träge<br />
s<strong>in</strong>d hierarchisch e<strong>in</strong>geordnet. <strong>E<strong>in</strong></strong> Beispiel e<strong>in</strong>es dn:<br />
cn=Sandra Buchf<strong>in</strong>g, ou=Informatik,o=Universität Freiburg,c=DE.<br />
Diese Informationen bzw. Teilbäume können dann über mehrere Server verteilt se<strong>in</strong>.<br />
Es gibt viele Def<strong>in</strong>itionen, an die man sich halten muss, soll am Ende auch etwas funktionieren.<br />
Bei LDAP werden Objekte mit Eigenschaften verwendet. Jedes Objekt hat zunächst
13.3. HIERARCHISCHE DATENBANK: LDAP 207<br />
Attribute Alias Syntax Beschreibung Beispiel<br />
CommonName cn cis Name e<strong>in</strong>es <strong>E<strong>in</strong></strong>trages<br />
Sandra Buchf<strong>in</strong>k<br />
surname sn cis Nachname<br />
Person<br />
e<strong>in</strong>er Buchf<strong>in</strong>k<br />
TelephoneNumber tel Telefonnummer 01-12345<br />
organizationalUnit ou cis Name e<strong>in</strong>er Abteilung<br />
Informatik<br />
Organization o cis Name <strong>der</strong> Organisa- Universität Freitionburg<br />
Country c cis Name des Landes Deutschland, DE<br />
Owner dn Ausgezeichneter cn=Sandra Buch-<br />
Name des <strong>E<strong>in</strong></strong>f<strong>in</strong>k, o=Universität<br />
tragbesitzers Freiburg,c=DE<br />
Tabelle 13.3: Beispiel<br />
e<strong>in</strong>en e<strong>in</strong>deutigen Namen, an dem es von allen an<strong>der</strong>en unterschieden werden kann (“dist<strong>in</strong>guished<br />
name”, kurz: DN). Die Eigenschaften e<strong>in</strong>es Objekts hängen davon ab, zu welcher<br />
Klasse es gehört (es kann sogar zu mehreren Klassen gehören).<br />
Klassen von Objekten Es s<strong>in</strong>d nun Klassen für Personen def<strong>in</strong>iert. Zu e<strong>in</strong>er Person<br />
(”person”) gehören zw<strong>in</strong>gend objectClass (die Objektklasse selbst), sn (<strong>der</strong> Nachname)<br />
und cn (commonName, etwa: üblicher Name, hier wird üblicherweise Vor- und Nachname<br />
verwendet). Zusätzlich gibt es optionale Attribute, die nicht unbed<strong>in</strong>gt angegeben werden<br />
müssen. Diese s<strong>in</strong>d hier description (beliebige Beschreibung), seeAlso (verweist auf e<strong>in</strong> an<strong>der</strong>es<br />
Objekt), telephoneNumber (Telefonnummer), userPassword (e<strong>in</strong> Password). Da häufig<br />
noch mehr Attribute mit e<strong>in</strong>er Person verknüpft s<strong>in</strong>d, gibt es auch e<strong>in</strong>e Objektklasse organizationalPerson.<br />
Diese hat die gleichen gefor<strong>der</strong>ten Eigenschaften wie Person, aber erlaubt<br />
viele optionale Eigenschaften, wie zum Beispiel Fel<strong>der</strong> <strong>der</strong> Adresse und e<strong>in</strong>e FAX-Nummer.<br />
Es gibt noch mehr Klassen, zum Beispiel newPilotPerson (die als optionale Eigenschaft e<strong>in</strong>e<br />
eMail-Adresse mail e<strong>in</strong>führt) und natürlich Klassen für Organisationen/Firmen, Abteilungen,<br />
Bil<strong>der</strong>, Dokumente, Geräte und so weiter.<br />
Eigenschaften von Klassen Wenn man also irgendwo e<strong>in</strong>e Person im Verzeichnis hat,<br />
ist klar, dass diese e<strong>in</strong> cn haben muss, und e<strong>in</strong>e Telefonnummer haben kann (und dass diese<br />
genau telephoneNumber heißt). Soll e<strong>in</strong> Programm e<strong>in</strong>e eMail-Addresse suchen, muss es nur<br />
nachschauen, ob es e<strong>in</strong> Attribut mail gibt. Es kann eben nicht se<strong>in</strong>, dass diese Eigenschaft<br />
email o<strong>der</strong> an<strong>der</strong>s heißt. mail ist vorgeschrieben, und nichts an<strong>der</strong>es.<br />
An diesem Beispiel kann man zeigen, dass e<strong>in</strong>e natürliche Person zu mehreren Klassen<br />
gehört: person, organizationalPerson und newPilotPerson. <strong>E<strong>in</strong></strong>e weitere Klasse ist top.<br />
Im Pr<strong>in</strong>zip gehört so ziemlich jedes Objekt auch zur Klasse top, die lediglich vorschreibt,<br />
dass die Eigenschaft objectClass gesetzt se<strong>in</strong> muss (was bei allen Personenklassen ohneh<strong>in</strong><br />
gefor<strong>der</strong>t ist).<br />
Durch das Verwenden <strong>der</strong> Klassen def<strong>in</strong>iert man, welche Eigenschaften vorhanden se<strong>in</strong><br />
müssen, und welche vorhanden se<strong>in</strong> können. <strong>E<strong>in</strong></strong>e Person darf zum Beispiel ke<strong>in</strong>e Farbtiefe<br />
haben, e<strong>in</strong> Bild h<strong>in</strong>gegen schon. Verwendet man mehrere Klassen, so muss das entsprechende<br />
Objekt alle von m<strong>in</strong>destens e<strong>in</strong>er Klasse gefor<strong>der</strong>ten Eigenschaften haben, und kann alle<br />
<strong>in</strong>sgesamt erlaubten Eigenschaften haben.
208 KAPITEL 13. RESSOURCENVERWALTUNG<br />
Typen von Eigenschaften Den Eigenschaften s<strong>in</strong>d Typen zugeordnet. Es gibt Typen,<br />
die e<strong>in</strong>e Zeichenkette enthalten, und an<strong>der</strong>e, die e<strong>in</strong>e Telefonnummer enthalten. Diese Typen<br />
def<strong>in</strong>ieren weiterh<strong>in</strong>, wie Werte verglichen (und damit sortiert und gesucht) werden.<br />
Zeichenketten beispielsweise kann man abhängig von Groß- und Kle<strong>in</strong>schreibung vergleichen<br />
o<strong>der</strong> auch nicht. Bei Telefonnummer spielen gewisse Füllzeichen möglicherweise ke<strong>in</strong>e<br />
Rolle. Passwörter h<strong>in</strong>gegen müssen genau übere<strong>in</strong>stimmen.<br />
Es gibt nun also Objekte (die zu bestimmten Klassen gehören). Diese werden nun an<strong>der</strong>en<br />
Objekten untergeordnet (beziehungsweise werden an<strong>der</strong>en Objekte viele zugeordnet,<br />
dies ist die richtige Reihenfolge). Diese baumartige Struktur kann man (mit etwas Phantasie)<br />
auch <strong>in</strong> <strong>der</strong> Realität f<strong>in</strong>den: In Län<strong>der</strong>n gibt es Firmen, <strong>in</strong> Firmen gibt es Abteilungen<br />
und <strong>in</strong> Abteilungen letztlich Personen. So wird das <strong>in</strong> LDAP auch gesehen. Die Baumstruktur<br />
wird hier “Directory Information Tree” genannt, kurz DIT. Es gibt Län<strong>der</strong> (also<br />
Objekte <strong>der</strong> Klasse country [Land]) mit u.A. <strong>der</strong> Eigenschaft c (kurz für country), Firmen<br />
(organisations mit <strong>der</strong> Eigenschaft o), Abteilungen (Organisations <strong>E<strong>in</strong></strong>heit, organisationalUnit<br />
mit <strong>der</strong> Eigenschaft ou). Hierbei enthalten diese Objekte normalerweise viele weitere<br />
Eigenschaften; e<strong>in</strong>e Firma hat zum Beispiel e<strong>in</strong>e Postanschrift.<br />
Schema <strong>E<strong>in</strong></strong> Schema ist e<strong>in</strong>e Sammlung von Strukturdef<strong>in</strong>itionen. Dazu gehören die Beschreibungen<br />
vieler Klassen und <strong>der</strong> verwendeten Typen. Es gibt verschiedene Schemata,<br />
und es ist möglich, eigene zu def<strong>in</strong>ieren (o<strong>der</strong> bestehende zu erweitern) was jedoch nicht <strong>in</strong>teroperabel<br />
mit an<strong>der</strong>en Diensten se<strong>in</strong> muss. Das liegt außerhalb <strong>der</strong> Betrachtungen dieses<br />
Textes.<br />
Der LDAP-Server speichert se<strong>in</strong>e Informationen <strong>in</strong> e<strong>in</strong>er baumartigen Struktur. Diese<br />
wird auch “Directory Information Tree” genannt, kurz DIT.<br />
Root<br />
dn: dc=local<br />
dn: dc=wg,dc=local<br />
rdn: ou=user rdn: ou=group<br />
dn: uid=test01,ou=user,dc=wg,dc=local (rdn: uid=test01)<br />
dn: uid=test02,ou=user,dc=wg,dc=local (rdn: uid=test02)<br />
dn: uid=...<br />
rdn: ou=devices<br />
Abbildung 13.1: Aufbau <strong>der</strong> LDAP-Datenstruktur für die Beispielkonfiguration<br />
Zum Speichern benutzt <strong>der</strong> LDAP-Server Objekte, die er mit Attributen versehen kann.<br />
Dadurch kann man die Struktur flexibel an die eigenen Bedürfnisse anpassen. Das RFC<br />
2256 spezifiziert die Standard-Objekte des LDAP-Servers. Man wird zwar von niemandem<br />
gezwungen, diese Vorgaben auch zu benutzen. Um aber e<strong>in</strong>e möglichst große Konformität<br />
zu erzielen, sollte man diese Vorgaben e<strong>in</strong>halten.
13.4. LDAP PRAKTISCH 209<br />
13.3.4 Das Protokoll<br />
LDAP ist e<strong>in</strong> Kommunikationsprotokoll, das den Zugriff auf und die Aktualisierung von<br />
Directory Informationen regelt. Es ist e<strong>in</strong> offener Industriestandard und e<strong>in</strong>e vere<strong>in</strong>fachte<br />
Alternative zum X.500 Standard. Die <strong>Netzwerk</strong>kommunikation wird mittels TCP/IP standardmäßig<br />
auf Port 389 abgewickelt. Es kann Bestandteil von Browsern, wie z.B. Netscape<br />
se<strong>in</strong>. Ursprünglich wurde die Entwicklung von Netscape vorangetrieben, um den eigenen<br />
Kunden e<strong>in</strong> übergreifendes Directory für Mail- und Webanwendungen anbieten zu können.<br />
Das Protokoll arbeitet im klassischen Client-Server-Modell und verwendet Str<strong>in</strong>gs zur Datendarstellung.<br />
Das Protokoll def<strong>in</strong>iert <strong>in</strong>sgesamt neun Operationen:<br />
1. b<strong>in</strong>d - Verb<strong>in</strong>den mit e<strong>in</strong>em LDAP-Server<br />
2. authenticate - Anmeldung mit e<strong>in</strong>er bestimmten ID, sonst erfolgt e<strong>in</strong>e anonyme B<strong>in</strong>dung<br />
(welche üblicherweise den niedrigsten Privilegienlevel hat)<br />
3. unb<strong>in</strong>d - Verb<strong>in</strong>dung mit dem Server geregelt beenden<br />
4. abandon - Verb<strong>in</strong>dung mit dem Server (ungeregelt) abbrechen<br />
5. add - H<strong>in</strong>zufügen von Objekten und Attributen<br />
6. search - Suchen<br />
7. modify - Än<strong>der</strong>n von Objekten und Attributen<br />
8. compare - Vergleich<br />
9. delete - Löschen von Objekten o<strong>der</strong> Attributen<br />
Die ersten vier Operationen dienen zum Verb<strong>in</strong>den, Abmelden und wechseln des Benutzerlevels.<br />
Mit verschiedenen Benutzerleveln s<strong>in</strong>d üblicherweise verschiedene Zugriffsrechte<br />
verknüpft. Der Datenbank-Adm<strong>in</strong>istrator, <strong>der</strong> mit rootdn <strong>in</strong> <strong>der</strong> Konfigurationsdatei angegeben<br />
wird, hat immer alle Rechte.<br />
LDAP erlaubt die Vergabe von Zugriffsrechten auf bestimmte <strong>E<strong>in</strong></strong>träge und Attribute<br />
se<strong>in</strong>er Datenbasis. ’None’ erteilt ke<strong>in</strong>e Rechte, ’compare’ erlaubt Vergleiche. Es liefert<br />
wahr o<strong>der</strong> falsch für den Passwort-Check zurück, so muss das Passwort zum Vergleich die<br />
Datenbank nie verlassen. ’search’ gestattet das Suchen. ’read’ für Lesen ist die Komb<strong>in</strong>ation<br />
von ’compare’ und ’search’, ’write’ erlaubt das Schreiben und ’delete’ das Löschen von<br />
Attributen und <strong>E<strong>in</strong></strong>trägen.<br />
13.4 LDAP praktisch<br />
13.4.1 Server- und Clientprogramme unter L<strong>in</strong>ux<br />
Es existieren e<strong>in</strong>e ganze Reihe von verfügbaren Produkten, die hierarchische Verzeichnisdienste<br />
nach dem LDAP-Standard def<strong>in</strong>ieren. Wie bei fast allen offenen Standards existiert<br />
mit dem OpenLDAP e<strong>in</strong>e freie Implementierung, welche unter <strong>der</strong> GPL zur Verfügung steht.<br />
Der Daemon unter L<strong>in</strong>ux heisst slapd und f<strong>in</strong>det sich je nach Distribution unterhalb<br />
des Diensteverzeichnisses /usr/sb<strong>in</strong>. Die zentrale Konfigurationsdatei des LDAP-Servers<br />
slapd.conf bef<strong>in</strong>det sich üblicherweise unterhalb von /etc/openldap. Die Datenbankdateien
210 KAPITEL 13. RESSOURCENVERWALTUNG<br />
landen üblicherweise unterhalb von /var/lib/ldap. Dieses Verzeichnis wird <strong>in</strong> <strong>der</strong> slapd.conf<br />
spezifiziert und kann dort entsprechend geän<strong>der</strong>t werden.<br />
Mit dem LDAP-Paket werden e<strong>in</strong>e Reihe von Userspace-Utilities mit<strong>in</strong>stalliert. Die beiden<br />
Programme slapadd und slapcat eignen sich für direkte Transformation des LDIF-<br />
Formats <strong>in</strong> das Datenbankformat und umgekehrt. Dazu wird ke<strong>in</strong> laufen<strong>der</strong> Server benötigt.<br />
Für Operationen auf <strong>der</strong> LDAP-Datenbank f<strong>in</strong>den sich die Werkzeuge ldapsearch, ldapadd,<br />
ldapdelete und ldapmodify. Diese implementieren die im Abschnitt zum Protokoll<br />
genannten Operationen.<br />
13.4.2 <strong>E<strong>in</strong></strong>e e<strong>in</strong>fache Beispielkonfiguration<br />
Damit e<strong>in</strong> erster kle<strong>in</strong>er <strong>E<strong>in</strong></strong>druck gewonnen werden kann wie LDAP funktioniert, folgt e<strong>in</strong><br />
e<strong>in</strong>faches Beispiel für e<strong>in</strong>e kle<strong>in</strong>e Benutzerverwaltung. Dazu wird e<strong>in</strong> LDAP-Server auf <strong>der</strong><br />
Masch<strong>in</strong>e e<strong>in</strong>gerichtet, auf <strong>der</strong> sich die beiden Benutzer test01 und test02 anmelden sollen.<br />
Dieses Setup erfor<strong>der</strong>t ke<strong>in</strong>e verschlüsselten Verb<strong>in</strong>dungen, da die gesamte Kommunikation<br />
über das Loopback-Interface 1 abgewickelt wird.<br />
Die Serverkonfigurationsdatei /etc/openldap/slapd.conf könnte wie folgt aussehen:<br />
# LDAP Server Konfigurationsdatei: /etc/openldap/slapd.conf<br />
<strong>in</strong>clude /etc/openldap/schema/core.schema<br />
<strong>in</strong>clude /etc/openldap/schema/cos<strong>in</strong>e.schema<br />
<strong>in</strong>clude /etc/openldap/schema/nis.schema<br />
pidfile /var/run/slapd/slapd.pid<br />
argsfile /var/run/slapd/slapd.args<br />
access to attr=userpassword<br />
by anonymous auth<br />
by self write<br />
access to attr=objectclass,entry,mail,cn,sn,log<strong>in</strong>Shell,userPassword<br />
by self write<br />
by * read<br />
access to attr=objectclass,entry,uid,mail,cn,sn,uidNumber,gidNumber,\<br />
homeDirectory,log<strong>in</strong>Shell<br />
by * read<br />
access to *<br />
by users read<br />
by anonymous auth<br />
database ldbm<br />
directory /var/lib/ldap<br />
suffix "dc=wg,dc=local"<br />
rootdn "cn=Manager,dc=wg,dc=local"<br />
rootpw nicht-weitersagen<br />
Nachdem die Konfigurationsdatei angelegt, die Existenz des Datenverzeichnisses und<br />
dessen Rechte überrüft wurden, kann <strong>der</strong> Dienst e<strong>in</strong>fach e<strong>in</strong>mal gestartet werden:<br />
1 Interfacename: lo, IP-Adresse: 127.0.0.1
13.4. LDAP PRAKTISCH 211<br />
/usr/lib/openldap/slapd -f /etc/openldap/slapd.conf -h ldap://127.0.0.1:389<br />
-u ldap -g ldap<br />
In <strong>der</strong> Log-Datei /var/log/message kann <strong>der</strong> Erfolg <strong>der</strong> Aktion überprüft werden. Hier<br />
landen Meldungen zu Fehlern <strong>in</strong> <strong>der</strong> Konfigurationsdatei.<br />
Die Datei für die <strong>E<strong>in</strong></strong>richtung <strong>der</strong> Clientkommandos und das PAM-Modul:<br />
/etc/openldap/ldap.conf sollte die folgenden Zeilen enthalten:<br />
# LDAP Client Konfigurationsdatei: /etc/openldap/ldap.conf<br />
BASE dc=wg,dc=local<br />
URI ldap://127.0.0.1:389<br />
Nun verb<strong>in</strong>det sich das Suchkommando ldapsearch -x schon mit <strong>der</strong> Datenbank. Es<br />
liefert jedoch noch ke<strong>in</strong>e Daten zurück, solange die Datenbank noch nicht gefüllt wurde. Am<br />
schnellsten geht die Bestückung <strong>der</strong> Datenbank durch das Anlegen e<strong>in</strong>er Datei im LDAP-<br />
Austauschformat LDIF (Lightwight Directory Interchange Format). Die Objekte werden<br />
von <strong>der</strong> Wurzel aus folgend def<strong>in</strong>iert und e<strong>in</strong>getragen:<br />
# LDIF-Datei zur Def<strong>in</strong>ition von zwei Beispielnutzern: user.ldif<br />
dn: dc=wg, dc=local<br />
objectClass: organization<br />
o: wg<br />
dn: ou=user, dc=wg, dc=local<br />
ou: user<br />
objectclass: organizationalUnit<br />
dn: ou=group, dc=wg, dc=local<br />
ou: group<br />
objectclass: organizationalUnit<br />
dn: cn=user, ou=group, dc=wg, dc=local<br />
objectClass: posixGroup<br />
objectClass: top<br />
cn: user<br />
userPassword: crypt<br />
gidNumber: 100<br />
dn: uid=test01, ou=user, dc=wg, dc=local<br />
uid: test02<br />
cn: Test-User Nr. 1<br />
sn: Test-User 1<br />
objectclass: person<br />
objectclass: posixAccount<br />
objectclass: shadowAccount<br />
objectclass: top<br />
userPassword: secret<br />
shadowLastChange: 11472<br />
shadowMax: 99999<br />
shadowWarn<strong>in</strong>g: 7<br />
uidNumber: 1001
212 KAPITEL 13. RESSOURCENVERWALTUNG<br />
gidNumber: 100<br />
homeDirectory: /home/test02<br />
log<strong>in</strong>Shell: /b<strong>in</strong>/ksh<br />
dn: uid=test02, ou=user, dc=wg, dc=local<br />
uid: test02<br />
cn: Test-User Nr. 2<br />
sn: Test-User 2<br />
objectclass: person<br />
objectclass: posixAccount<br />
objectclass: shadowAccount<br />
objectclass: top<br />
userPassword: topsecret<br />
shadowLastChange: 11472<br />
shadowMax: 99999<br />
shadowWarn<strong>in</strong>g: 7<br />
uidNumber: 1002<br />
gidNumber: 100<br />
homeDirectory: /home/test02<br />
log<strong>in</strong>Shell: /b<strong>in</strong>/bash<br />
Die Übertragung des LDIFs <strong>in</strong> die laufende Datenbank geschieht mittels des Kommandos:<br />
ldapadd -c -x -D ”cn=Manager,dc=wg,dc=local” -W -f user.ldif. Hier f<strong>in</strong>det<br />
man den Datenbank-Manager-Account wie<strong>der</strong>, <strong>der</strong> <strong>in</strong> <strong>der</strong> Serverkonfigurationsdatei angegeben<br />
wurde. Beim Aufruf des Kommandos folgt die Frage nach dem zugehörigen Passwort.<br />
Nun liefert ldapsearch -x bereits e<strong>in</strong>iges mehr. Die Daten, die zu sehen s<strong>in</strong>d, s<strong>in</strong>d<br />
diejenigen, welche für den anonymen Zugriff freigeben s<strong>in</strong>d. Soll <strong>der</strong> vollständige Datensatz<br />
angezeigt werden, gibt man die Datenbank-Manager-Credentials mit: ldapsearch -x -<br />
D ”cn=Manager,dc=wg,dc=local” -w nicht-weitersagen. Dabei fällt auf, dass die<br />
Ausgabe im bereits bekannten LDIF-Format erfolgt.<br />
Der nächste Schritt ist nun die <strong>E<strong>in</strong></strong>richtung <strong>der</strong> PAM-Authentifizierung gegen die frisch<br />
e<strong>in</strong>gerichtete LDAP-Datenbank. Dazu wird als Beispiel das PAM-Modul für den SSH-Log<strong>in</strong><br />
angepasst:<br />
# /etc/pam.d/sshd<br />
auth required pam_nolog<strong>in</strong>.so<br />
auth sufficient pam_ldap.so<br />
auth required pam_unix2.so use_first_pass # set_secrpc<br />
account required pam_unix2.so<br />
password required pam_pwcheck.so<br />
password required pam_ldap.so use_authtok<br />
password required pam_unix2.so use_first_pass use_authtok<br />
session required pam_unix2.so<br />
session required pam_limits.so<br />
session required pam_env.so<br />
session optional pam_mail.so<br />
Weiterh<strong>in</strong> muss nun noch dem Name Service Switch die alternative zu den klassischen<br />
Dateien passwd und shadow mitgeteilt werden:<br />
# /etc/nsswitch.conf
13.4. LDAP PRAKTISCH 213<br />
[ ... ]<br />
passwd: files ldap<br />
group: files ldap<br />
[ ... ]<br />
Anschliessend benötigt <strong>der</strong> Name Service Cach<strong>in</strong>g Daemon (nscd) eventuell noch e<strong>in</strong>en<br />
Neustart und e<strong>in</strong> e<strong>in</strong>facher Test mit e<strong>in</strong>em SSH-Log<strong>in</strong>-Versuch kann erfolgen. Dieses sollte<br />
nun funktionieren, jedoch steht noch ke<strong>in</strong> Homeverzeichnis zur Verfügung.<br />
Die Liste <strong>der</strong> mittels LDAP zur Verfügung gestellten Benutzerkennungen kann mittels<br />
getent angezeigt werden. Diese <strong>E<strong>in</strong></strong>träge ersche<strong>in</strong>en nach den Daten aus <strong>der</strong> /etc/passwd.<br />
13.4.3 Absicherung durch SSL<br />
Wenn die Datenkommunikation über das Loopback-Interface direkt auf <strong>der</strong> Masch<strong>in</strong>e stattf<strong>in</strong>det,<br />
ist die Sicherheit <strong>der</strong> übertragenen Daten ausreichend gewährleistet. An<strong>der</strong>s sieht<br />
es aus, wenn LDAP-Pakete über e<strong>in</strong> Ethernet gehen. Deshalb kann e<strong>in</strong>e LDAP-Verb<strong>in</strong>dung<br />
analog zu e<strong>in</strong>er HTTP-Verb<strong>in</strong>dung den Secure-Socket-Layer (SSL) verwenden. Wegen <strong>der</strong><br />
notwendigen Zertifikats- und Schlüsselerstellung bzw. -verwaltung gestaltet sich dieses etwas<br />
aufwändiger.<br />
Der schnellste Weg g<strong>in</strong>ge über die Generierung e<strong>in</strong>es selbstunterschriebenen Serverzertifikats.<br />
Da jedoch e<strong>in</strong>e Reihe von Fehlern auftreten können und LDAP selbstunterschriebene<br />
Zertifikate bemängelt, wird von diesem Weg abgeraten.<br />
Besitzt man bereits e<strong>in</strong> von e<strong>in</strong>er Certificate Authority (CA) unterschriebenes Serverzertifikat,<br />
kann man den nächsten Schritt überspr<strong>in</strong>gen. Da diese Zertifikate Geld kosten<br />
und <strong>in</strong> regelmäßigen Abständen verlängert werden müssen, besitzen meistens nur Betreiber<br />
großer Webserver solche. Das OpenSSL-Paket liefert die Lösung für dieses Problem mit -<br />
e<strong>in</strong> Shell-Skript führt durch die <strong>E<strong>in</strong></strong>richtung e<strong>in</strong>er eigenen CA.<br />
Dazu wird e<strong>in</strong> eigenes Verzeichnis angelegt, z.B. /etc/LocalCA. In diesem Verzeichnis<br />
startet <strong>der</strong> Aufruf von /usr/share/ssl/misc/CA.sh -newca (<strong>der</strong> angegebene absolute<br />
Pfad kann je nach Distribution variieren) die <strong>E<strong>in</strong></strong>richtung <strong>der</strong> CA:<br />
CA certificate filename (or enter to create)<br />
Mak<strong>in</strong>g CA certificate ...<br />
Us<strong>in</strong>g configuration from /etc/ssl/openssl.cnf<br />
Generat<strong>in</strong>g a 1024 bit RSA private key<br />
...........++++++<br />
...........................................................++++++<br />
writ<strong>in</strong>g new private key to ’./demoCA/private/./cakey.pem’<br />
Enter PEM pass phrase:<br />
Verify<strong>in</strong>g password - Enter PEM pass phrase:<br />
-----<br />
You are about to be asked to enter <strong>in</strong>formation that will be <strong>in</strong>corporated<br />
<strong>in</strong>to your certificate request.<br />
What you are about to enter is what is called a Dist<strong>in</strong>guished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter ’.’, the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [AU]:DE
214 KAPITEL 13. RESSOURCENVERWALTUNG<br />
State or Prov<strong>in</strong>ce Name (full name) [Some-State]:BaWue<br />
Locality Name (eg, city) []:Freiburg<br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]:WG<br />
Organizational Unit Name (eg, section) []:WG-LDAP<br />
Common Name (eg, YOUR name) []:wg.local<br />
Email Address []:.<br />
Für den Date<strong>in</strong>amen kann mit Enter e<strong>in</strong>fach e<strong>in</strong> Defaultwert übernommen werden, alle<br />
an<strong>der</strong>en Abfragen können wie oben gezeigt ausgefüllt und mit entsprechenden Werten<br />
übernommen werden. Das Passwort zur Absicherung <strong>der</strong> Schlüssel sollte sich für später<br />
gemerkt werden. Im def<strong>in</strong>ierten Verzeichnis f<strong>in</strong>den sich unter demoCA/cacert.pem und demoCA/private/cakey.pem<br />
das Zertifikat unserer CA und <strong>der</strong> private Schlüssel.<br />
Im nächsten Schritt wird das Serverzertifikat generiert: openssl req -newkey rsa:1024<br />
-nodes -keyout newreq.pem -out newreq.pem<br />
Us<strong>in</strong>g configuration from /etc/ssl/openssl.cnf<br />
Generat<strong>in</strong>g a 1024 bit RSA private key<br />
............................++++++<br />
..........................................................++++++<br />
writ<strong>in</strong>g new private key to ’newreq.pem’<br />
-----<br />
You are about to be asked to enter <strong>in</strong>formation that will be <strong>in</strong>corporated<br />
<strong>in</strong>to your certificate request.<br />
What you are about to enter is what is called a Dist<strong>in</strong>guished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter ’.’, the field will be left blank.<br />
-----<br />
Country Name (2 letter code) [AU]:DE<br />
State or Prov<strong>in</strong>ce Name (full name) [Some-State]:BaWue<br />
Locality Name (eg, city) []:Freiburg<br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]:WG<br />
Organizational Unit Name (eg, section) []:WG-LDAP<br />
Common Name (eg, YOUR name) []:wg.local<br />
Email Address []:.<br />
Please enter the follow<strong>in</strong>g ’extra’ attributes<br />
to be sent with your certificate request<br />
A challenge password []:<br />
An optional company name []:.<br />
Im großen und ganzen wie<strong>der</strong>holen sich die Abfragen <strong>der</strong> CA-Erstellung. Die zusätzlichen<br />
Attribute können leer gelassen werden. Dieses geschieht durch die Angabe e<strong>in</strong>es Punktes<br />
”.”. Als Ergebnis existiert nun e<strong>in</strong>e Datei newreq.pem im aktuellen Verzeichnis.<br />
Nun muss <strong>der</strong> neuerzeugte Schlüssel noch von unserer CA signiert werden. Hierzu kommt<br />
das bereits von <strong>der</strong> CA-Erstellung bekannte Skript zum <strong>E<strong>in</strong></strong>satz:<br />
/usr/share/ssl/misc/CA.sh -sign<br />
Us<strong>in</strong>g configuration from /etc/ssl/openssl.cnf<br />
Enter PEM pass phrase:<br />
Check that the request matches the signature
13.4. LDAP PRAKTISCH 215<br />
Signature ok<br />
The Subjects Dist<strong>in</strong>guished Name is as follows<br />
countryName :PRINTABLE:’DE’<br />
stateOrProv<strong>in</strong>ceName :PRINTABLE:’BaWue’<br />
localityName :PRINTABLE:’Freiburg’<br />
organizationName :PRINTABLE:’WG’<br />
organizationalUnitName:PRINTABLE:’WG-LDAP’<br />
commonName :PRINTABLE:’wg.local’<br />
Certificate is to be certified until Jun 16 09:07:05 2004 GMT (365 days)<br />
Sign the certificate? [y/n]:y<br />
1 out of 1 certificate requests certified, commit? [y/n]y<br />
Write out database with 1 new entries<br />
Data Base Updated<br />
Certificate:<br />
Data:<br />
Version: 3 (0x2)<br />
Serial Number: 1 (0x1)<br />
Signature Algorithm: md5WithRSAEncryption<br />
Issuer: C=DE, ST=BaWue, L=Freiburg, O=WG, OU=WG-LDAP, CN=wg.local<br />
Validity<br />
Not Before: Jun 17 09:07:05 2003 GMT<br />
Not After : Jun 16 09:07:05 2004 GMT<br />
Subject: C=DE, ST=BaWue, L=Freiburg, O=WG, OU=WG-LDAP, CN=wg.local<br />
Subject Public Key Info:<br />
Public Key Algorithm: rsaEncryption<br />
RSA Public Key: (1024 bit)<br />
Modulus (1024 bit):<br />
00:a4:03:ef:1b:5d:20:2b:bd:03:f7:ce:9e:5a:f2:<br />
f4:58:9a:f1:7f:9c:20:fc:ab:a7:b6:b7:41:4c:7f:<br />
14:e8:79:20:ba:1c:c6:1a:26:ad:d1:28:6e:60:99:<br />
c7:99:1f:3d:7c:9c:77:6a:f9:5a:63:f7:b1:e7:94:<br />
dc:10:66:8b:a6:8f:11:4d:17:7b:98:85:ce:a4:bc:<br />
e9:1c:24:f8:ee:eb:3e:c7:50:7f:68:53:be:b5:7a:<br />
e8:cb:d3:db:34:31:eb:04:67:96:8c:e5:6c:d0:7b:<br />
e7:cb:21:0a:a3:97:7c:e3:9c:73:53:1d:8e:c1:6d:<br />
61:58:9c:c6:f5:df:94:f9:63<br />
Exponent: 65537 (0x10001)<br />
X509v3 extensions:<br />
X509v3 Basic Constra<strong>in</strong>ts:<br />
CA:FALSE<br />
Netscape Comment:<br />
OpenSSL Generated Certificate<br />
X509v3 Subject Key Identifier:<br />
95:5F:39:05:C4:99:9A:FC:83:26:B2:F8:8E:2E:55:CC:D6:65:C2:9F<br />
X509v3 Authority Key Identifier:<br />
keyid:DC:B2:AA:81:3C:96:A4:1D:8A:8C:BE:A8:79:85:62:22:BF: \<br />
F1:3B:FF
216 KAPITEL 13. RESSOURCENVERWALTUNG<br />
DirName:/C=DE/ST=BaWue/L=Freiburg/O=WG/OU=WG-LDAP/CN=wg.\<br />
local serial:00<br />
Signature Algorithm: md5WithRSAEncryption<br />
64:2f:46:48:e2:2b:e9:d4:99:47:5e:35:69:d2:1c:8f:33:c5:<br />
[ ... e<strong>in</strong>ige weitere Zeilen ... ]<br />
7c:9f:b2:ee:da:dc:26:fc:08:6f:2e:e6:07:4c:72:b0:88:89:<br />
d8:3a<br />
-----BEGIN CERTIFICATE-----<br />
MIIDJTCCAo6gAwIBAgIBATANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJERTEO<br />
MAwGA1UECBMFQmFXdWUxETAPBgNVBAcTCEZyZWlidXJnMQswCQYDVQQKEwJXRzEQ<br />
[ ... etliche Zeilen ... ]<br />
1qZZj7c5u5UJHrngC/fRUr5nCgI0fJ+y7trcJvwIby7mB0xysIiJ2Do=<br />
-----END CERTIFICATE-----<br />
Signed certificate is <strong>in</strong> newcert.pem<br />
Damit liegt nun mit newcert.pem das Server Zertifikat unterschrieben von <strong>der</strong> eigenen CA<br />
mit dem privaten Schlüssel newreq.pem vor. Nun ist alles soweit vorbereitet und das Zertifikat<br />
kann <strong>in</strong> das entsprechende Verzeichnis für den Zugriff des LDAP-Servers verschoben<br />
werden.<br />
Dazu wird das Verzeichnis /etc/openldap/certificates erzeugt und die Zertifikate dort<br />
h<strong>in</strong>e<strong>in</strong>kopiert o<strong>der</strong> -bewegt.<br />
cp demoCA/cacert.pem /etc/openldap/certificates/cacert.pem<br />
mv newcert.pem /etc/openldap/certificates/servercrt.pem<br />
mv newreq.pem /etc/openldap/certificates/serverkey.pem<br />
chmod 400 /etc/openldap/certificates/serverkey.pem<br />
chown -R ldap.ldap /etc/openldap/certificates<br />
Das letzte Kommando übergibt dem LDAP-Nutzer die Rechte für das Verzeichnis, da<br />
sonst <strong>der</strong> Serverschlüssel vom LDAP-Daemon nicht gelesen werden kann. In e<strong>in</strong>em solchen<br />
Fall öffnet <strong>der</strong> Server ke<strong>in</strong>en SSL-Port und h<strong>in</strong>terläßt e<strong>in</strong>e Fehlermeldung <strong>in</strong> <strong>der</strong> Log-Datei.<br />
Nun müssen noch drei Zeilen am Anfang <strong>der</strong> Server-Konfigurationsdatei slapd.conf e<strong>in</strong>gefügt<br />
werden:<br />
TLSCertificateFile /etc/openldap/certificates/servercrt.pem<br />
TLSCertificateKeyFile /etc/openldap/certificates/serverkey.pem<br />
TLSCACertificateFile /etc/openldap/certificates/cacert.pem<br />
Der Aufruf des LDAP-Daemon sieht nun etwas an<strong>der</strong>s aus: /usr/lib/openldap/slapd<br />
-f /etc/openldap/slapd.conf -h ldaps://10.8.4.254:636 -u ldap -g ldap<br />
Zum e<strong>in</strong>en wird mittels ldaps://10.8.4.254:636 das abgesicherte Protokoll gewählt und<br />
zum an<strong>der</strong>en kann nun <strong>der</strong> Server für die netzweite Benutzung zur Verfügung gestellt werden.<br />
Damit wie e<strong>in</strong>gangs gezeigt die LDAP-Client-Programme wie<strong>der</strong> bequem funktionieren,<br />
wird e<strong>in</strong>e Anpassung <strong>der</strong> ldap.conf erfor<strong>der</strong>lich:<br />
BASE ou=user,dc=wg,dc=local<br />
URI ldaps://10.8.4.254:636<br />
SASL_SECPROPS noactive<br />
TLS hard<br />
TLS_REQCERT allow
13.4. LDAP PRAKTISCH 217<br />
Nun liefert <strong>der</strong> Aufruf <strong>der</strong> Kommandos ldapsearch -x o<strong>der</strong> getent passwd wie<strong>der</strong> die<br />
e<strong>in</strong>gangs gezeigten Ausgaben. Dabei beschränkt sich dieses nicht mehr auf den Server selbst,<br />
son<strong>der</strong>n kann von je<strong>der</strong> beliebigen Masch<strong>in</strong>e im <strong>Netzwerk</strong> geschehen, wenn die Dateien<br />
ldap.conf und nsswitch.conf entsprechend e<strong>in</strong>gerichtet wurden.
218 KAPITEL 13. RESSOURCENVERWALTUNG
Kapitel 14<br />
Drucken im Netz<br />
14.1 <strong>E<strong>in</strong></strong>leitung<br />
Zum Drucken unter <strong>Unix</strong> gibt es verschiedene Ans”atze:<br />
• BSD-System<br />
• System V<br />
• CUPS<br />
Das BSD-System ist historisch gesehen das ”alteste und war lange bei SUN-Systemen<br />
im <strong>E<strong>in</strong></strong>satz. Das System V Drucksystem sollte mehr den Bed”urfnisse grosser Unternehmen<br />
gerecht werden, ist aber sehr kompliziert. Cups (Common UNIX Pr<strong>in</strong>t<strong>in</strong>g System) versucht<br />
die beiden Ans”atze zu verb<strong>in</strong>den und implementiert das Internet Pr<strong>in</strong>t<strong>in</strong>g Protocol, das<br />
als neuer Standard entwickelt wurde.<br />
14.1.1 Anfor<strong>der</strong>ungen<br />
Folgende Anfor<strong>der</strong>ungen werden an e<strong>in</strong> Drucksystem gestellt? Zum e<strong>in</strong>en sollten alle lokal<br />
anschließbaren Drucker funktionieren:<br />
• USB<br />
• Parallel<br />
• Seriell<br />
• Irda<br />
• Bluetooth<br />
Zum an<strong>der</strong>en sollten alle Drucker im Netz verwendbar se<strong>in</strong>:<br />
• Ethernet-Drucker<br />
• Lokale Drucker an an<strong>der</strong>en LINUX/UNIX/MAC-Systemen<br />
• Lokale Drucker an W<strong>in</strong>dows-Systemen<br />
Desweitern sollte e<strong>in</strong> Drucker m”oglichst viele Dateiformate annehmen und direkt verarbeiten<br />
k”onnen. Hier besteht e<strong>in</strong> wesentlicher Unterschied zu MS-W<strong>in</strong>dows-Systemen. Dort<br />
gibt es nur das Programm pr<strong>in</strong>t im Kommandomodus, das direkt Textdateien ausdruckt.<br />
Das Kommando lpr unter L<strong>in</strong>ux war urspr”unglich auch nur f”ur Textdateien ausgelegt,<br />
wurde aber durch Erweiterung um Filter flexibel. (s. Kap. 14.2.4)<br />
219
220 KAPITEL 14. DRUCKEN IM NETZ<br />
14.1.2 Grundlagen<br />
Das L<strong>in</strong>uxdrucksystem basiert auf e<strong>in</strong>em Filtermechanismus, an dessen Anfang das Dokument,<br />
am Ende das Device (z. B. /dev/lp0 = parallele Schnittstelle) steht.<br />
Das Druckkommando ist lpr (L<strong>in</strong>e Pr<strong>in</strong>ter). Mit lpr textdatei wird e<strong>in</strong>e Textdatei<br />
auf den Standarddrucker gedruckt. Mit export PRINTER=color wird <strong>der</strong> Standarddrucker<br />
auf color gesetzt. Falls man e<strong>in</strong>en an<strong>der</strong>en als den Standarddrucker verwenden möchte,<br />
kann kann man den gewünschten Drucker beim Aufruf mitangeben: lpr -Pdruckername<br />
textdatei<br />
Aber was genau passiert nach e<strong>in</strong>em solchen Aufruf? Beim Aufruf von lpr werden die<br />
angegebenen Optionen <strong>in</strong>terpretiert und angewendet. Anschliessend sorgt lpr dafür, dass<br />
die Datei <strong>in</strong> das Spoolverzeichnis des angegebenen Druckers geschickt wird. Der Spooler<br />
(früher lpd, heute meist LPRng nimmt den Druckauftrag entgegen und gibt e<strong>in</strong>en Druckjob<br />
aus. In diesem Prozess werden die Ausgabeformate <strong>der</strong> jeweiligen Anwendung durch die<br />
Filter <strong>in</strong> e<strong>in</strong> Druckformat umgewandelt. Welches Druckformat <strong>der</strong> Drucker verwendet geht<br />
aus <strong>der</strong> PPD-Datei (PostScript Pr<strong>in</strong>ter Description) hervor. Die PPD-Datei ist e<strong>in</strong>e Textdatei,<br />
<strong>in</strong> <strong>der</strong> die anzuwendenden Filter gelistet s<strong>in</strong>d. Die PPD-Dateien werden meist schon<br />
beim Installieren des Betriebssystems zur Verfügung gestellt. Auch CUPS stellt e<strong>in</strong>e Reihe<br />
von PPD-Dateien zur Verfügung. Die Arbeit <strong>der</strong> Filter besteht dar<strong>in</strong>, das Ausgabeformat<br />
automatisch zu erkennen und e<strong>in</strong> geeignetes Konvertierungsprogramm aufzurufen, um die<br />
Datei <strong>in</strong> PostScript umzuwandeln.<br />
Nachdem <strong>der</strong> Spooler den Druckauftrag entgegengenommen hat und die Filter die Datei<br />
<strong>in</strong> das Druckformat umgewandelt haben, bef<strong>in</strong>det sich <strong>der</strong> Druckjob <strong>in</strong> <strong>der</strong> Warteschlage,<br />
<strong>der</strong> sogenannten Queue. Mit dem Befehl lpq kann man sich alle Druckjobs ausgeben lassen.<br />
Der Drucker bekommt die Druckjobs aus <strong>der</strong> Queue und druckt den PostScript-Code.<br />
Hierzu bedarf es e<strong>in</strong>es Raster-Image-Prozessors (RIP), <strong>der</strong> für die Ausgabe des PostScript-<br />
Codes sorgt. Bei PostScript-fähigen Druckern ist <strong>der</strong> RIP im Drucker <strong>in</strong>tegriert, bei nicht-<br />
PostScript-kompatiblen Druckern wird e<strong>in</strong> Post-Script-Interpreter benötigt, <strong>der</strong> aus den<br />
PostScript-Informationen e<strong>in</strong> Datenformat erzeugt, das vom jeweiligen Drucker verstanden<br />
wird. Dieser Interpreter wird durch den druckerspezifischen Treiber zur Verfügung gestellt.<br />
Die Funktionsweise des Treibers geht aber natürlich über das Erzeugen des richtigen Datenformates<br />
weit h<strong>in</strong>aus. Aufgabe des Treibers ist es, die zu druckende Datei mit all den<br />
Informationen zu ergänzen, die für die optimale Nutzung <strong>der</strong> Hardware nötig s<strong>in</strong>d.<br />
Diese Beschreibung <strong>der</strong> Funktionsweise des Drucksystems ist natürlich stark vere<strong>in</strong>facht.<br />
Anhand <strong>der</strong> genaueren Betrachtung des CUPS (Common <strong>Unix</strong> Pr<strong>in</strong>t System) werden<br />
die Zusammenhänge detailliert beschrieben werden. Unter den verschiedenen Systemen<br />
zur Konfiguration und Adm<strong>in</strong>istration des Drucksystems unter L<strong>in</strong>ux wird das CUPS am<br />
häufigsten verwendet. Es eignet sich sowohl für die Konfiguration von <strong>E<strong>in</strong></strong>zelplatz Rechnern/Druckern,<br />
als auch für komplizierte Systeme im <strong>Netzwerk</strong>.<br />
14.2 CUPS<br />
Im CUPS (Common <strong>Unix</strong> Pr<strong>in</strong>t<strong>in</strong>g System) übernimmt <strong>der</strong> cupsd die Aufgaben des lpd:<br />
Annehmen <strong>der</strong> Druckaufträge, ggf. Weiterleiten an die entsprechenden Filter, <strong>E<strong>in</strong></strong>reihen <strong>in</strong><br />
die Warteschlage und Aufruf des passenden Backends, das die fertigen Jobs <strong>in</strong> passen<strong>der</strong><br />
Form an den Drucker gibt. Der cupsd implementiert den neuen Standard IPP (Internet<br />
Pr<strong>in</strong>t<strong>in</strong>g Protocol) und stellt somit folgende zusätzliche Funktionalität zur Verfügung:<br />
• Authentifizierung von Benutzern
14.2. CUPS 221<br />
• Verschlüsselung <strong>der</strong> Druckdaten bei <strong>der</strong> Übertragung<br />
• Bekanntgabe verfügbarer Drucker im Netz<br />
IPP ist e<strong>in</strong> Protokoll <strong>der</strong> Anwendungsschicht und kann für verteiltes Drucken im Interund<br />
Intranet verwendet werden. Das Protokoll def<strong>in</strong>iert die Interaktion zwischen CUPS-<br />
Server und -Client und ermöglicht dem Client Abfragen von Drucker<strong>in</strong>formationen.<br />
14.2.1 Client-Server-Architektur<br />
Im CUPS ist je<strong>der</strong> Rechner, an den e<strong>in</strong> Drucker angeschlossen ist, e<strong>in</strong> Server. Rechner, die<br />
entfernte Drucker nutzen wollen, s<strong>in</strong>d Clients. <strong>E<strong>in</strong></strong> Standalone-Rechner, an dem e<strong>in</strong> Drucker<br />
angeschlossen ist, <strong>der</strong> mit CUPS verwaltet wird, ist sozusagen e<strong>in</strong> Client, <strong>der</strong> se<strong>in</strong> eigener<br />
Server ist.<br />
Je<strong>der</strong> Server ist selbst für die Aufbereitung <strong>der</strong> Druckjobs zuständig, d.h. je<strong>der</strong> Server<br />
muss sowohl die für das Druckformat des Druckers nötigen Filter, als auch den entsprechenden<br />
Treiber selber zur Verfügung stellen. Sämtliche gerätespezifischen Informationen gehen<br />
aus <strong>der</strong> PPD-Datei hervor (PostScript Pr<strong>in</strong>ter Description), die mit dem Druckertreiber<br />
mitgeliefert wird.<br />
Durch die Verwendung des IPP, lässt sich <strong>der</strong> CUPS Dämon wie e<strong>in</strong> Webserver ansprechen.<br />
CUPS-Rechner kommunizieren über den IPP-Port 631. Der Zugriff auf das Web<strong>in</strong>terface<br />
erfolgt folglich über den Browser durch den Aufrufhttp://localhost:631/. An diesen<br />
Port werden nicht nur die Druckdaten geschickt, son<strong>der</strong>n auch viele weitere Informationen.<br />
Da IPP auf HTTP 1.1 beruht, ist die Konfigurationsdatei /etc/cups/cupsd.conf <strong>der</strong><br />
httpd.conf sehr ähnlich. Die wichtigsten <strong>E<strong>in</strong></strong>stellungen werden <strong>in</strong> Kapitel 14.2.5 erläutert.<br />
<strong>E<strong>in</strong></strong>e weitere Beson<strong>der</strong>heit von CUPS s<strong>in</strong>d die Backends. Sie sorgen für den Versand von<br />
Druckdaten zu den Ausagbegeräten o<strong>der</strong> an<strong>der</strong>en Servern. Die CUPS-Backends ermöglichen<br />
die Verb<strong>in</strong>dung über verschiedene Schnittstellen und Protokolle mit dem Server. Für jedes<br />
Protokoll (parallel, seriell, USB o<strong>der</strong> Neztwerk) ist e<strong>in</strong> eigenes Backend zuständig. Die<br />
CUPS-Backends erlauben so, Druckjobs an alle herkömmlichen Drucker zu schicken.<br />
14.2.2 IPP<br />
Abbildung 14.1: Cupsdiagramm<br />
IPP ist e<strong>in</strong> Protokoll <strong>der</strong> Anwendunsschicht und wird <strong>in</strong> erster L<strong>in</strong>ie für verteiltes Drucken<br />
im Netz verwendet. Das Protokoll def<strong>in</strong>iert die Interaktion zwischen IPP-Client und IPP-<br />
Server, d.h. es wird def<strong>in</strong>iert, wie die Daten für die Steuerung des Druckvorgangs verwendet<br />
werden, wie die Daten kodiert und wie sie transportiert werden. Der Datentransport mit IPP<br />
ist generell verschlüsselt. Desweiteren def<strong>in</strong>iert IPP das s.g. Verzeichnisschema, über das e<strong>in</strong>
222 KAPITEL 14. DRUCKEN IM NETZ<br />
Verzeichnisserver nach verfügbaren Ausgabegeräten gefragt werden kann. Ausserdem bietet<br />
IPP die Möglichkeit, den Zugriff auf Drucker e<strong>in</strong>zuschränken.<br />
14.2.3 Funktionsweise<br />
Die Kommunikation zwischen Client und Server erfolgt gemäß dem bekannten Request-<br />
Response-Verfahren. Diese Anfragen und Antworten s<strong>in</strong>d durch ASCII Code def<strong>in</strong>iert und<br />
werden mittels des HTTP 1.1 Postmechanismus durchgeführt.<br />
<strong>E<strong>in</strong></strong> Request des Clients sieht wie folgt aus:<br />
ipp:druck.server/me<strong>in</strong>drucker/me<strong>in</strong>druckauftrag<br />
und führt dazu, dass <strong>der</strong> Client e<strong>in</strong>e Verb<strong>in</strong>dung zu Port 631 des Servers druck.server aufbaut<br />
und folgende Daten übermittelt:<br />
POST /me<strong>in</strong>drucker/me<strong>in</strong>druckauftrag<br />
HTTP/1.1<br />
Host: druck.server:631<br />
Content-type: application/ipp<br />
Transfer-Encod<strong>in</strong>g: chunked<br />
...<br />
“pr<strong>in</strong>ter-url”<br />
“ipp://druck.server/me<strong>in</strong>drucker/me<strong>in</strong>druckauftrag”<br />
...<br />
14.2.4 Filter<br />
Die Filter f<strong>in</strong>det man <strong>in</strong>/usr/lib/cups/filter/. Meist ersieht man schon aus dem Namen<br />
<strong>der</strong> Filter, welche Konvertierung er vornimmt. CUPS erkennt automatisch, welche Filtermechanismen<br />
angewendet werden müssen, d.h. welche Filter h<strong>in</strong>tere<strong>in</strong>an<strong>der</strong> angewandt werden<br />
müssen. Lediglich das Ausgabeformat muss man e<strong>in</strong>tragen, sofern man e<strong>in</strong> an<strong>der</strong>es Format<br />
als PostScript verwenden möchte. (PostScript ist standardmässig vordef<strong>in</strong>iert.)<br />
14.2.5 Konfiguration<br />
Die Konfiguration von CUPS kann - wie bereits erwähnt - über den Browser durch e<strong>in</strong>en<br />
Aufruf von http://localhost:631 geschehen. <strong>E<strong>in</strong></strong>e weitere Möglichkeit zur Kofiguration<br />
des CUPS bietet Yast2. Es gibt aber auch schicke Webfrontends, die speziell für die Konfiguration<br />
von CUPS entwickelt wurden. <strong>E<strong>in</strong></strong>e <strong>der</strong> bekanntesten Schnittstellen ist das KUPS<br />
(s. http://cups.sourceforge.net/kups/<strong>in</strong>dex.htm)<br />
Möchte man die Konfiguration von Hand machen, beschränkt sich dies fast ausschliesslich<br />
auf folgende Dateien:<br />
In /etc/cups:<br />
cupsd.conf und mime.types<br />
In /var/log/cups:<br />
error log page log access log (f. <strong>Netzwerk</strong>e)<br />
Die zwei wichtigsten Designentscheidungen bei <strong>der</strong> Konfiguration von CUPS s<strong>in</strong>d “Brows<strong>in</strong>g<br />
On” und “Browse Poll”.<br />
Sofern <strong>in</strong> <strong>der</strong> cupsd.conf e<strong>in</strong>es CUPS-Rechners “Brows<strong>in</strong>g On” gesetzt ist, stellt <strong>der</strong><br />
Rechener per UDP-Broadcast den Namen des Druckers, Status<strong>in</strong>formtionen und an<strong>der</strong>e<br />
Zusatz<strong>in</strong>formationen zur Verfügung. Hierbei sollte man nicht ausser Acht lassen, dass die<br />
Broadcasts (entsprechend <strong>der</strong> TCP/IP-Spezifikation) nur bis zum nächsten Router o<strong>der</strong>
14.3. ALTERNATIVEN 223<br />
Gateway weitergegeben werden. Wenn bei e<strong>in</strong>em bestimmten Client nur die Brows<strong>in</strong>g-<br />
Informationen e<strong>in</strong>es bestimmten Servers verwendet werden sollen, kann man das <strong>in</strong> <strong>der</strong><br />
Konfigurationdatei des Client durch <strong>E<strong>in</strong></strong>träge <strong>der</strong> folgenden Art erreichen: BrowseAllow<br />
134.76.82.10, BrowseDeny 134.76.82.11.<br />
Das Gegenstück zum Brows<strong>in</strong>g (per Broadcast) ist das Poll<strong>in</strong>g. In diesem Fall, warten die<br />
Clients nicht passsiv auf die Informationen über zur Verfügung stehende Drucker, son<strong>der</strong>n<br />
besorgen sich diese aktiv bei e<strong>in</strong>em bestimmten Server. Hierzu verwendet man e<strong>in</strong>e Angabe<br />
<strong>in</strong> Form von BrowsePoll 134.76.82.10:631, die dazu führt, dass <strong>der</strong> genannte Server<br />
nach verfügbaren Druckern gefragt wird, sobald gedruckt werden soll. Beim Poll<strong>in</strong>g gilt<br />
allerd<strong>in</strong>gs dieselbe <strong>E<strong>in</strong></strong>schränkung des Broadcasts: Es könne nur Server im gleichen LAN<br />
angesprochen werden.<br />
Die Lösung diesen Problems ist, e<strong>in</strong>en Router o<strong>der</strong> Gateway des eigenen LANs zum<br />
so.g. Browse-Relay zu machen.<br />
14.3 Alternativen<br />
Zu den heute gängigen Alternativen zu CUPS zählen:<br />
• TurboPr<strong>in</strong>t: <strong>E<strong>in</strong></strong> kommerzielles Drucksystem, mit dem man bestmögliche Druckqualität<br />
erreichen kann. Nähere Informationen unter www.turbopr<strong>in</strong>t.de<br />
• KDEPr<strong>in</strong>t: <strong>E<strong>in</strong></strong> Modul <strong>der</strong> KDE-Oberfläche unter L<strong>in</strong>ux. Es ermöglicht e<strong>in</strong>en e<strong>in</strong>fachen<br />
und <strong>in</strong>tuitiven Zugriff auf sämliche CUPS-Funktionalitäten. Nähere Informationen<br />
unter pr<strong>in</strong>t<strong>in</strong>g.kde.org
224 KAPITEL 14. DRUCKEN IM NETZ
Kapitel 15<br />
Wichtige <strong>Netzwerk</strong>kommandos<br />
15.1 Offene Dateien und <strong>Netzwerk</strong>verb<strong>in</strong>dungen<br />
Das Kommando lsof (ListOpenFiles) zeigt die geöffneten Dateien (zum Lesen o<strong>der</strong> Schreiben)<br />
an und die dazugehörenden Prozesse. Weiterh<strong>in</strong> werden offene Sockets (<strong>Netzwerk</strong>verb<strong>in</strong>dung<br />
mit Portadresse), sowie verwendete Pipes und Filesockets angezeigt.<br />
15.2 netstat<br />
netstat hat sich auf das Anzeigen offener Sockets, sowohl des Filesystems, als auch von<br />
<strong>Netzwerk</strong>verb<strong>in</strong>dungen spezialisiert. Die Ausgabe von netstat -a hat folgendes Aussehen,<br />
wobei die Protokolle TCP, UDP und unix (Socket im Filesystem) <strong>in</strong> dieser Reihenfolge<br />
sortiert aufgeführt werden.<br />
dirk@shuttle:~/ > netstat -a |more<br />
Active Internet connections (servers and established)<br />
Proto Recv-Q Send-Q Local Address Foreign Address State<br />
tcp 0 0 *:nfs *:* LISTEN<br />
tcp 0 0 *:mysql *:* LISTEN<br />
udp 0 0 *:who *:*<br />
udp 0 0 *:nfs *:*<br />
...<br />
Active UNIX doma<strong>in</strong> sockets (servers and established)<br />
Proto RefCnt Flags Type State I-Node Path<br />
unix 9 [ ] DGRAM 613 /dev/log<br />
unix 2 [ ACC ] STREAM LISTENING 3810 /tmp/.X11-unix/X0<br />
unix 2 [ ACC ] STREAM LISTENING 6332 /tmp/.ICE-unix/1051<br />
...<br />
Mit netstat -M kann man sich e<strong>in</strong>en Überblick verschaffen, welche <strong>Netzwerk</strong>verb<strong>in</strong>dungen<br />
gerade maskiert werden:<br />
root@server:/ # netstat -M<br />
IP masquerad<strong>in</strong>g entries<br />
prot expire source dest<strong>in</strong>ation ports<br />
tcp 0:40.46 1234.test.local 210.24.30.216 3592 -> 2183 (64155)<br />
tcp 0:45.64 1234.test.local 210.24.30.216 3593 -> 2187 (64156)<br />
tcp 0:49.43 1234.test.local 210.24.30.216 3594 -> 2188 (64157)<br />
225
226 KAPITEL 15. WICHTIGE NETZWERKKOMMANDOS<br />
tcp 1:03.12 1234.test.local 210.24.30.216 3596 -> 2195 (64159)<br />
tcp 0:54.57 1234.test.local 210.24.30.216 3595 -> 2192 (64158)<br />
...<br />
Wird die Option “-n” beim Aufruf des Kommandos aufgeführt, wird ke<strong>in</strong>e Namensauflösung<br />
durchgeführt, was die Anzeige stark beschleunigen kann, gerade bei IP-Nummern,<br />
die nicht im Nameserver bekannt s<strong>in</strong>d.<br />
netstat -r liefert die Kernel-Rout<strong>in</strong>gtabelle <strong>in</strong> ähnlicher Weise, wie sie auch vom Kommando<br />
route angezeigt wird. Wenn Sie netstat mit dem Flag -i aufrufen, gibt es die Statistiken<br />
für die gerade aktiven <strong>Netzwerk</strong>-Schnittstellen aus. Geben Sie außerdem das Flag<br />
-a mit an, werden alle im Kernel vorhandenen Schnittstellen ausgegeben, nicht nur die<br />
konfigurierten Schnittstellen. An <strong>der</strong> Konsole produziert netstat -i <strong>in</strong> etwa folgendes:<br />
root@server:/ # netstat -i<br />
Kernel Interface table<br />
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR<br />
TX-DRP TX-OVR Flags<br />
lo 0 0 3185 0 0 0 3185 0<br />
0 0 BLRU<br />
eth0 1500 0 972633 17 20 120 628711 217<br />
0 0 BRU<br />
Die Spalten MTU und Met geben die aktuelle MTU und Metrik des Interface an. Die<br />
mit RX bzw. TX überschriebenen Spalten geben an, wie viele Pakete:<br />
• RX-OK/TX-OK fehlerfrei empfangen bzw. gesendet wurden<br />
• RX-ERR/TX-ERR wie viele beschädigt waren<br />
• RX-DRP/TX-DRP wie viele wegeworfen werden mußten<br />
• RX-OVR/TX-OVR wie viele aufgrund e<strong>in</strong>es Overruns verloreng<strong>in</strong>gen<br />
Die letzte Spalte zeigt wie<strong>der</strong> die Liste <strong>der</strong> Flags, die für die Schnittstelle gesetzt s<strong>in</strong>d. Das<br />
s<strong>in</strong>d e<strong>in</strong>buchstabige Versionen <strong>der</strong> langen Flagnamen, die ifconfig ausgibt:<br />
15.3 Systemprogramme<br />
15.3.1 Dämonen<br />
Buchstabe Bedeutung<br />
B BROADCAST<br />
L LOOPBACK<br />
M PROMISC<br />
O NOARP<br />
P POINTOPOINT<br />
R RUNNING<br />
U UP<br />
Tabelle 15.1: Bezeichner<br />
x<strong>in</strong>it, <strong>in</strong>it, r<strong>in</strong>ted, nfsd, smbd, nmbd, proftpd, httpd, dhcpd
15.4. NETZWERKKONFIGURATION 227<br />
15.4 <strong>Netzwerk</strong>konfiguration<br />
ifconfig, route, ip, p<strong>in</strong>g, nslookup, dig, tc, ifuser<br />
tcptraceroute<br />
ttcp (Throughput of UDP / TCP traffic)<br />
tcptrack (per connection bandwidth monitor)<br />
tcpstat tcpick, tcpflow,<br />
15.4.1 <strong>Netzwerk</strong>tests<br />
p<strong>in</strong>g traceroute mtr<br />
netdiag<br />
Net-Diagnostics (trafshow,strobe,netwatch,statnet,tcpspray,tcpblast) Netdiag conta<strong>in</strong>s<br />
a collection of small tools to analyze network traffic and configuration of remote hosts<br />
(strobe). It is of <strong>in</strong>valuable help if your system is show<strong>in</strong>g strange network behaviour and<br />
you want to f<strong>in</strong>d out what your network is do<strong>in</strong>g.<br />
nictools-nopci<br />
nictools-pci<br />
Diagnostic tools for many PCI ethernet cards These tools can help you to diagnostic<br />
problems with your ethernet cards or - <strong>in</strong> some cases - give those cards the f<strong>in</strong>al h<strong>in</strong>t, to work<br />
<strong>in</strong> your network. alta-diag : Diagnostic and setup for the Sundance ”Alta” NIC eepro100diag<br />
: Diagnostic and setup for the Intel EEPro100 Ethercards epic-diag : Diagnostics<br />
and EEPROM setup for the SMC EPIC-100 myson-diag : Diagnostic and setup for the<br />
Myson mtd803 Ethernet chip natsemi-diag : Diagnostic and setup for the NatSemi DP83815<br />
Ethernet chip ne2k-pci-diag : Diagnostics and EEPROM setup for PCI NE2000 clones<br />
ns820-diag : Diagnostic and setup for the NatSemi DP83820 Ethernet chip pcnet-diag :<br />
Diagnostic and setup for the AMD PCnet/PCI Ethernet chip rtl8139-diag : Diagnostics<br />
and EEPROM setup for RealTek RTL8129/8139 chips starfire-diag : Diagnostic and setup<br />
for the Adaptec Starfire DuraLAN tulip-diag : Diagnostic and setup for the Digital DC21x4*<br />
Ethercards chips via-diag : Diagnostic and setup for the VIA Rh<strong>in</strong>e vt86c100 and vt3043<br />
Ethernet chips vortex-diag : Diagnostics and EEPROM setup for the 3Com Vortex series<br />
w<strong>in</strong>bond-diag : Diagnostic and setup for the W<strong>in</strong>bond w89c840 ethercards yellowf<strong>in</strong>-diag:<br />
Diagnostic and setup for the Packet Eng<strong>in</strong>es Yellowf<strong>in</strong> chip<br />
Das Kommando p<strong>in</strong>g ist Teil je<strong>der</strong> L<strong>in</strong>ux-Distribution. Das Programm sendet e<strong>in</strong> spezielles<br />
Datagramm über das <strong>Netzwerk</strong> an e<strong>in</strong>en an<strong>der</strong>en Rechner. Wenn dieser e<strong>in</strong>geschaltet<br />
ist und es empfängt sendet er es wie<strong>der</strong> zurück und man weiß, dass Rechner und <strong>Netzwerk</strong><br />
<strong>in</strong> Ordnung s<strong>in</strong>d. In <strong>der</strong> e<strong>in</strong>fachsten Form sieht das so aus:<br />
dirk@randy2:~/vorlesung/lak> p<strong>in</strong>g log<strong>in</strong><br />
PING log<strong>in</strong> (132.230.1.143) from 132.230.9.124 : 56(84) bytes of data.<br />
64 bytes from log<strong>in</strong>3 (132.230.1.143): icmp_seq=1 ttl=63 time=4.44 ms<br />
64 bytes from log<strong>in</strong>3 (132.230.1.143): icmp_seq=2 ttl=63 time=0.219 ms<br />
64 bytes from log<strong>in</strong>3 (132.230.1.143): icmp_seq=3 ttl=63 time=0.217 ms<br />
64 bytes from log<strong>in</strong>3 (132.230.1.143): icmp_seq=4 ttl=63 time=0.218 ms<br />
^C<br />
--- log<strong>in</strong>.ruf.uni-freiburg.de p<strong>in</strong>g statistics ---<br />
4 packets transmitted, 4 received, 0% loss, time 3030ms<br />
rtt m<strong>in</strong>/avg/max/mdev = 0.217/1.275/4.448/1.831 ms
228 KAPITEL 15. WICHTIGE NETZWERKKOMMANDOS<br />
p<strong>in</strong>g sucht zunächst die richtige IP-Adresse zu dem angegebenen Rechnernamen heraus 1<br />
und sendet dann <strong>in</strong> regelmäßigen Abständen e<strong>in</strong> bestimmtes Datagramm an diese Adresse.<br />
Für jeden dieser icmp echo requests wird <strong>der</strong> an<strong>der</strong>e Rechner dann e<strong>in</strong> icmp echo reply<br />
als Antwort zurücksenden. Jede <strong>der</strong> Zeilen 64 bytes from ... stellt e<strong>in</strong>e solche empfangene<br />
Rückantwort dar. In je<strong>der</strong> Zeile ist auch die Adresse des Absen<strong>der</strong>s dieses Paketes angegeben,<br />
die Nummer des echo requests, auf den mit diesem Paket geantwortet wurde, die<br />
time to live (Lebensdauer) sowie die round trip time, das ist die Zeit <strong>in</strong> Millisekunden zwischen<br />
Absendung des request und Empfang des entsprechenden echo reply. Damit ist dies<br />
<strong>in</strong> gewissen Grenzen e<strong>in</strong> Maß für die Geschw<strong>in</strong>digkeit des <strong>Netzwerk</strong>es.<br />
p<strong>in</strong>g würde endlos weiter se<strong>in</strong>e Pakete senden, deshalb muß es abgebrochen werden.<br />
Dies geschieht durch gleichzeitiges Drücken <strong>der</strong> Tasten Control (Strg) und C. Danach gibt<br />
p<strong>in</strong>g noch e<strong>in</strong>e Statistik <strong>der</strong> gesendeten Pakete aus. In den letzten beiden Zeilen ist es: Die<br />
Anzahl <strong>der</strong> gesendeten, empfangenen, sowie unbeantworteten Pakete. Außerdem kürzeste,<br />
längste und mittlere Antwortzeit. <strong>E<strong>in</strong></strong>e hohe Verlustrate an Paketen deutet auf Probleme<br />
mit <strong>der</strong> Verb<strong>in</strong>dung h<strong>in</strong>, diese können durch schlechte Verb<strong>in</strong>dungen, überlastete Router<br />
o<strong>der</strong> Kollisionen im lokalen Ethernet verursacht werden. Man kann mit p<strong>in</strong>g die schadhafte<br />
Stelle lokalisieren, <strong>in</strong>dem man nache<strong>in</strong>an<strong>der</strong> alle Knotenpunkte <strong>der</strong> Verb<strong>in</strong>dung an-p<strong>in</strong>gt<br />
und nachsieht, ab welchem Punkt die Verlustrate stark ansteigt.<br />
Mit traceroute (auch bei je<strong>der</strong> Distribution dabei) kann man den Weg, den die Datagramme<br />
bei e<strong>in</strong>er Verb<strong>in</strong>dung zwischen zwei Rechnern zurücklegen, testen und anzeigen.<br />
Wie auch p<strong>in</strong>g verwendet traceroute dazu das icmp Protokoll. Es verwendet jedoch e<strong>in</strong>en<br />
Trick, um von je<strong>der</strong> durchlaufenen Knotenstelle e<strong>in</strong>e Rückmeldung zu bekommen, und das<br />
geht so: Das Feld time to live e<strong>in</strong>es icmp-Datagramms dient eigentlich dazu, zu verh<strong>in</strong><strong>der</strong>n,<br />
dass das Datenpaket ewig im Netz herumgeschickt wird, z.B. wenn es <strong>in</strong> e<strong>in</strong>e Rout<strong>in</strong>g-<br />
Endlosschleife gerät. Zu diesem Zweck verr<strong>in</strong>gert je<strong>der</strong> Router, <strong>der</strong> das Paket weiterleitet,<br />
den Zähler <strong>in</strong> diesem Datenfeld um e<strong>in</strong>s. Wird dabei <strong>der</strong> Wert Null erreicht, so wird <strong>der</strong><br />
Router, bei dem dies geschehen ist, e<strong>in</strong>e “icmp time to live expired Meldung” an den ursprünglichen<br />
Absen<strong>der</strong> des Datagramms senden um ihm mitzuteilen, dass das Datagramm<br />
‘abgelaufen’ ist. traceroute sendet nun nache<strong>in</strong>an<strong>der</strong> Datagramme ab, <strong>der</strong>en time to live<br />
(beg<strong>in</strong>nend bei e<strong>in</strong>s) jeweils um e<strong>in</strong>s erhöht wird. Indem es nun die e<strong>in</strong>gehenden “icmp<br />
time to live expired Meldungen” auswertet, kann es genau den Weg, den die Datagramme<br />
nehmen, verfolgen - bis <strong>der</strong> wirkliche Zielrechner erreicht ist. Das sieht dann so aus:<br />
dirk@test:~/vorlesung/lak> /usr/sb<strong>in</strong>/traceroute goe.net<br />
traceroute to goe.net (134.76.60.86), 30 hops max, 40 byte packets<br />
1 132.230.22.254 2.735 ms 5.013 ms 7.667 ms<br />
2 132.230.223.254 0.707 ms 0.832 ms 0.721 ms<br />
3 nsc-rz-gwn.fun.uni-freiburg.de (132.230.0.141) 0.386 ms 0.355 ms \<br />
0.307 ms<br />
4 Freiburg1.Belwue.DE (129.143.15.141) 0.576 ms 0.545 ms 0.496 ms<br />
5 Stuttgart1.BelWue.DE (129.143.1.7) 3.813 ms 4.605 ms 0.573 ms<br />
6 Stuttgart2.BelWue.DE (129.143.1.34) 4.523 ms 4.521 ms 4.520 ms<br />
7 Frankfurt1.BelWue.DE (129.143.1.26) 8.393 ms 8.335 ms 8.304 ms<br />
8 ffm-b2-geth0-1.telia.net (213.248.79.41) 8.592 ms 8.668 ms 8.713 ms<br />
9 ffm-b2-geth0-1.telia.net (213.248.68.33) 8.558 ms 8.531 ms 8.503 ms<br />
10 ffm-bb2-pos2-3-0.telia.net (213.248.64.177) 8.745 ms 8.692 ms 8.662 ms<br />
11 hbg-bb2-pos1-1-0.telia.net (213.248.65.2) 18.104 ms 18.057 ms 18.129 ms<br />
12 hbg-b1-pos1-0.telia.net (213.248.68.6) 18.047 ms 18.000 ms 17.993 ms<br />
13 dante-01616-hbg-b1.c.telia.net (213.248.103.98) 17.439 ms 17.800 ms \<br />
17.487 ms<br />
14 cr-hannover1.g-w<strong>in</strong>.dfn.de (188.1.18.178) 199.467 ms 199.447 ms \<br />
199.511 ms<br />
1 Voraussetzung ist natürlich, dass /etc/hosts und <strong>der</strong> Nameserver richtig konfiguriert s<strong>in</strong>d
15.4. NETZWERKKONFIGURATION 229<br />
15 ar-goett<strong>in</strong>gen1.g-w<strong>in</strong>.dfn.de (188.1.88.74) 20.239 ms 20.192 ms 20.162 ms<br />
16 c12012-<strong>in</strong>t.gwdg.de (134.76.249.201) 20.786 ms 20.738 ms 20.705 ms<br />
17 134.76.249.204 20.406 ms 20.352 ms 20.323 ms<br />
18 stud9.stud.uni-goett<strong>in</strong>gen.de (134.76.60.86) 20.806 ms 20.758 ms \<br />
20.730 ms<br />
Die erste Spalte gibt die ‘Entfernung’ an, also <strong>der</strong> wievielte Knoten (Hop) <strong>in</strong> <strong>der</strong> Verb<strong>in</strong>dung<br />
<strong>der</strong> bezeichnete Rechner ist. Dies entspricht dem <strong>E<strong>in</strong></strong>trag im time to live Feld des Datagramms,<br />
das vom angegebenen Rechner als expired gemeldet wurde. Der nächste <strong>E<strong>in</strong></strong>trag<br />
ist <strong>der</strong> Rechnername (falls dieser anhand <strong>der</strong> IP-Adresse herausgefunden werden kann) und<br />
dessen IP-Adresse. Dann kommen drei <strong>E<strong>in</strong></strong>träge mit den Antwortzeiten für drei aufe<strong>in</strong>an<strong>der</strong>folgende<br />
Datagramme an diesen Rechner. Der erste Punkt <strong>in</strong> <strong>der</strong> Verb<strong>in</strong>dung ist also<br />
<strong>der</strong> Rechner gw. Se<strong>in</strong>e Antwortzeiten s<strong>in</strong>d sehr kurz, die Verb<strong>in</strong>dung ist e<strong>in</strong> lokales Ethernet.<br />
Der nächste Router ist gw.uts - von dort kommen die Datagramme sehr viel langsamer<br />
zurück als von gw. Der Grund ist hier e<strong>in</strong>e sehr langsame Verb<strong>in</strong>dung über e<strong>in</strong>e Funkstrecke.<br />
Der nächste Knoten ist bereits <strong>der</strong> gesuchte Rechner, m<strong>in</strong>nie.vk1xwt. Auch hier kommen<br />
die Antworten nur sehr langsam. Dies liegt aber daran, dass die Antwortzeit jedes Rechners<br />
natürlich die Summe <strong>der</strong> Verb<strong>in</strong>dungszeiten aller dazwischenliegenden Teilstrecken ist. In<br />
diesem Falle also vom eigenen Rechner zu gw; von dort zu gw.uts; und schließlich von gw.uts<br />
zu m<strong>in</strong>nie.vk1xwt. Berücksichtigt man diese Aufsummierung <strong>der</strong> Zeiten, so sieht man, dass<br />
die letzte Verb<strong>in</strong>dung von gw.uts zu m<strong>in</strong>nie.vk1xwt ebenfalls sehr schnell ist. Diese beiden<br />
Rechner hängen also vermutlich auch an e<strong>in</strong>em lokalen, schnellen <strong>Netzwerk</strong>.<br />
Taucht bei e<strong>in</strong>em traceroute Aufruf h<strong>in</strong>ter den Zeiten e<strong>in</strong> !N auf so weist dies auf e<strong>in</strong><br />
nicht erreichbares <strong>Netzwerk</strong> h<strong>in</strong>. Es ist e<strong>in</strong> Zeichen dafür, dass e<strong>in</strong> Router nicht wußte, woh<strong>in</strong><br />
er das Datagramm weiterleiten soll. Er sendet dann e<strong>in</strong> network unreachable Datagramm<br />
an den Absen<strong>der</strong> zurück. Meist deutet es darauf h<strong>in</strong>, dass e<strong>in</strong>e Netzverb<strong>in</strong>dung (zeitweise)<br />
zusammengebrochen ist. Anhand <strong>der</strong> letzten angegebenen Adresse vor dieser Fehlermeldung<br />
kann man die defekte Stelle lokalisieren.<br />
Ebenfalls auftauchen kann e<strong>in</strong> !H als H<strong>in</strong>weis darauf, dass e<strong>in</strong> Rechner (Host) nicht<br />
erreicht werden konnte. Dies bedeutet i.A. dass man bis <strong>in</strong> das lokale <strong>Netzwerk</strong> des Zielrechners<br />
gelangt ist, dieser sich aber nicht meldet (weil er z.B. abgeschaltet ist).<br />
15.4.2 <strong>Netzwerk</strong>überwachung<br />
netstat, tcpdump, ethereal, nmap, ntop, iptraf, xnetload, arpwatch, fp<strong>in</strong>g, ipgrab<br />
tcpdump kann die gesamte Aktivität auf dem <strong>Netzwerk</strong> überwachen <strong>in</strong>dem es sämtlich<br />
Datagramme auf dem Weg <strong>in</strong> den eigen Rechner h<strong>in</strong>e<strong>in</strong> o<strong>der</strong> heraus abhört. Damit lassen<br />
sich vom erfahrenen Adm<strong>in</strong>istrator auch schwer zu identifizierende <strong>Netzwerk</strong>probleme lokalisieren.<br />
tcpdump dekodiert jedes abgefangene Datagramm und zeigt es - <strong>in</strong> e<strong>in</strong>er etwas<br />
kryptischen Form - als Text an. tcpdump bietet sich an, um Protokollfehler o<strong>der</strong> plötzliche<br />
Verb<strong>in</strong>dungsabbrüche aufzuspüren. Denn man kann damit sehen, was auf dem <strong>Netzwerk</strong><br />
passiert. Um es jedoch s<strong>in</strong>nvoll e<strong>in</strong>setzen zu können, bedarf es e<strong>in</strong>es tieferen Verständnisses<br />
<strong>der</strong> Protokolle und wie sie arbeiten. Doch es kann auch e<strong>in</strong>fach dazu benutzt werden,<br />
um sicherzustellen, dass z.B. Datagramme den eigenen Rechner wirklich über die richtige<br />
Schnittstelle verlassen o<strong>der</strong>, um zu überprüfen, ob irgendwelche Datagramme von außerhalb<br />
empfangen werden. <strong>E<strong>in</strong></strong>e typische Ausgabe von tcpdump sieht etwa so aus:<br />
test2:/root # tcpdump -i eth0<br />
tcpdump: listen<strong>in</strong>g on eth0<br />
18:25:50.646507 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\<br />
77:52
230 KAPITEL 15. WICHTIGE NETZWERKKOMMANDOS<br />
pathcost 0 age 0 max 20 hello 2 fdelay 15<br />
18:25:52.649154 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\<br />
77:52<br />
pathcost 0 age 0 max 20 hello 2 fdelay 15<br />
18:25:54.648119 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\<br />
77:52<br />
pathcost 0 age 0 max 20 hello 2 fdelay 15<br />
18:25:56.650810 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\<br />
77:52<br />
pathcost 0 age 0 max 20 hello 2 fdelay 15<br />
18:25:58.182266 132.230.9.254 > OSPF-ALL.MCAST.NET: OSPFv2-hello 44: rtrid 132.\<br />
230.200.141<br />
backbone dr 132.230.9.254 [ttl 1]<br />
18:25:58.183882 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.doma<strong>in</strong>:<br />
25558+ PTR? 254.9.230.132.<strong>in</strong>-addr.arpa. (44) (DF)<br />
18:25:58.186580 dns0.fun.uni-freiburg.de.doma<strong>in</strong> > randy2.rz.uni-freiburg.de.32895:<br />
25558 NXDoma<strong>in</strong>* 0/1/0 (137)<br />
18:25:58.187051 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.doma<strong>in</strong>:<br />
25559+ PTR? 5.0.0.224.<strong>in</strong>-addr.arpa. (40) (DF)<br />
18:25:58.189666 dns0.fun.uni-freiburg.de.doma<strong>in</strong> > randy2.rz.uni-freiburg.de.32895:<br />
25559 1/4/4 PTR [|doma<strong>in</strong>]<br />
18:25:58.207177 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.doma<strong>in</strong>:<br />
25560+ PTR? 141.200.230.132.<strong>in</strong>-addr.arpa. (46) (DF)<br />
18:25:58.210175 dns0.fun.uni-freiburg.de.doma<strong>in</strong> > randy2.rz.uni-freiburg.de.32895:<br />
25560 NXDoma<strong>in</strong>* 0/1/0 (141)<br />
18:25:58.210747 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.doma<strong>in</strong>:<br />
25561+ PTR? 200.200.230.132.<strong>in</strong>-addr.arpa. (46) (DF)<br />
18:25:58.213119 dns0.fun.uni-freiburg.de.doma<strong>in</strong> > randy2.rz.uni-freiburg.de.32895:<br />
25561* 1/2/2 (173)<br />
18:25:58.649731 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\<br />
77:52<br />
pathcost 0 age 0 max 20 hello 2 fdelay 15<br />
14 packets received by filter<br />
0 packets dropped by kernel<br />
Wenn tcpdump ohne Argumente gestartet wird, wird das <strong>Netzwerk</strong>-Device mit <strong>der</strong> kle<strong>in</strong>sten<br />
Nummer, das ke<strong>in</strong> Loopback-Device ist, überwacht. Es kann aber - wie im Beispiel -<br />
auch e<strong>in</strong> spezielles Device angegeben werden. tcpdump dekodiert dann jedes Datagramm<br />
das über diese Device übertragen wird und zeigt es <strong>in</strong> e<strong>in</strong>er lesbaren Form an. Der erste<br />
<strong>E<strong>in</strong></strong>trag ist - wie leicht zu ersehen - <strong>der</strong> Zeitpunkt, zu dem das Datagramm gesendet o<strong>der</strong><br />
empfangen wurde. Der weitere Inhalt <strong>der</strong> Zeile hängt dann von <strong>der</strong> Art des Datagramms ab.<br />
Die ersten beiden Zeilen im Beispiel zeigen, e<strong>in</strong>en arp request. tcpdump gibt dabei auch die<br />
genaue Art des icmp Datagramms an. Das Größer-Zeichen (¿) gibt die Richtung an, <strong>in</strong> <strong>der</strong><br />
das Datagramm übermittelt wurde (es zeigt vom Sen<strong>der</strong> zum Empfänger). Die restlichen<br />
Zeilen protokollieren den Aufbau e<strong>in</strong>er telnet Verb<strong>in</strong>dung von albert.vk2ktj zu gw.vk2ktj<br />
Die Zahl am Ende jeden Rechnernamens gibt die verwendete Socket Nummer an, zu<br />
diesem Zweck wertet tcpdump die Datei /etc/services aus.<br />
Beispiel:<br />
tcpdump -i eth1 host 1.2.3.4 and not port ssh<br />
Zwei Kommandos spielen mit tcpdump zusammen: Wenn man mit tcpdump -w capture.log<br />
e<strong>in</strong> Logfile <strong>in</strong> e<strong>in</strong>em speziellen B<strong>in</strong>ärformat geschrieben hat, kann man dieses<br />
später mit tcptrace o<strong>der</strong> tcpflow auswerten. Beispiel: tcptrace -n -r capture.log ><br />
session.file
Kapitel 16<br />
<strong>Netzwerk</strong>überwachung<br />
16.1 Überblick<br />
Inzwischen ist <strong>der</strong> Rechnerarbeitsplatz <strong>in</strong> Firmen und Organisationen zum Standard avanciert.<br />
Viele Dienste, wie <strong>der</strong> Druck- o<strong>der</strong> Fileserver, die Firewall, <strong>der</strong> Mail- und Webserver<br />
werden üblicherweise auch <strong>in</strong> kle<strong>in</strong>eren Firmennetzwerken angeboten. Die Zahl <strong>der</strong> Masch<strong>in</strong>en<br />
hat damit e<strong>in</strong>en so großen Umfang angenommen, dass sich nicht mehr durch e<strong>in</strong>faches<br />
”Draufgucken” ihre vielfältigen Aufgaben überwachen lassen.<br />
Mit diesem Wachstum <strong>der</strong> LANs (Local Area Networks) entsteht die Notwendigkeit sich<br />
e<strong>in</strong>en schnellen und umfassenden Überblick über den Zustand e<strong>in</strong>es Netzes und <strong>der</strong> angeschlossenen<br />
Masch<strong>in</strong>en verschaffen zu können. Deshalb existieren <strong>in</strong>zwischen e<strong>in</strong>ige, teilweise<br />
konkurrierende Protokolle zur Überwachung von Workstations und aktiven <strong>Netzwerk</strong>komponenten.<br />
Das am häufigsten verwendete Verfahren zur Überwachung und Konfiguration<br />
e<strong>in</strong>gesetzter Komponenten ist das Simple Network Management Protocol (SNMP).<br />
<strong>E<strong>in</strong></strong>e Reihe ernsthafter Leute hat sich e<strong>in</strong>e Reihe wichtiger Gedanken für e<strong>in</strong> ernsthaftes<br />
Problem gemacht und SNMP erfunden: Wie kann e<strong>in</strong>e Organisation Hun<strong>der</strong>te o<strong>der</strong> Tausende<br />
(wenn nicht noch mehr) aktiver <strong>Netzwerk</strong>komponenten und Masch<strong>in</strong>en sowie das<br />
zugrunde liegende <strong>Netzwerk</strong> beobachten und steuern?<br />
SNMP basiert auf <strong>der</strong> TCP/IP Protokoll-Suite. Es etabliert durch se<strong>in</strong>e starke Standardisierung<br />
e<strong>in</strong> e<strong>in</strong>heitliches Modell zur Kontrolle und Verwaltung von <strong>Netzwerk</strong>en. <strong>E<strong>in</strong></strong><br />
wesentlicher Vorteil dieses Protokolls liegt neben se<strong>in</strong>er weiten Verbreitung <strong>in</strong> <strong>der</strong> flexiblen<br />
Erweiterbarkeit. SNMP erlaubt die schnelle und e<strong>in</strong>fache Übertragung von Datenpaketen<br />
zur Zustandsbeschreibung von <strong>Netzwerk</strong>geräten. Jedoch genügt es <strong>in</strong> e<strong>in</strong>igen Fällen nicht,<br />
festzustellen, dass e<strong>in</strong> bestimmter Dienst aktiv ist, <strong>in</strong>dem man überprüft, ob <strong>der</strong> entsprechende<br />
Prozess <strong>in</strong> <strong>der</strong> Liste laufen<strong>der</strong> Programme auftaucht. Es geht nicht darum, e<strong>in</strong>e<br />
Innenansicht e<strong>in</strong>er Masch<strong>in</strong>e festzustellen, son<strong>der</strong>n den Zustand zu überprüfen, wie er sich<br />
aus Sicht des Benutzers darstellt. Vielfach ist erst dann e<strong>in</strong>e Aussage s<strong>in</strong>nvoll, wenn e<strong>in</strong><br />
Testzugriff über das <strong>Netzwerk</strong> erfolgreich durchgeführt wurde. Für diese Art des Monitor<strong>in</strong>g<br />
bieten sich Web-, FTP- und Mailserver sowie Authentifizierungsdienste an, da nur so<br />
e<strong>in</strong>e Nutzbarkeit aus Sicht des Users emuliert werden kann.<br />
16.2 SNMP - Das Simple Network Mangement Protocol<br />
16.2.1 Überblick<br />
Das Konzept von SNMP be<strong>in</strong>haltet e<strong>in</strong>e verteilte Management Architektur. Das Managementproblem<br />
wird <strong>in</strong> zwei Teile aufgespalten und es werden für jeden Teil separate Stan-<br />
231
232 KAPITEL 16. NETZWERK ÜBERWACHUNG<br />
dards def<strong>in</strong>iert. Der erste Teil befaßt sich mit dem Austausch von Informationen. SNMP<br />
basierende <strong>Netzwerk</strong>managementlösungen arbeiten im Client-Server-Modell. Anwendungen<br />
welche zum Sammeln von Daten o<strong>der</strong> zur Steuerung von Geräten dienen, werden Agenten<br />
genannt. Der Management Host kann diese Daten von den Agenten abfragen. Das Protokoll<br />
bestimmt zum e<strong>in</strong>en, wie die Client-Software funktioniert und die Austauschformate zwischen<br />
Management Host und Agenten aussehen, sowie die Form <strong>der</strong> Namen und Adressen.<br />
Zum zweiten wird festgelegt, welche Daten e<strong>in</strong> gemanagtes Gerät vorhalten muss, wie diese<br />
benannt s<strong>in</strong>d und welche Syntax zum Ausdruck bestimmter Werte und Zustände verwendet<br />
wird. SNMP verfolgt e<strong>in</strong>en m<strong>in</strong>imalistischen Ansatz: Das Set <strong>der</strong> zugelassenen Operationen<br />
ist sehr beschränkt, e<strong>in</strong> paar Befehle verschaffen die gesamte Funktionalität.<br />
SNMP wurde von <strong>der</strong> IETF <strong>in</strong> etlichen RFC’s standardisiert (ua. 1155, 1157, 1212,<br />
1213, 1441-46, 1450). Hier<strong>in</strong> wurde festgelegt, dass SNMP mittels des verb<strong>in</strong>dungs- und<br />
quittungslosen Unified Data Protocol (UDP) kommuniziert. Der Austausch zwischen Agent<br />
und Monitor erfolgt dabei standardmäßig auf Port 161. Die Management Station kann Daten<br />
von den zu überwachenden Agenten (zyklisch) pollen, welche als Server fungieren. Die<br />
MIB-Informationen können dann grafisch aufbereitet, dargestellt o<strong>der</strong> an<strong>der</strong>s verarbeitet<br />
werden. Die Host s<strong>in</strong>d jedoch auch <strong>in</strong> <strong>der</strong> Lage, gewisse Ereignisse mittels sogenannter Traps<br />
(”Falltüren”) an die Management Station über Port 162 zu melden. Der Informationsaustausch<br />
zwischen den Agenten und dem Überwachungs-Client läuft im H<strong>in</strong>tergrund ab und<br />
versucht die <strong>Netzwerk</strong>belastung ger<strong>in</strong>g zu halten.<br />
SNMP liegt <strong>in</strong>zwischen <strong>in</strong> <strong>der</strong> dritten Version (SNMPv3) vor, jedoch s<strong>in</strong>d die Unterschiede<br />
zu den Vorgängern ger<strong>in</strong>g und die meisten Befehle und Strukturen abwärts kompatibel.<br />
16.3 Die Datendef<strong>in</strong>ition<br />
<strong>E<strong>in</strong></strong> überwachtes Objekt muss bestimmte Zustands- und Kontrolldaten vorhalten, da sie<br />
vom Manager abgefragt werden können. Dazu gehören bei Routern sicherlich die Rout<strong>in</strong>gtabellen,<br />
sowie e<strong>in</strong>kommen<strong>der</strong> und ausgehen<strong>der</strong> Datenverkehr. Switches werden bestimmte<br />
Portstatistiken zu transferierten Paketmengen und dabei aufgetretenen Fehlern vorhalen;<br />
e<strong>in</strong> Drucker kann die Zahl <strong>der</strong> ausgeworfenen Seiten und die Länge <strong>der</strong> Druckerwarteschlange<br />
bereithalten. Obwohl dem Manager <strong>der</strong> Zugriff auf diese Daten erlaubt wird, sagt SNMP<br />
nichts Genaueres darüber aus, welche Informationen auf welchem Gerätetyp erhältlich s<strong>in</strong>d.<br />
Stattdessen def<strong>in</strong>iert e<strong>in</strong> weiterer Standard die Details. In <strong>der</strong> Management Information Base<br />
(MIB) werden die Informationen vermerkt, sowie welche Bedeutung sie haben, welche<br />
Operationen auf ihnen ausgeführt werden können und welche Werte sie annehmen können.<br />
So hat e<strong>in</strong> Paketzähler für e<strong>in</strong>en Switchport e<strong>in</strong>en Integerwert, <strong>der</strong> nur lesbar ist und nicht<br />
verän<strong>der</strong>t werden kann. <strong>E<strong>in</strong></strong>e Variable, die den Zustand desselben Ports beschreibt (ob dieser<br />
e<strong>in</strong>- o<strong>der</strong> abgeschaltet ist) wird den Zustandswert enthalten und les-/schreibbar se<strong>in</strong>.<br />
Der Vorteil MIBs unabhängig von SNMP zu def<strong>in</strong>ieren, liegt dar<strong>in</strong>, dass Hersteller<br />
von <strong>Netzwerk</strong>komponenten neue Variablen e<strong>in</strong>führen können. <strong>E<strong>in</strong></strong> Benutzer kann dieselbe<br />
<strong>Netzwerk</strong>managementsoftware, wie für die bekannten MIBs verwenden. Natürlich wird ke<strong>in</strong><br />
Gerät die Daten liefern, die <strong>in</strong> ihm unbekannten MIBs def<strong>in</strong>iert s<strong>in</strong>d. Trotzdem bleibt die<br />
Sprache und das Protokoll von SNMP gleich.<br />
Zu Zeiten von SNMPv1 und v2 waren alle Daten <strong>in</strong> e<strong>in</strong>er e<strong>in</strong>zigen MIB festgelegt.<br />
SNMPv3 erlaubt verschiedene MIBs zu def<strong>in</strong>ieren. In <strong>der</strong> System-MIB (MIB-II) s<strong>in</strong>d grundlegende<br />
Verwaltungsdaten abgelegt, wovon e<strong>in</strong>ige <strong>in</strong> <strong>der</strong> Tabelle gezeigt s<strong>in</strong>d. Die MIB-II<br />
wird von den meisten Herstellern unterstützt. Darüberh<strong>in</strong>aus def<strong>in</strong>iert je<strong>der</strong> Anbieter von<br />
netzwerkfähiger Hardware weitere MIBs, z.B. die Host-MIB (MIB für Endgeräte).
16.3. DIE DATENDEFINITION 233<br />
MIB Informationen zu/über<br />
system Überwachtes Gerät, Standort, Eigentümer, Software, Uptime, Ansprechpartner<br />
...<br />
<strong>in</strong>terfaces <strong>E<strong>in</strong></strong>gebaute reale und virtuelle <strong>Netzwerk</strong><strong>in</strong>terfaces: Mehrere bei<br />
Routern und Switches, meistens e<strong>in</strong>es bei Rechnern, Druckern ...<br />
ip IP-Daten, wie Rout<strong>in</strong>gtabelle, Paketzähler ...<br />
tcp TCP-Daten, wie offene Verb<strong>in</strong>dungen, Paketzähler<br />
udp UDP-Daten, wie offene Ports, Paketzähler<br />
snmp Statistiken und Zähler des SNMP-Agenten<br />
host Statistiken und Daten klassischer Workstations, wie Speicher,<br />
Festplatten, Zahl <strong>der</strong> Nutzer ...<br />
Tabelle 16.1: <strong>E<strong>in</strong></strong>ige Standard-MIBs<br />
16.3.1 Der SNMP-Namensraum und die Management Information Bases<br />
Der SNMP-Datenraum ist großzügig und universell erweiterbar angelegt. Große Teile s<strong>in</strong>d<br />
für zukünftige Ergänzungen reserviert und für die evtl. Migration mit an<strong>der</strong>en baumartigen<br />
Datenstrukturen freigehalten.<br />
<strong>E<strong>in</strong></strong> weiterer Standard def<strong>in</strong>iert das Regelwerk zum Festlegen und Identifizieren <strong>der</strong> MIB<br />
Variablen. Dieses grundlegende Format heißt SMI (Structure of Management Information).<br />
Um das Protokoll e<strong>in</strong>fach zu halten, legt SMI e<strong>in</strong>ige Restriktionen zu den <strong>in</strong> den MIBs<br />
erlaubten Variablen fest, bestimmt <strong>der</strong>en Benennung und die Def<strong>in</strong>ition von Variablentypen.<br />
Hierzu gehören z.B. <strong>der</strong> Zähler (Counter, Integervariable im Bereich von 0..2ˆ32-1)<br />
o<strong>der</strong> die IP-Adresse (4 Oktets). Die Datentypen können wie<strong>der</strong>um zu Tabellen o<strong>der</strong> Folgen<br />
komb<strong>in</strong>iert werden.<br />
Zur Bennenung <strong>der</strong> MIB-Variablen und <strong>der</strong>en Referenzierung verwendet SMI den ASN.1-<br />
Standard (Abstract Syntax Notation <strong>der</strong> ISO). Dieses ist e<strong>in</strong>e formale Sprache mit zwei<br />
Ausprägungen: <strong>E<strong>in</strong></strong>em kompakten masch<strong>in</strong>en-lesbaren Teil für die Verwendung im Kommunikationsprotokoll<br />
und e<strong>in</strong>er für Menschen lesbaren Form <strong>der</strong> Daten zur Beschreibung<br />
<strong>in</strong> Dokumenten. ASN.1 for<strong>der</strong>t dabei e<strong>in</strong>e sehr hohe Präzision (z.B. die Angabe des Wertebereichs<br />
e<strong>in</strong>er Variablen), um e<strong>in</strong>e gute Interoperabilität zu gewährleisten.<br />
Die Variablen <strong>der</strong> MIBs s<strong>in</strong>d <strong>in</strong> e<strong>in</strong>er baumartigen Struktur abgelegt, dem Object Identifier<br />
Namespace, welcher von ISO und ITU verwaltet wird. Der Aufbau ähnelt e<strong>in</strong> wenig dem<br />
vom Doma<strong>in</strong> Name System o<strong>der</strong> Dateisystemen bekannten. Der Namensraum ist global, d.h.<br />
alle e<strong>in</strong>getragenen Zweige s<strong>in</strong>d e<strong>in</strong>deutig. Subnamensräume können jedoch delegiert werden,<br />
so dass nicht je<strong>der</strong> neue <strong>E<strong>in</strong></strong>trag bei den o.g. Organisationen beantragt werden muss.<br />
Die Wurzel des Bauses ist unbenannt, danach folgen die managenden Organisationen<br />
(ISO, ITU und ISO+ITU geme<strong>in</strong>sam). Das Trennzeichen zwischen den Hierarchieebenen<br />
ist <strong>der</strong> Punkt. Angesprochen werden kann je<strong>der</strong> Host über e<strong>in</strong>e Nummer, wobei zur Vere<strong>in</strong>fachung<br />
des Zugriffes auch Namen erlaubt s<strong>in</strong>d. Diese dienen jedoch wie beim DNS eher<br />
<strong>der</strong> Bequemlichkeit; sie s<strong>in</strong>d ke<strong>in</strong>e Eigenschaften des Hierarchiebaumes und werden nicht<br />
bei <strong>der</strong> Client-Server-Kommunikation verwendet.<br />
Der für SNMP <strong>in</strong>teressanteste Teil des Namensraums wird mittels <strong>der</strong> sogenannten<br />
MIBs aufgespannt. Sie def<strong>in</strong>ieren die unterschiedlichen Daten-Doma<strong>in</strong>s, die mittels SNMP<br />
abgefragt werden können. Sie be<strong>in</strong>halten das Schema <strong>der</strong> abfragbaren Informationen und<br />
die<br />
Übersetzung <strong>der</strong> OIDs <strong>in</strong> ihre jeweiligen Namen. Dabei s<strong>in</strong>d die obersten Ebenen<br />
des Datenbaumes für die Def<strong>in</strong>ition <strong>der</strong> Berechtigungen an e<strong>in</strong>zelne Gruppen reserviert.<br />
Der spannen<strong>der</strong>e Abschnitt des SMI-Baumes startet mit OID 1.3.6.1, welcher den Namen
234 KAPITEL 16. NETZWERK ÜBERWACHUNG<br />
”iso.org.dod.<strong>in</strong>ternet” trägt. Hier f<strong>in</strong>den sich die System-, Interface-, TCP/IP, hostspezifische<br />
und weitere (herstellerdef<strong>in</strong>ierte) MIBs.<br />
Ansehen kann man sich die MIBs mit e<strong>in</strong>em Texteditor, komfortabel wird es jedoch<br />
erst mit grafischen Tools. Cheops und TK<strong>in</strong>ed haben e<strong>in</strong>gebaute Funktionen um MIBs<br />
zu visualisieren, richtig komfortabel wird es mit Mbrowser (siehe [7]), welcher auf Net-<br />
SNMP aufsetzt und e<strong>in</strong> GTK-GUI verwendet. Mit mbrowser lassen sich auch die Standard-<br />
SNMP-Kommandos, wie get, set, walk absetzen, die weiter unten <strong>in</strong> ihrer Kommandozeilenausführung<br />
besprochen werden.<br />
16.3.2 Die SNMP-Agenten<br />
Je<strong>der</strong> e<strong>in</strong>zelne Knoten im Netz - <strong>Netzwerk</strong>komponenten o<strong>der</strong> auch Endgeräte, welche sich<br />
mittels SNMP verwalten lassen, verfügen über e<strong>in</strong>en Management Agenten. Dieser stellt Informationen<br />
<strong>in</strong> strukturierter Form zur Verfügung. Anhand dieser erfolgt die Überwachung<br />
und Konfiguration des jeweiligen Gerätes. Die Datenstruktur wird als Management Information<br />
Base (MIB) bezeichnet. Die Agenten s<strong>in</strong>d üblicherweise als Softwarelösung <strong>in</strong> den<br />
Netzknoten und Endgeräten umgesetzt. Diese Implementation erfolgt bei den Anbietern<br />
aktiver <strong>Netzwerk</strong>komponenten meistens herstellerspezifisch. Auf e<strong>in</strong>er L<strong>in</strong>ux- bzw. <strong>Unix</strong>-<br />
Workstation stehen dafür mehrere Implementationen zur Verfügung. Die Lösungen reichen<br />
von C++-Implementationen, wie dem Open-SNMP, die <strong>in</strong> C geschriebene Toolsuite des<br />
CMU bzw. Net-SNMP, Bibliotheken die TCL/TK zu Grunde legen, wie ”scotty” bis h<strong>in</strong> zu<br />
Java- o<strong>der</strong> Perl-basierten Umsetzungen. Ihre Funktionalität unterscheidet sich <strong>in</strong> den von<br />
den Agenten unterstützten MIBs sowie den Werkzeugen zur Erlangung und Visualisierung<br />
<strong>der</strong> Daten.<br />
16.3.3 Der Kommunikations-Code <strong>der</strong> Agenten<br />
Nun s<strong>in</strong>d die Datentypen und die Struktur <strong>der</strong> zur Verfügung stehenden Daten def<strong>in</strong>iert.<br />
Jetzt sollen diese zwischen dem Agenten und dem Management System ausgetauscht werden.<br />
Hierzu s<strong>in</strong>d vier grundlegende Operationen und ihre Erweiterungen def<strong>in</strong>iert:<br />
Jede Bitte um e<strong>in</strong>en Satz von Daten muss e<strong>in</strong>en vollständigen Pfad für die erwünschte<br />
Information be<strong>in</strong>halten. Das Schreiben und Lesen von Fel<strong>der</strong>n auf e<strong>in</strong>em Knoten <strong>der</strong> SMI-<br />
Hierarchie erfolgt mit set und get. Mittels get-next lassen Tabellen<strong>in</strong>formationen schrittweise<br />
anfor<strong>der</strong>n. Die Berechtigung zum Lesen bzw. Schreiben <strong>der</strong> e<strong>in</strong>zelnen OIDs erfolgt bei<br />
SNMPv1 bzw. v2 mittels ”Communitystr<strong>in</strong>g” und die Angabe <strong>der</strong> zum Lesen berechtigten<br />
Hosts o<strong>der</strong> <strong>Netzwerk</strong>e.<br />
Die Funktion ”set” ist nicht ganz unkritisch, da es die e<strong>in</strong>e Steuerung von Geräten<br />
erlaubt, wie z.B. das Abschalten von Ports auf Switches o<strong>der</strong> Routern. Dieses ist jedoch<br />
unter Sicherheitsaspekten nicht unproblematisch, da die Daten meistens unverschlüsselt<br />
übertragen werden und erst die Spezifikation von SNMPv3 komplexere Authentifizierung<br />
erlaubt.<br />
<strong>E<strong>in</strong></strong>e Trap (Kommando trap) geht den umgekehrten Weg. Sie erlaubt es Benachrichtigung<br />
unabhängig von e<strong>in</strong>er Anfrage des Clients an diesen zu übermitteln. Dieses kann<br />
für das Auftreten bestimmter Ereignisse o<strong>der</strong> Bed<strong>in</strong>gungen festgelegt werden, läßt sich jedoch<br />
nicht für beliebige Fel<strong>der</strong> def<strong>in</strong>ieren. Standard-Traps s<strong>in</strong>d z.B. die Information zum<br />
Start des Servers, Traps, die Ausfälle o<strong>der</strong> Wie<strong>der</strong>belebungen von <strong>Netzwerk</strong>verb<strong>in</strong>dungen<br />
kundgeben und e<strong>in</strong>ige Authentifizierungsprobleme. Der Mechanismus zur Def<strong>in</strong>ition von<br />
Trap-Nachrichten hängt von <strong>der</strong> jeweiligen Server-Implementierung ab. Switches und Router<br />
kennen an<strong>der</strong>e und meistens weitaus mehr verschiedene Traps als Endgeräte, die jedoch
16.4. SNMP-IMPLEMENTIERUNGEN UNTER LINUX 235<br />
meistens nicht genormt s<strong>in</strong>d. Auf e<strong>in</strong>er L<strong>in</strong>ux-Workstation ist es schließlich e<strong>in</strong>facher an<strong>der</strong>e<br />
Konzepte als SNMP-Traps zur Behandlung von Ausnahmesituationen umzusetzen.<br />
16.4 SNMP-Implementierungen unter L<strong>in</strong>ux<br />
Wie bereits kurz erwähnt stehen unter L<strong>in</strong>ux e<strong>in</strong>ige Implementierungen von SNMP zur<br />
Verfügung. Jedoch soll sich <strong>der</strong> Artikel auf die aus Sicht des Autors beste und vollständigste<br />
Umsetzung beziehen: Net-SNMP. Nachdem die Entwicklung des bisher im L<strong>in</strong>uxumfeld<br />
recht weit verbreiteten Paketes <strong>der</strong> Carnegie Mellon University (CMU) etwas e<strong>in</strong>geschlafen<br />
ist, genießt das Projekt ”Net-SNMP” zunehmende Beachtung. Es ist aus e<strong>in</strong>em Projekt<br />
<strong>der</strong> University of California <strong>in</strong> Davis hervorgegangen. Das Paket steht unter <strong>der</strong> GPL und<br />
kann über die Projekthomepage (siehe [] netsnmp.org) bezogen werden. In den meisten<br />
Fällen wird man es nicht mehr selbst kompilieren müssen, da es Bestandteil vieler L<strong>in</strong>uxdistributionen<br />
ist. Gründe es selbst zu übersetzen, könnten <strong>in</strong> notwendigen Bugfixes o<strong>der</strong><br />
experimentellen neuen Features liegen.<br />
Das Net-SNMP-Paket be<strong>in</strong>haltet e<strong>in</strong>e C-Bibliothek mit den wesentlichen Funktionen,<br />
den Agenten (SNMP-Server, d.h. snmpd) und Programme zur Datenbeschaffung, welche<br />
die vier Standardkommandos ”get”, ”get-next” und ”trap” enthalten. Die Syntax und die<br />
Namen <strong>der</strong> Standardkommandos s<strong>in</strong>d festgelegt, die <strong>der</strong> von verschiedenen SNMP-Paketen<br />
mitgelieferten Programme jedoch nicht! Bei <strong>der</strong> Vorstellung des Monitor<strong>in</strong>g-Tools Nagios<br />
im zweiten Teil sieht man, das dieses e<strong>in</strong>e eigene SNMP-Umsetzung mitbr<strong>in</strong>gt. Auch Programm<br />
MRTG zur Darstellung <strong>der</strong> Auslastung von <strong>Netzwerk</strong><strong>in</strong>terfaces (siehe []) beziehen<br />
ihre Daten vom SNMP-Agenten, verwenden aber die Aufrufe aus ihrer eigenen Bibliothek.<br />
Net-SNMP implementiert die Funktionalität von SNMPv3 und is modular mittels AgentX<br />
erweiterbar.<br />
16.5 Kommandos zur Datenbeschaffung<br />
Das Beste zum Ausprobieren <strong>der</strong> verschiedenen SNMP-Kommandos ist e<strong>in</strong>e Masch<strong>in</strong>e o<strong>der</strong><br />
<strong>Netzwerk</strong>komponente im eigenen Subnetz. Der ”Communitystr<strong>in</strong>g” zur Authentifizierung<br />
gegenüber dem Agenten sollte bekannt und die eigene IP-Nummer als zugelassen auf <strong>der</strong><br />
entsprechenden Masch<strong>in</strong>e e<strong>in</strong>getragen se<strong>in</strong>. Handelt es sich beim beobachteten Gerät um<br />
e<strong>in</strong>en Net-SNMP-Agenten, werden diese Informationen im Bereich [A]-[D] (siehe Beispiel<br />
weiter unten) <strong>der</strong> Konfigurationsdatei angegeben.<br />
snmpget target-host community sysDescr.0<br />
liefert z.B. die Beschreibung des Gerätes:<br />
system.sysDescr.0 = 3Com SuperStack II<br />
snmpget target-ip community .1.3.6.1.2.1.1.1.0<br />
liefert das identische Ergebnis.<br />
Die Kommandos von Net-SNMP gehorchen dabei folgen<strong>der</strong> Syntax:<br />
Programmname [Optionen...] {} [ ...]<br />
Die Object ID kann immer als Nummer und so als Def<strong>in</strong>ition <strong>in</strong> e<strong>in</strong>er <strong>in</strong>stallierten MIB<br />
angegeben, als Name angegeben werden. Mittels <strong>der</strong> Optionen lassen sich die SNMP-Version<br />
(1,2 o<strong>der</strong> 3) für die Anfrage angeben sowie Spezifika für e<strong>in</strong>zelne Versionen setzen. Daüberh<strong>in</strong>aus<br />
kann bestimmt werden, wie die <strong>E<strong>in</strong></strong>- und Ausgabe und die Darstellung <strong>der</strong> MIB<br />
formatiert werden soll o<strong>der</strong> Debug<strong>in</strong>formationen generiert werden. Snmpget, snmpgetnext<br />
und die abgeleiteten Tools wird man selten direkt e<strong>in</strong>setzen. Sie eignen sich für Tests und
236 KAPITEL 16. NETZWERK ÜBERWACHUNG<br />
e<strong>in</strong>fache Shellskripten. Für die visuelle Darstellung z.B. <strong>der</strong> Auslastung e<strong>in</strong>zelner Ports e<strong>in</strong>es<br />
L<strong>in</strong>uxrouters o<strong>der</strong> e<strong>in</strong>es Switch kommt MRTG (Multi Router Traffic Grapher, siehe Kap.<br />
16.8) <strong>in</strong> Frage, da hier neben dem momentanen Zustand auch Zeitreihen gut darzustellen<br />
s<strong>in</strong>d.<br />
Mit dem Programm snmptranslate läßt sich vergleichbar mit ”nslookup” im Doma<strong>in</strong><br />
Name System e<strong>in</strong>e Übersetzung zwischen Nummer und Name auslesen. Darüberh<strong>in</strong>aus bekommt<br />
man weitere Informationen, z.B. e<strong>in</strong>e Beschreibung <strong>der</strong> Variablen und ihren Typ<br />
angezeigt.<br />
Kasten:<br />
Ausgabe des Kommandos ”snmptranslate -Td -OS system.sysDescr”<br />
.1.3.6.1.2.1.1.1<br />
sysDescr OBJECT-TYPE<br />
-- FROM SNMPv2-MIB, RFC1213-MIB<br />
-- TEXTUAL CONVENTION DisplayStr<strong>in</strong>g<br />
SYNTAX OCTET STRING (0..255)<br />
DISPLAY-HINT "255a"<br />
MAX-ACCESS read-only<br />
STATUS current<br />
DESCRIPTION "A textual description of the entity. This value should<br />
<strong>in</strong>clude the full name and version identification of the<br />
system’s hardware type, software operat<strong>in</strong>g-system, and<br />
network<strong>in</strong>g software."<br />
::= { iso(1) org(3) dod(6) <strong>in</strong>ternet(1) mgmt(2) mib-2(1) system(1) 1 }<br />
Programme, wie snmpnetstat, snmpstatus o<strong>der</strong> snmpdf vere<strong>in</strong>fachen wichtige Standardanfragen,<br />
z.B. nach offenen TCP-Verb<strong>in</strong>dungen und UDP-Ports, dem Gerätetyp und se<strong>in</strong>en<br />
Interfaces o<strong>der</strong> dem freien Speicherplatz. Hier s<strong>in</strong>d im Gegensatz zu snmpget, snmpgetnext,<br />
snmptable ke<strong>in</strong>e OIDs anzugeben.<br />
Da es recht aufwändig ist, sich mittels snmpget o<strong>der</strong> snmpgetnext e<strong>in</strong>en umfassenden<br />
Überblick über den Baum verfügbarer Daten e<strong>in</strong>es Endgerätes o<strong>der</strong> <strong>Netzwerk</strong>knotens zu<br />
verschaffen, br<strong>in</strong>gt snmpwalk Erleichterung. Dieses Programm erlaubt es den gesamten<br />
Datenbaum e<strong>in</strong>es Agenten sukzessive abzufragen o<strong>der</strong> Unterbäume vollständig abzulaufen.<br />
Letzteres geschieht über die Angabe e<strong>in</strong>es Teils des OID. Je länger <strong>der</strong> Object Identifier<br />
wird, desto genauer wird <strong>der</strong> abzufragende Teil des Baumes e<strong>in</strong>gegrenzt und kürzer wird<br />
die Ausgabe.<br />
16.6 Konfiguration des UCD-SNMP<br />
16.6.1 Der Kopf def<strong>in</strong>iert die Zugriffs-Policies<br />
Der Server ”snmpd”, welcher als Softwareagent auf <strong>der</strong> zu beobachtenden Masch<strong>in</strong>e läuft<br />
wird mittels /etc/ucdsnmpd.conf gesteuert und üblicherweise durch e<strong>in</strong> Runlevel-Skript <strong>in</strong><br />
/etc/<strong>in</strong>it.d gestartet.<br />
Die ersten vier Abschnitte ([A]-[D]) <strong>der</strong> Konfigurationsdatei dienen <strong>der</strong> Authentifizierung,<br />
wobei jeweils zu überlegen ist, welche Hosts welche Daten pollen dürfen. In den<br />
meisten Fällen genügt e<strong>in</strong>e Beschränkung auf das lokale Subnetz, wobei jedoch auch aus-<br />
schließlich die Management Station (also <strong>der</strong> Rechner, von dem die<br />
Überwachung läuft)<br />
e<strong>in</strong>getragen werden kann. Der Agent kann mehrere unterschiedliche Access-Regeln def<strong>in</strong>ieren.<br />
<strong>E<strong>in</strong></strong>e solche Regel besteht aus e<strong>in</strong>er MIB, die alle Bereiche <strong>der</strong> MIB enthält, auf welche
16.6. KONFIGURATION DES UCD-SNMP 237<br />
e<strong>in</strong> Zugriff für die Nutzergruppe gestattet ist. Festgelegt wird weiterh<strong>in</strong> <strong>der</strong> Zugriffsmodus,<br />
welcher im Beispiel für Anfragen aus dem <strong>Netzwerk</strong> nur lesend erfolgen darf.<br />
Die Gesamtheit <strong>der</strong> Verwaltungsrechte wird <strong>in</strong> e<strong>in</strong>em Community Profile zusammengefaßt.<br />
Anhand des vom Client mitgelieferten Community Passworts (hier immer mit ”community”<br />
bezeichnet) bestimmt <strong>der</strong> Agent, ob MIB Objekte für die aktuelle Anfrage sichtbar<br />
s<strong>in</strong>d o<strong>der</strong> modifiziert werden dürfen. Wird das eigene LAN als unsicher e<strong>in</strong>geschätzt, kann<br />
e<strong>in</strong>e Authentifizierung nach SNMPv3 e<strong>in</strong>gestellt werden. Die Steuerung erfolgt mit den<br />
Kommandos snmpusm für die Benutzer- und snmpvacm für Zugriffsrechteverwaltung. Jedoch<br />
s<strong>in</strong>d Probleme mit Clients zu erwarten, welche nicht SNMPv3 beherrschen.<br />
Ohne weitere Konfiguration stellt Net-SNMP die meisten <strong>der</strong> üblichen Variablen <strong>der</strong><br />
Standard-MIB unter L<strong>in</strong>ux zur Verfügung. Abschnitt [E] erlaubt das Setzen <strong>der</strong> Standardvariablen<br />
Location- und Kontakt OID. Wer e<strong>in</strong>en näheren Blick auf die unterschiedlichen<br />
MIBs werfen möchte, kann unterhalb des Verzeichnisses /usr/share/mibs/(ietf) bzw.<br />
/usr/share/snmp/mibs nachsehen. Zum Standard gehören auch die <strong>Netzwerk</strong><strong>in</strong>formationen<br />
zu den konfigurierten Interfaces, Daten zu ARP, ICMP, TCP, jeweils <strong>in</strong>klusive <strong>der</strong> Anzahl<br />
<strong>der</strong> transferierten Pakete <strong>in</strong> verschiedenen Kategorien.<br />
16.6.2 Parameter <strong>der</strong> ”Enterprise”-Erweiterungen<br />
Über den Standard h<strong>in</strong>aus schafft Net-SNMP e<strong>in</strong>e Schnittstelle, festzustellen, ob bestimmte<br />
Prozesse laufen. Die MIB bef<strong>in</strong>det sich im ”Enterprises” Unterbaum (1.3.6.1.4.1) und wird<br />
mit <strong>der</strong> ID 2021 als UCD-SNMP-MIB e<strong>in</strong>gehangen. Die Prozesstabelle wie<strong>der</strong>um f<strong>in</strong>det<br />
sich unterhalb <strong>der</strong> ID 2, zusammengesetzt numerisch unterhalb 1.3.6.1.4.1.2021.2. In <strong>der</strong><br />
Konfiguationsdatei wird nach dem Schlüsselwort ”proc” das zu überwachende Programm<br />
und dann die Zahl <strong>der</strong> m<strong>in</strong>imal und maximal erlaubten Instanzen e<strong>in</strong>getragen werden.<br />
Abgefragt werden kann diese Tabelle z.B. mit:<br />
snmptable target-host community .1.3.6.1.4.1.2021.2<br />
welches als Ausgabe <strong>in</strong> Abhängigkeit <strong>der</strong> gezeigten Konfigurationsdatei folgendes produziert:<br />
SNMP table: enterprises.ucdavis.prTable<br />
prIndex prNames prM<strong>in</strong> prMax prCount<br />
1 automount 2 2 2<br />
2 X 1 2 1<br />
3 kdm 1 1 2<br />
4 ypb<strong>in</strong>d 1 4 4<br />
5 sshd 1 10 1<br />
6 axnet 0 1 1<br />
7 rwhod 0 1 1<br />
8 cron 0 1 1<br />
9 x<strong>in</strong>etd 0 1 1<br />
10 chooser 0 1 0<br />
16.6.3 Erweiterung durch externe Skripten und Programme<br />
Abschnitt [G] beschäftigt sich mit e<strong>in</strong>em speziellen, weil flexiblen Zweig des Unterbaumes<br />
”enterprises.ucdavis” (hier 1.3.6.1.4.1.2021.8). Hier wird dem Agenten erlaubt e<strong>in</strong> externes<br />
Skript auszuführen und das Resultat zurückzumelden. Dieser Bereich wird nicht fest vorgegeben,<br />
son<strong>der</strong>n kann vom Adm<strong>in</strong>istrator <strong>in</strong> <strong>der</strong> Konfigurationsdatei def<strong>in</strong>iert werden. Jede<br />
weitere Zeile erzeugt e<strong>in</strong>en weiteren Indexe<strong>in</strong>trag <strong>in</strong> die MIB-Tabelle.<br />
snmpwalk target-host public enterprises.ucdavis.extTable.extEntry.extResult
238 KAPITEL 16. NETZWERK ÜBERWACHUNG<br />
liefert e<strong>in</strong>e Ergebnisliste zurück, wobei die Ergebnisse die Shell-Variable des Rückgabewertes<br />
($?) repräsentieren:<br />
enterprises.ucdavis.extTable.extEntry.extResult.1 = 34<br />
enterprises.ucdavis.extTable.extEntry.extResult.2 = 33<br />
enterprises.ucdavis.extTable.extEntry.extResult.3 = 28<br />
enterprises.ucdavis.extTable.extEntry.extResult.4 = 0<br />
enterprises.ucdavis.extTable.extEntry.extResult.5 = 0<br />
enterprises.ucdavis.extTable.extEntry.extResult.6 = 0<br />
enterprises.ucdavis.extTable.extEntry.extResult.7 = 252<br />
enterprises.ucdavis.extTable.extEntry.extResult.8 = 253<br />
enterprises.ucdavis.extTable.extEntry.extResult.9 = 254<br />
enterprises.ucdavis.extTable.extEntry.extResult.10 = 255<br />
enterprises.ucdavis.extTable.extEntry.extResult.11 = 153<br />
Dieses Ergebnis läßt sich auch mit dem Kommando ”snmpbulkget -v2c ...” erziehlen,<br />
wobei mit <strong>der</strong> Option ”-v2c” e<strong>in</strong>e Session nach SNMPv2c zwischen dem Client und dem<br />
Agent generiert wird.<br />
Die MIB (bzw. e<strong>in</strong> Teilzweig dieser) wurde im vorliegenden Fall dazu e<strong>in</strong>gesetzt, externe<br />
Shellskripten auszuführen, welche wie<strong>der</strong>um das /proc-Device des Kernels auslesen und<br />
die evtl. erhaltenen Daten über den Returnwert zurückgeben. Die Erweiterung hier dazu<br />
benutzt, Informationen des System Management Busses (SMB, spezieller Bus mo<strong>der</strong>ner<br />
Ma<strong>in</strong>boards zur Steuerung und Überwachung von Komponenten) zu CPU-Temperatur und<br />
Drehzahl <strong>der</strong> verschiedenen Lüfter auszuwerten:<br />
List<strong>in</strong>g des Bash-Skriptes:<br />
# script for read<strong>in</strong>g lm_sensor <strong>in</strong>formation from procfs to pass<br />
# them via net-snmp<br />
#<br />
case "$1" <strong>in</strong><br />
*temp*)<br />
EXIT=( ‘cat /proc/sys/dev/sensors/*/$1 2>/dev/null|| echo 20‘ )<br />
EXIT3=${EXIT[2]}<br />
EXIT=${EXIT3%.*}<br />
if test ! $EXIT ; then EXIT=25 ; fi<br />
;;<br />
*fan*)<br />
EXIT=( ‘cat /proc/sys/dev/sensors/*/$1 2>/dev/null|| echo 200‘ )<br />
EXIT=${EXIT[1]}<br />
;;<br />
esac<br />
exit $EXIT<br />
<strong>E<strong>in</strong></strong>e <strong>E<strong>in</strong></strong>schränkung besteht jedoch im maximalen Return-Wert, welcher 255 nicht überschreiten<br />
kann. Vorsicht ist auch geboten, wenn man versucht, temporäre Daten auf <strong>der</strong><br />
Festplatte zwischenzuspeichern, da diese potentiellen Angreifern e<strong>in</strong>en <strong>E<strong>in</strong></strong>stieg erlauben<br />
könnten. Den Weg <strong>der</strong> Daten bis zur Anzeige im Monitor<strong>in</strong>g-Tool kann man sich so veranschaulichen:<br />
16.7 Überwachung weiterer Parameter<br />
Der anschließende Abschnitt ([H]) def<strong>in</strong>iert das Verhalten e<strong>in</strong>es weiteren Astes <strong>in</strong> <strong>der</strong> UCD-<br />
SNMP-MIB. Mit den Object Identifiers diesen Bereiches läßt sich <strong>der</strong> verbleibende Festspeicherplatz<br />
nach Lage im Dateisystembaum beobachten. Der Zahlenwert def<strong>in</strong>iert die untere
16.7.<br />
ÜBERWACHUNG WEITERER PARAMETER 239<br />
Grenze, ab <strong>der</strong> e<strong>in</strong>e Warnmeldung <strong>in</strong> die Ergebnistabelle e<strong>in</strong>getragen wird. Das nächste Beispielkommando<br />
liefert die z.B. prozentuale Belegung <strong>der</strong> als ”Rootfilesystem” gemounteten<br />
Festplatte:<br />
dirk@l<strong>in</strong>ux:~/kurs> snmpget target-host public .1.3.6.1.4.1.2021.9.1.9.1<br />
enterprises.ucdavis.dskTable.dskEntry.dskPercent.1 = 37<br />
Das Programm snmpgetnext kann man benutzen, um den zweiten Wert <strong>der</strong> Liste (die<br />
prozentuale Auslastung von /tmp) zu erhalten. Auch [I] konfiguriert e<strong>in</strong>en Unterbaum<br />
<strong>der</strong> UCD-SNMP-MIB: Die LoadTable (1.3.6.1.4.1.2021.10). Die Ganzzahlwerte nach dem<br />
Schlüsselwort geben die Maximalwerte an, bis zu denen ke<strong>in</strong> Warne<strong>in</strong>trag analog zur Dateisystembelegung<br />
generiert wird.<br />
Die vorhergehenden Beispiele bezogen sich auf die Net-SNMP-Implementation, e<strong>in</strong>e Zusammenarbeit<br />
mit an<strong>der</strong>en Komponenten ist natürlich angestrebt und klappt entsprechend.<br />
Z.B. lässt sich mit dem Befehl:<br />
dirk@l<strong>in</strong>ux:~/kurs> snmpset 10.10.1.1 private <strong>in</strong>terfaces.ifTable.ifEntry.<br />
ifAdm<strong>in</strong>Status.101 i down<br />
<strong>der</strong> Port Nummer 1 auf e<strong>in</strong>er 3COM SuperStack3 abschalten. Analog funktioniert dieses<br />
auch mit e<strong>in</strong>em Cisco C3500X, wobei die Portnummern hier von 1 - n durchnummeriert<br />
s<strong>in</strong>d (n statt 101, wie im obigen Beispiel).<br />
16.7.1 Weitergehende Ergänzungen<br />
Wem die e<strong>in</strong>zeilige Ausgabe nur des Rückgabewertes <strong>in</strong> Abschnitt [G] nicht genügte, f<strong>in</strong>det<br />
se<strong>in</strong>e Vorstellungen evtl. <strong>in</strong> [J] gelöst. Mit diesem MIB-Bereich ist es möglich mehrzeilige<br />
Ausgaben zuzulassen, die als entsprechende Tabellene<strong>in</strong>träge zurückgeliefert werden.<br />
In <strong>der</strong> Beispielkonfigurationsdatei werden die OIDs (1.3.6.1.4.1.2021.51 - 53) def<strong>in</strong>iert.<br />
Diese generieren verschiedene Ausgaben zur Hardwareausstattung und angemeldeten lokalen<br />
Benutzern <strong>der</strong> Masch<strong>in</strong>e aus dem Aufruf von externen Programmen. Auf diese Weise<br />
kann Informationsbeschaffung auf SNMP abgebildet werden, welches dann e<strong>in</strong> <strong>E<strong>in</strong></strong>loggen<br />
auf dem Zielsystem unnötig macht. <strong>E<strong>in</strong></strong>e Konfigurationszeile ist so aufgebaut, dass nach<br />
dem Schlüsselwort ”exec” die OID des Objektes angegeben wird, gefolgt vom Namen des<br />
Objekts, dem Aufruf des korrespondierenden externen Programms o<strong>der</strong> Skriptes <strong>in</strong>klusive<br />
eventueller Optionen.<br />
<strong>E<strong>in</strong></strong>e ganze Reihe weiterer Laufzeit<strong>in</strong>formationen ließe sich auf diesem Wege beschaffen.<br />
Jedoch gibt es e<strong>in</strong>ige <strong>E<strong>in</strong></strong>schränkungen bezüglich <strong>der</strong> verwendeten Datenfel<strong>der</strong> (nur Text-<br />
Fel<strong>der</strong> o<strong>der</strong> Return-Codes bis zum maximalen Wert von 255 s<strong>in</strong>d erlaubt), so dass nach<br />
e<strong>in</strong>er Testphase (z.B. <strong>der</strong> Auswertung <strong>der</strong> Meldungen des SMB) über e<strong>in</strong>e feste <strong>E<strong>in</strong></strong>b<strong>in</strong>dung<br />
als Modul nachgedacht werden sollte. <strong>E<strong>in</strong></strong>e Anleitung, wie e<strong>in</strong> Modul für den UCD-SNMP<br />
zu schreiben ist und wie die dazugehörige MIB designt werden muss, f<strong>in</strong>det sich auf <strong>der</strong><br />
Projekt-Homepage.<br />
In <strong>der</strong> Tutorial-Sektion f<strong>in</strong>det sich die Beschreibung e<strong>in</strong>es Toolkits, welches das Programmieren<br />
eigener Erweiterungen mittels C erlaubt. Enthalten s<strong>in</strong>d <strong>in</strong> <strong>der</strong> Schritt-für-<br />
Schrittanleitung e<strong>in</strong> Makefile, <strong>der</strong> Beispiel-Code e<strong>in</strong>er SNMP-Applikation und e<strong>in</strong>e Tutorial-<br />
MIB mit Hea<strong>der</strong>datei und e<strong>in</strong>e C-Sourcedatei. Hea<strong>der</strong> und C-Source s<strong>in</strong>d zum größten Teil<br />
mit mib2c erstellt worden, was e<strong>in</strong>en guten Ausgangspunkt für eigene Versuche liefert. Beim<br />
Neuübersetzen des Agenten kann das experimentelle Modul e<strong>in</strong>gefügt werden.<br />
Auf diesem Wege könnte <strong>der</strong> Umweg über das oben beschriebene Shellskript zugunsten<br />
e<strong>in</strong>er festen Implementierung abgelöst werden. Damit würden sich weiterh<strong>in</strong> die Beschränkungen<br />
<strong>der</strong> Variablen aufheben lassen, da man <strong>der</strong>en Deklaration mittels MIB selbst<br />
<strong>in</strong> <strong>der</strong> Hand hat.
240 KAPITEL 16. NETZWERK ÜBERWACHUNG<br />
16.7.2 Parameter <strong>der</strong> Host-Ressource-Erweiterungen<br />
Wurden die SNMP-Bibliotheken und <strong>der</strong> Agent mit <strong>der</strong> Unterstützung für die HOST-<br />
RESOURCES-MIB übersetzt, stehen weitere Informationen zur Verfügung.<br />
Unterhalb des Datenbaumes .1.3.6.1.2.1.25, wird diese MIB e<strong>in</strong>gehängt und (unter <strong>der</strong> Voraussetzung,<br />
dass die Werte beschafft werden können) werden die Variablen ausgegeben.<br />
Siehe Tabelle 14.4<br />
Beispielkonfiguration, List<strong>in</strong>g von /etc/ucdsnmpd.conf:<br />
# [A] Access Control<br />
com2sec local localhost public<br />
com2sec mynetwork 172.16.30.0/22 public<br />
com2sec mynetwork 10.0.0.0/8 public<br />
# [B] Second, map the security names <strong>in</strong>to group names:<br />
group MyRWGroup v1 local<br />
group MyRWGroup v2c local<br />
group MyRWGroup usm local<br />
group MyROGroup v1 mynetwork<br />
group MyROGroup v2c mynetwork<br />
group MyROGroup usm mynetwork<br />
# [C] Third, create a view for us to let the groups have rights to:<br />
view all <strong>in</strong>cluded .1<br />
# [D] F<strong>in</strong>ally, grant the 2 groups access to the 1 view with different<br />
# write permissions:<br />
# context sec.model sec.level match read write notif<br />
access MyROGroup "" any noauth exact all none none<br />
access MyRWGroup "" any noauth exact all all none<br />
# [E] System contact <strong>in</strong>formation<br />
syslocation Internet-AG Universitaet Goett<strong>in</strong>gen<br />
syscontact <br />
# [F] Process checks.<br />
proc automount 2 2<br />
proc X 2 1<br />
proc kdm 1 1<br />
proc ypb<strong>in</strong>d 4 1<br />
proc sshd 10 1<br />
proc axnet 1 0<br />
proc rwhod 1 0<br />
proc cron 1 0<br />
proc x<strong>in</strong>etd 1 0<br />
proc chooser 1 0<br />
# [G] Executables/scripts<br />
exec sensors /b<strong>in</strong>/sh /usr/share/snmp/sensors temp1<br />
exec sensors /b<strong>in</strong>/sh /usr/share/snmp/sensors temp2<br />
exec sensors /b<strong>in</strong>/sh /usr/share/snmp/sensors temp3<br />
exec sensors /b<strong>in</strong>/sh /usr/share/snmp/sensors fan1<br />
exec sensors /b<strong>in</strong>/sh /usr/share/snmp/sensors fan2<br />
exec sensors /b<strong>in</strong>/sh /usr/share/snmp/sensors fan3<br />
exec empty /b<strong>in</strong>/echo 252<br />
exec empty /b<strong>in</strong>/echo 253
16.8. MRTG ALS FRONTEND ZUR ANZEIGE VON ZEITREIHEN 241<br />
exec empty /b<strong>in</strong>/echo 254<br />
exec empty /b<strong>in</strong>/echo 255<br />
exec user_activity /b<strong>in</strong>/sh /usr/share/snmp/uabic<br />
# [H] disk checks<br />
disk / 100000<br />
disk /tmp 20000<br />
# [I] load average checks<br />
load 5 4 4<br />
# [J] Extensible sections<br />
exec .1.3.6.1.4.1.2021.51 users /usr/b<strong>in</strong>/who<br />
exec .1.3.6.1.4.1.2021.52 pci_devices /sb<strong>in</strong>/lspci<br />
exec .1.3.6.1.4.1.2021.53 cpu<strong>in</strong>fo /b<strong>in</strong>/cat /proc/cpu<strong>in</strong>fo<br />
16.8 MRTG als Frontend zur Anzeige von Zeitreihen<br />
Der Multi Router Traffic Grapher ist nun e<strong>in</strong>e Anwendung, welche es ermöglicht auf Basis<br />
von SNMP <strong>Netzwerk</strong>geräte zu überwachen. Zur Visualisierung erzeugt MRTG HTML-Code.<br />
In diesen Code werden PNG-Grafiken e<strong>in</strong>gebunden, welche die Belastung e<strong>in</strong>er bestimmten<br />
<strong>E<strong>in</strong></strong>heit (<strong>Netzwerk</strong><strong>in</strong>terface, Zahl <strong>der</strong> Benutzer, Load <strong>der</strong> Masch<strong>in</strong>e) visualisieren. MRTG<br />
erzeugt diese Grafen fortlaufend mit jedem Aufruf des Programms.<br />
Das Tool basiert auf e<strong>in</strong>em Perl-Skript, das das Simple Network Management Protocol<br />
(SNMP) benutzt, um die Daten von den <strong>Netzwerk</strong>komponenten o<strong>der</strong> Endgeräten zu pollen.<br />
<strong>E<strong>in</strong></strong> C-Programm protokolliert die Werte mit, um erzeugt daraus Auslastungsstatistiken und<br />
Auslastunggrafen. In Ergänzung zur <strong>der</strong> detaillierten, täglichen Ansicht, erzeugt MRTG<br />
Grafen, die den Duchsatz <strong>der</strong> letzten sieben Tage, <strong>der</strong> letzten vier Wochen und <strong>der</strong> letzten<br />
zwölf Monate wie<strong>der</strong>geben. Dies ist möglich, da MRTG allen Daten, die es aus dem Router<br />
ausließt, <strong>in</strong> e<strong>in</strong>e Log-Datei schreibt. Für die Beobachtung längerer Zeiträume bietet sich<br />
e<strong>in</strong>e Komb<strong>in</strong>ation mit dem RRD-Tool an. Dieses ist e<strong>in</strong>e spezielle Datenbank, welche ihre<br />
<strong>E<strong>in</strong></strong>träge im Round-Rob<strong>in</strong>-Verfahren speichert.<br />
MRTG speichert die Informationen über die zu üeberwachenden Systeme <strong>in</strong> <strong>der</strong> Datei<br />
mrtg.cfg. In dem MRTG-Paket bef<strong>in</strong>det sich e<strong>in</strong> Perl-Skript, welches das Erzeugen e<strong>in</strong>er<br />
Konfigurationsdatei erheblich vere<strong>in</strong>facht: cfgmaker. Falls man MRTG selbst übersetzt<br />
hat, f<strong>in</strong>det man cfgmaker <strong>in</strong> dem Unterverzeichnis ./run. <strong>E<strong>in</strong></strong> Aufruf zur Erzeugung <strong>der</strong><br />
Konfigurationsdatei könnte so aussehen:<br />
cfgmaker --global ’WorkDir: /www/mrtg’ --output /etc/mrtg.cfg --global \<br />
’Options[_]: bits,growright’ @<br />
List<strong>in</strong>g e<strong>in</strong>er Beispielkonfigurationsdatei mrtg.cfg:<br />
######################################################################<br />
# Multi Router Traffic Grapher -- Sample Configuration File<br />
######################################################################<br />
# This file is for use with mrtg<br />
# Global configuration<br />
WorkDir: /var/www/mrtg<br />
WriteExpires: Yes<br />
Title[^]: Traffic Analysis for
242 KAPITEL 16. NETZWERK ÜBERWACHUNG<br />
# 2048kBit leased l<strong>in</strong>e<br />
# ----------------<br />
#Title[leased]: a 2048kBit leased l<strong>in</strong>e<br />
#PageTop[leased]: Our 2048kBit l<strong>in</strong>k to the rest of the <strong>in</strong>ternet<br />
#Target[leased]: 1:public@router.my.doma<strong>in</strong><br />
#MaxBytes[leased]: 200000<br />
16.9 <strong>E<strong>in</strong></strong>ige abschließende Worte zu SNMP<br />
Während SNMP recht e<strong>in</strong>fach und flexibel e<strong>in</strong>zusetzen ist, hat es jedoch auch e<strong>in</strong>ige Nachteile.<br />
Das Sicherheitsmodell <strong>der</strong> Version 1 und 2 ist schwach. Verwendet man SNMP zum<br />
Setzen von Variablen kann leicht etwas schief gehen, so dass man z.B. den Switchport<br />
abschaltet über den man mit dem <strong>Netzwerk</strong> verbunden ist. Schwierig wird es auch aufkommende<br />
objektorientierte Ansätze, wie die Beschreibung mittels XML <strong>in</strong> SNMP umzusetzen.<br />
SNMP war lange Zeit die Spezialität weniger <strong>Netzwerk</strong>adm<strong>in</strong>istratoren und Programmierer,<br />
so dass das Wissen darüber immer noch nicht sehr weit verbreitet ist. Inzwischen wurde<br />
die erdrückende Vormacht <strong>der</strong> Kommandozeile durch e<strong>in</strong>e Reihe grafischer Erweiterungen<br />
aufgelöst, so dass auch SNMP-Neul<strong>in</strong>gen e<strong>in</strong> zügiger <strong>E<strong>in</strong></strong>stieg gel<strong>in</strong>gen kann.<br />
Trotz <strong>der</strong> genannten Probleme ist SNMP aus Sicht des Autors das beste Protokoll<br />
zur <strong>Netzwerk</strong>überwachung. Es ist universal, bandbreitenschonend und wirklich plattform<br />
unabhängig. Die Hersteller von <strong>Netzwerk</strong>komponenten setzen weiterh<strong>in</strong> auf SNMP, alle<br />
neuen Gerätetypen die herauskommen, wie z.B. Access-Po<strong>in</strong>ts für Wireless LAN, verfügen<br />
über e<strong>in</strong>e entsprechende Schnittstelle. SNMP <strong>in</strong> <strong>der</strong> dritten Version, wie es vor e<strong>in</strong>iger<br />
Zeit spezifiziert wurde, erlaubt bessere Authentifizierungsverfahren und Verschlüsselung <strong>der</strong><br />
Daten. Darüberh<strong>in</strong>aus ist es mittels Modularisierung über Sub-Agenten flexibler geworden.<br />
Die Popularität von L<strong>in</strong>ux und die <strong>in</strong>zwischen mit Net-SNMP und an<strong>der</strong>en frei zur<br />
Verfügung stehenden Implementationen haben ihren Betrag zur Verbreitung von SNMP erbracht.<br />
Alle großen L<strong>in</strong>ux Distributionen enthalten e<strong>in</strong>e ganze Reihe von SNMP Software,<br />
mit <strong>der</strong> sich viele anstehende Probleme bereits lösen lassen. <strong>E<strong>in</strong></strong> attraktives Tool zur Visualisierung<br />
spezieller SNMP-Variablen, wie die Auslastung e<strong>in</strong>es Endgerätes o<strong>der</strong> e<strong>in</strong>zelner<br />
Schnittstellen von <strong>Netzwerk</strong>knoten, wurde mit MRTG bereits vorgestellt. NetSa<strong>in</strong>t, welches<br />
neben an<strong>der</strong>en Überwachungsfunktionen SNMP zum Sammeln <strong>der</strong> Daten e<strong>in</strong>bezieht, soll<br />
im zweiten Teil dieses Artikels besprochen werden.<br />
16.10 Weiterführende Literatur<br />
[1] Homepage des Net-SNMP: http://netsnmp.sourceforge.net<br />
[2] Scotty-SNMP-Bibliothek: http://wwwsnmp.cs.utwente.nl/ schoenw/scotty<br />
[3] MRTG-Homepage: http://www.mrtg.org<br />
[4] Projektbericht zur Überwachung großer <strong>Netzwerk</strong>e an <strong>der</strong> Universität Gött<strong>in</strong>gen -<br />
http://www.stud.uni-goett<strong>in</strong>gen.de/ dsuchod/dgsvgr<br />
[5] Cheops <strong>der</strong> Klassiker: http://www.marko.net/cheops<br />
[6] Cheops Next-Generation: http://cheops-ng.sourceforge.net<br />
[7] MIB-Browser: http://goldplated.atlcartel.com/mbrowse.html<br />
[8] Douglas E. Comer, TCP/IP
16.10. WEITERFÜHRENDE LITERATUR 243<br />
OID Datentyp Beschreibung<br />
Standard-OIDs (MIB-<br />
II)<br />
system.sysDescr text Geräte<strong>in</strong>formation: Hersteller, Name des Modells,<br />
Version <strong>der</strong> SOftware o.ä.<br />
system.sysLocation text Aufstellungsort des Gerätes<br />
system.sysUpTime <strong>in</strong>t Millisekunden seit dem Start des Agenten<br />
system.syscontact text Kontakt zum Adm<strong>in</strong> des Gerätes<br />
system.sysName text Name <strong>der</strong> Masch<strong>in</strong>e; üblicherweise <strong>der</strong> DNS-<br />
Name<br />
<strong>in</strong>terfaces.ifNumber <strong>in</strong>t Zahl <strong>der</strong> vorhandenen <strong>Netzwerk</strong>schnittstellen<br />
<strong>in</strong>terfaces.ifTable table Array <strong>der</strong> verschiedenen Infos pro Schnittstelle<br />
(Name, Typ, Geschw<strong>in</strong>digkeit, MTU)<br />
at.atTable table ARP-Tabelle<br />
ip.ipforward<strong>in</strong>g <strong>in</strong>t Bei Geräten mit mehreren Interfaces: 1, falls<br />
IP-Forward<strong>in</strong>g stattf<strong>in</strong>det, sonst 2<br />
ip.ipAddrTable table IP-Informationen <strong>der</strong> versch. Interfaces<br />
(Broadcast-, Routeradressen, Netzmasken und<br />
Metrik)<br />
icmp.* <strong>in</strong>t <strong>E<strong>in</strong></strong>e Menge von ICMP-Statistiken<br />
tcp.tcpConnTable table Liste <strong>der</strong> bestehenden TCP-Verb<strong>in</strong>dungen mit<br />
Status<br />
udp.udpTable table Liste <strong>der</strong> offenen UDP-Sockets<br />
snmp.* <strong>in</strong>t <strong>E<strong>in</strong></strong>e Menge von SNMP-Statistiken<br />
OIDs <strong>der</strong> UCD-SNMP-<br />
MIB<br />
prTable.* table Tabelle <strong>der</strong> auf m<strong>in</strong>imal und maximal laufende<br />
Instanzen zu überwachende Prozesse<br />
memory.memTotalReal <strong>in</strong>t Menge des zur Verfügung stehenden Arbeitsspeichers<br />
extTable.* table Ausbaubare Spezial-MIB zur Ausführung von<br />
Programmen und Skripten<br />
laTable.* <strong>in</strong>t Load Average Werte (1, 5, 15 M<strong>in</strong>uten Intervall)<br />
systemStats.* <strong>in</strong>t <strong>E<strong>in</strong></strong>e Menge systemspezifischer Variablen und<br />
Maximalwerte<br />
ucdExperimental.* <strong>E<strong>in</strong></strong>trag für die später beschriebene eigene<br />
MIB-Erweiterung<br />
Tabelle 16.2: Beispieldaten (OIDs) <strong>der</strong> Standard-MIBs
244 KAPITEL 16. NETZWERK ÜBERWACHUNG<br />
Kommando Bedeutung<br />
get-request Ermittele den Wert e<strong>in</strong>er bestimmten Variablen<br />
get-next- Ermittele den Wert <strong>der</strong> nächsten Variablen ohne<br />
request ihren genauen Namen zu kennen<br />
get-bulk- Ermittele e<strong>in</strong>en Block von Variablen (z.B. Tarequestbellen)<br />
response Anwort auf o.g. Requests<br />
set-request Speichere e<strong>in</strong>en bestimmten Wert <strong>in</strong> e<strong>in</strong>e Variable<br />
<strong>in</strong>form-request Referenz zu weiteren z.B. Proxy-Daten<br />
trap Antwort, ausgelöst durch e<strong>in</strong>en Event-Trigger<br />
Tabelle 16.3: Das SNMP-Kommando-Set<br />
OID Bedeutung<br />
hrSystem Zahl <strong>der</strong> laufenden Prozesse und angemeldeten Benutzer<br />
hrStorage Speicher <strong>der</strong> verschiedensten Form, wie Real Memory,<br />
Swap, Memory Buffers<br />
hrDevice Liste verfügbarer Geräte, wie Drucker, Prozessor,<br />
Ma<strong>in</strong>boardchipset<br />
hrSWRun Liste <strong>der</strong> laufenden Prozesse (wie ”ps”)<br />
hrSWRunPerf CPU-Verbrauch <strong>der</strong> laufenden Prozesse<br />
hrSWInstalled Liste <strong>der</strong> <strong>in</strong>stallierten RPM-Pakete (setzt e<strong>in</strong> System<br />
auf Basis des Redhat-Package-Managers voraus)<br />
mit Installationsdatum<br />
Tabelle 16.4: Variablen <strong>der</strong> Host-MIB
Kapitel 17<br />
Systemsicherheit<br />
17.1 Generelle Überlegungen<br />
Sichere Rechner bzw. Betriebssysteme kann es nicht geben. Diese werden von Menschen<br />
geschaffen und die Ideen zur Sicherheit werden meistens durch Bequemlichkeit, Unaufmerksamkeit<br />
o<strong>der</strong> Schlampigkeit wie<strong>der</strong> ausgehebelt. Weiterh<strong>in</strong> möchte ke<strong>in</strong> Adm<strong>in</strong>istrator Tag<br />
und Nacht vor e<strong>in</strong>er Masch<strong>in</strong>e hocken und nachsehen, was die Benutzer, Services (Dienstprogramme)<br />
und die verschiedenen Prozesse so treiben.<br />
Generell gibt es zwei Sicherheitsbereiche, die man unterscheiden kann: Die (physikalische)<br />
Sicherheit <strong>der</strong> Masch<strong>in</strong>e selbst und Angriffsmöglichkeiten aus dem <strong>Netzwerk</strong> bzw.<br />
Internet.<br />
<strong>E<strong>in</strong></strong>e weitere Möglichkeit sich aktiv gegen Angreifer aus dem Netz zu schützen und auch<br />
nur bestimmte Kanäle aus dem eigenen Netz zuzulassen, ist das Aufsetzen e<strong>in</strong>er Firewall<br />
(“Schutzwand”); vgl. Kap.19.1<br />
17.2 Sicherheit auf dem Rechner<br />
17.2.1 <strong>E<strong>in</strong></strong>leitung<br />
<strong>E<strong>in</strong></strong> Angriff e<strong>in</strong>es Hackers war bereits im ersten Schritt erfolgreich, wenn er sich unerlaubt<br />
als ganz normaler Benutzer Zugriff auf e<strong>in</strong>er Masch<strong>in</strong>e verschaffen konnte. Dann s<strong>in</strong>d se<strong>in</strong>e<br />
Rechte schon weit höher als wenn er noch von “aussen” versuchen muss, auf das Gerät<br />
e<strong>in</strong>zudr<strong>in</strong>gen.<br />
Deshalb sollte es immer Politik bei <strong>der</strong> Vergabe von Dateirechten geben, normalen Systembenutzern<br />
immer gerade soviele Rechte e<strong>in</strong>zuräumen, wie sie zum Arbeiten benötigen.<br />
Deshalb laufen <strong>in</strong>zwischen auch viele Dienste, wie z.B. <strong>der</strong> Nameserver B<strong>in</strong>d (Daemon: named)<br />
o<strong>der</strong> <strong>der</strong> X-Displaymanager gdm unter e<strong>in</strong>er eigenen BenutzerID und nicht mehr<br />
mit Rootrechten. So bedeutet e<strong>in</strong> erfolgreicher <strong>E<strong>in</strong></strong>bruch <strong>in</strong> diese Dienste noch nicht e<strong>in</strong>e<br />
automatische “ Übernahme” <strong>der</strong> Masch<strong>in</strong>e.<br />
17.2.2 Passwörter<br />
Das Passwort sollte nicht trivial se<strong>in</strong>! Worte, die <strong>in</strong> e<strong>in</strong>em Lexikon zu f<strong>in</strong>den s<strong>in</strong>d, haben<br />
als Passwort ke<strong>in</strong>en Wert. Knackprogramme benutzen genau solche Lexika, um bekannte<br />
Worte vorwärts, rückwärts und <strong>in</strong> Komb<strong>in</strong>ationen durchzuprobieren.<br />
Der <strong>E<strong>in</strong></strong>wand “man habe ke<strong>in</strong>e schützenswerte Daten <strong>in</strong> se<strong>in</strong>em Account und müsse<br />
darum nicht so viel Aufwand treiben” ist vor<strong>der</strong>gründig verständlich, aber dennoch nicht<br />
richtig. In e<strong>in</strong>em Beispiel versteht man es besser: Möglicherweise hat e<strong>in</strong> Mieter <strong>in</strong> e<strong>in</strong>em<br />
245
246 KAPITEL 17. SYSTEMSICHERHEIT<br />
Mietshaus tatsächlich ke<strong>in</strong>e Wertgegenstände, die ihm schützenswert ersche<strong>in</strong>en, doch es<br />
ist nicht akzeptabel, dass er darum die Haustüre offen stehen läßt und damit das Eigentum<br />
<strong>der</strong> Mitbewohner gefährdet. Obendre<strong>in</strong>, wenn die Bude abbrennt, wird auch dieser Mieter<br />
gewahr, dass das Gebäude, se<strong>in</strong> Dach über dem Kopf, doch e<strong>in</strong> schützenswertes Objekt<br />
darstellt. Um im Bild zu bleiben, auch die Weitergabe von Schlüsseln (Passwörtern) an<br />
Dritte ist <strong>in</strong> diesem Rahmen nicht akzeptabel! Deshalb genügt es auch nicht, wenn das<br />
Rootpasswort beson<strong>der</strong>s sicher ist. Bereits mit den Rechten e<strong>in</strong>es normalen Benutzers hat<br />
man mehr Möglichkeiten des <strong>E<strong>in</strong></strong>bruchs als mit gar ke<strong>in</strong>em Account auf e<strong>in</strong>er Masch<strong>in</strong>e.<br />
Die Konfiguration zur Passwortsicherheit (Gültigkeitsdauer von User-Passwörtern, Fehlversuche<br />
beim Log<strong>in</strong>, Länge des Passwortes) werden <strong>in</strong> <strong>der</strong> Datei /etc/log<strong>in</strong>.defs e<strong>in</strong>gestellt.<br />
17.2.3 Der Adm<strong>in</strong>-Account<br />
Den Account des Adm<strong>in</strong>istrators “root” nur so lange verwenden, wie unbed<strong>in</strong>gt notwendig,<br />
z.B. für die Installation von Software, die allen Benutzern zur Verfügung gestellt werden soll.<br />
Ke<strong>in</strong>esfalls als “root” die tägliche Arbeit machen. Dafür existieren die gewöhnlichen Benutzeraccounts,<br />
<strong>der</strong>en Rechte für die Standardaufgabenstellungen ausreichen. Adm<strong>in</strong>istrative<br />
Aufgaben sollten niemals müde o<strong>der</strong> <strong>in</strong> Eile ausgeführt werden, da mit “root”-Rechten<br />
leicht irreversible Schäden angerichet werden können.<br />
17.2.4 /etc/passwd und /etc/shadow<br />
<strong>E<strong>in</strong></strong> System sollte das Passwort <strong>der</strong> Benutzer unbed<strong>in</strong>gt nicht <strong>in</strong> /etc/passwd speichern! Die<br />
Datei /etc/passwd ist für die Welt lesbar und muss es auch se<strong>in</strong>, damit <strong>der</strong> e<strong>in</strong>e o<strong>der</strong> an<strong>der</strong>e<br />
Dienst funktioniert. Das Problem dabei ist, dass somit je<strong>der</strong> mit e<strong>in</strong>em Cracker bewaffnet<br />
auf Passwortsuche gehen kann, solange die Passwörter <strong>in</strong> dieser Datei stehen. Es leuchtet<br />
e<strong>in</strong>, dass e<strong>in</strong> Passwort, das <strong>in</strong> e<strong>in</strong>er Datei steht, die nur “root” lesen kann, diese H<strong>in</strong>tertüre<br />
schließt. Also: Shadow-Passwort (<strong>in</strong> /etc/shadow) benutzen!<br />
17.2.5 Locken o<strong>der</strong> ausloggen<br />
Aus demselben Grund wie zuvor, ist beim Verlassen e<strong>in</strong>er Masch<strong>in</strong>e darauf zu achten, dass<br />
man bei allen Konsolen ausgeloggt ist o<strong>der</strong> diese gelockt hat. Arbeiten mehrere Leute an<br />
<strong>der</strong> Konsole, dann sollte man so nett se<strong>in</strong> und die Sitzung beenden (und nicht nur den<br />
Bildschirm sperren).<br />
17.2.6 Setuid und Verzeichnisse<br />
Es ist darauf zu achten, dass normale Benutzer <strong>in</strong> System-Verzeichnissen wie /etc, /b<strong>in</strong>,<br />
/usr/b<strong>in</strong>, /sb<strong>in</strong> usw. ke<strong>in</strong>e Schreibberechtigung besitzen. Sollten sie es doch haben, so<br />
können sie dort e<strong>in</strong> Programm unterbr<strong>in</strong>gen (z.B. Verschreiber zu ls o<strong>der</strong> cd (ls-al ld la ks xs<br />
vf ...)). Das Programm wartet, bis es e<strong>in</strong>mal ausversehen von “root” aufgerufen wird ... und<br />
Voila! Es wird e<strong>in</strong> Programm z.B. mit dem Namen ga<strong>in</strong>r nach /tmp, /var/tmp o<strong>der</strong> sonst<br />
wo h<strong>in</strong> geschrieben, das nichts an<strong>der</strong>es als e<strong>in</strong>e Shell mit setuid ROOT ist. Ruft man dann<br />
als normaler Benutzer ga<strong>in</strong>r auf, so ist man plötzlich “root” - ganz ohne Passwort. Erste<br />
Konsequenz: <strong>E<strong>in</strong></strong> normaler Benutzer soll NUR Zugriff auf se<strong>in</strong> Home-Verzeichnis und auf<br />
/tmp haben! Zweite Konsequenz: Die Variable PATH des Benutzers “root” muss restriktiv<br />
gehalten werden. Das aktuelle Arbeitsverzeichnis hat im PATH von “root” nichts verloren!<br />
Dritte Konsequenz: Die Liste <strong>der</strong> “setuid root” (-rwsr-xr-x) Programme regelmäßig mit <strong>der</strong><br />
Frage nach Wachstum kontrollieren.
17.3. LITERATUR 247<br />
17.2.7 Setuid und Mount<strong>in</strong>g<br />
Mit dem Mounten ist es genauso, nur noch e<strong>in</strong>facher für den Hacker. <strong>E<strong>in</strong></strong> wechselbares<br />
Medium darf nie und nimmer setuid-fähig se<strong>in</strong>! Ansonsten stellt sich <strong>der</strong> Hacker zuhause<br />
e<strong>in</strong> Medium her mit e<strong>in</strong>er Shell, die “root” gehört und das setuid-bit gesetzt hat (vergl.<br />
ga<strong>in</strong>r. Dieses mountet er im Zielsystem (o<strong>der</strong> läßt es vom Adm<strong>in</strong> mounten...) und ...Voila!<br />
<strong>E<strong>in</strong></strong>fach aufrufen und fertig!<br />
Das Mountkommando kann aus Sicherheitsgründen nur vom Superuser aufgerufen werden.<br />
Sollen normale User dazu <strong>in</strong> die Lage versetzt werden, ist die /etc/fstab bzw. die<br />
Konfiguration des Automounters anzupassen. Dann sollte man darauf achten, dass für diese<br />
Bereiche ke<strong>in</strong>e Ausführungsrechte für Programme gesetzt werden (Option: noexec).<br />
17.2.8 Browser, CGI / Java-Applet und B<strong>in</strong>aries, per Mail<br />
Grundsätzlich s<strong>in</strong>d alle Programme, die über e<strong>in</strong>en grauen Kanal von außen kommen, als<br />
hoch gefährlich e<strong>in</strong>zustufen. <strong>E<strong>in</strong></strong> B<strong>in</strong>ary, das per Mail kommt und zur Ausführung gebracht<br />
wird, kann alles enthalten, wovor sich <strong>der</strong> Adm<strong>in</strong> <strong>in</strong> schlimmsten Fieberträumen fürchtet.<br />
Auch e<strong>in</strong> Java-skript kann im Pr<strong>in</strong>zip tun was es will, auch die Datensicherheit korrumpieren.<br />
<strong>E<strong>in</strong></strong> e<strong>in</strong>faches CGI-Skript e<strong>in</strong>er Suchmasch<strong>in</strong>e ist e<strong>in</strong> echtes Risiko. Wie <strong>in</strong> <strong>der</strong> CT 4’98<br />
beschrieben, reicht es aus, e<strong>in</strong> Semikolon gefolgt von e<strong>in</strong>em subversiven Befehl als Suchbegriff<br />
e<strong>in</strong>zugeben und schon steht da anstelle e<strong>in</strong>es grep-Parameters e<strong>in</strong> falsch abgesetzter<br />
grep-Befehl gefolgt von e<strong>in</strong>em Befehl frei nach Hackers Wahl. Auf Grund <strong>der</strong> Vielzahl von<br />
Schwachstellen und Programmierfehlern sollten Web-Browser an sich für den User “root”<br />
tabu se<strong>in</strong> und nur unter <strong>der</strong> ID normaler User ausgeführt werden!!<br />
17.2.9 Physikalischer Zugriff<br />
Derjenige, <strong>der</strong> physikalischen Zugriff zu e<strong>in</strong>er Masch<strong>in</strong>e hat, ist eigentlich auch schon “root”!<br />
Das liegt daran, dass die Konsole zugreifbar ist. Um es nicht ganz so e<strong>in</strong>fach zu machen,<br />
sollten bootfähige und wechselbare Laufwerke (z.B. floppy) von <strong>der</strong> Boot-Fähigkeit abgehalten<br />
werden. Der Durchschnitts-Hacker braucht aber diese Laufwerke ohneh<strong>in</strong> nicht. Dieser<br />
ist mit e<strong>in</strong>er Reset-Taste o<strong>der</strong> e<strong>in</strong>em Netzstecker, sowie e<strong>in</strong>er Konsole vollkommen zufrieden.<br />
Der lilo ohne Passwortschutz erlaubt e<strong>in</strong>fachste Angriffe! Abhilfe: Die Masch<strong>in</strong>e unter<br />
Verschluss halten. Ke<strong>in</strong>er Masch<strong>in</strong>e, die nicht unter Verschluss ist o<strong>der</strong> mit dem Internet<br />
verbunden ist, kann man vertrauen.<br />
17.3 Literatur<br />
<strong>E<strong>in</strong></strong>schlägige Mail<strong>in</strong>g-Listen abonnieren und Webseiten untersuchen<br />
http://<strong>in</strong>ternet-security.de<br />
http://www.cert.org/<br />
http://www.ers.ibm.com/<br />
http://www.ccc.de/<br />
THE DENIAL OF SERVICE PAGE L<strong>in</strong>ux-Mail<strong>in</strong>glisten<br />
http://www.diabolo666.com/tools/Tutorial.htm<br />
Monografien gibt es <strong>in</strong>zwischen auch e<strong>in</strong>ige zum Thema ... z.B.:<br />
Simson Garf<strong>in</strong>kel, Gene Spafford, Practical <strong>Unix</strong> and Internet Security 2.Edition, O’Reilly,<br />
2000, ISBN 1-56592-148-8
248 KAPITEL 17. SYSTEMSICHERHEIT<br />
17.4 Sicherheit im <strong>Netzwerk</strong><br />
17.4.1 <strong>E<strong>in</strong></strong>leitung<br />
Die erste Hürde, die sich Angreifern stellt, ist üblicherweise <strong>der</strong> lokale Zugang auf e<strong>in</strong><br />
System. Dazu benötigen sie meistens e<strong>in</strong>e gültige UserID mit Passwort bzw. den Zugriff<br />
über e<strong>in</strong>en auf <strong>der</strong> Masch<strong>in</strong>e verfügbaren <strong>Netzwerk</strong>dienst, wie den Web-, NFS-, Nameserver<br />
etc. Dieser Zugriff kann durch das ablauschen von Verb<strong>in</strong>dungen, wie z.B. ”telnet”, ”ftp”,<br />
”pop3”, ... Anfragen erfolgen, die ke<strong>in</strong>e verschlüsselten Passwörter verwenden. Die an<strong>der</strong>e<br />
Möglichkeit ist die Ausnutzung von Sicherheitslücken <strong>in</strong> verfügbaren Diensten.<br />
Deshalb sollten beim Aufsetzen e<strong>in</strong>es Servers immer überlegt werden, welche Dienste<br />
überhaupt notwendig s<strong>in</strong>d und aus welchem Bereich <strong>der</strong> Zugriff erfolgen können soll. So<br />
wird z.B. <strong>der</strong> Webserver weltweit erreichbar se<strong>in</strong>, das Log<strong>in</strong>, NFS, bzw. Samba für den Zugriff<br />
<strong>der</strong> Webadm<strong>in</strong>istratoren meistens jedoch nur aus e<strong>in</strong>em beschränkten <strong>Netzwerk</strong>bereich<br />
erfor<strong>der</strong>lich se<strong>in</strong>.<br />
17.4.2 Gesicherte Verb<strong>in</strong>dungen<br />
Das Internet-Protokoll IP und die Transportprotokolle UDP und TCP br<strong>in</strong>gen ke<strong>in</strong>erlei<br />
Sicherheit mit. Die Pakete können auf dem Transportweg verfälscht und <strong>der</strong> Inhalt leicht<br />
abgelauscht werden. Hiergegen s<strong>in</strong>d Vorkehrungen zu treffen, die an verschiedenen Stellen<br />
<strong>der</strong> Verb<strong>in</strong>dung ansetzen können:<br />
Host 1 Sicherung Host2<br />
Anwendung S-HTTP, PGP, eCASH Anwendung<br />
Transport SOCKS, SSL Transport<br />
<strong>Netzwerk</strong> IPSec <strong>Netzwerk</strong><br />
Datensicherung PAP, CHAP, PPTP Datensicherung<br />
Tabelle 17.1: Verschiedener Ansatz von Absicherung<br />
Bekannt s<strong>in</strong>d <strong>in</strong>zwischen sicherlich die Kryptosoftware zum Mailversand, PGP und <strong>der</strong><br />
Telnetersatz SSH. Diese setzen an <strong>der</strong> Anwendungsschicht an. Die Absicherung <strong>der</strong> Transportschicht<br />
kann durch SSL (Secure Sockets Layer) erfolgen, was von verschlüsselten HTTP-<br />
Verb<strong>in</strong>dungen bekannt se<strong>in</strong> sollte. IPSec setzt an <strong>der</strong> <strong>Netzwerk</strong>schicht an und soll zum e<strong>in</strong>en<br />
die Herkunft <strong>der</strong> Pakete sicherstellen und zum An<strong>der</strong>en das Mitlesen <strong>der</strong> Daten verh<strong>in</strong><strong>der</strong>n<br />
und diese vor unerkannter Manipulation schützen. Ausführliche Erläuterungen zu IPsec<br />
erfolgen im nächsten Kapitel.<br />
17.4.3 ssh und scp<br />
Es ist immer damit zu rechnen, dass irgendwo h<strong>in</strong>ter den nächsten beiden Ecken e<strong>in</strong> Hacker<br />
se<strong>in</strong> Laptop genau <strong>in</strong> das Netz-Segment e<strong>in</strong>gekl<strong>in</strong>kt hat, <strong>in</strong> dem man sich bef<strong>in</strong>det. Die<br />
Folge davon ist, dass alles, was man Klartext über das Netz schickt o<strong>der</strong> was man geschickt<br />
bekommt, mitgelesen werden kann. Das betrifft TCP genau so wie UDP! Der Hacker muss<br />
also nur warten, bis sich irgend e<strong>in</strong> Benutzer auf e<strong>in</strong>er an<strong>der</strong>en Masch<strong>in</strong>e e<strong>in</strong>loggt (telnet,<br />
p<strong>in</strong>e, ftp ...) und dann genau die folgenden Pakete dieser beiden Masch<strong>in</strong>en mitprotokollieren.<br />
In <strong>der</strong> Folge erhält er e<strong>in</strong>en Account-Namen und e<strong>in</strong> Passwort, das dazu paßt. ...<br />
Abhilfe schafft man hier durch Verwendung <strong>der</strong> ssh (SecureShell) und SecureCopy scp zum<br />
Kopieren von Dateien über Rechnergrenzen h<strong>in</strong>weg. Damit baut man e<strong>in</strong>en verschlüsselten
17.4. SICHERHEIT IM NETZWERK 249<br />
Kanal zwischen zwei Rechnern auf:<br />
dsuchod@s14:~ > ssh dirk@s1.goe.net<br />
dsuchod@s14:~ > ssh -l dirk s1.goe.net<br />
dsuchod@s14:~ > ssh -l dirk s1.goe.net Netscape<br />
Auch wenn man dann X-Anwendungen startet, benutzen diese den verschlüsselten Kanal<br />
(Hier spart man sich sogar gegenüber telnet das Setzen <strong>der</strong> DISPLAY-Variablen).<br />
Das Setzen von Umgebungsvariablen wird im Abschnitt zur Shell erörtert. Im letzten <strong>der</strong><br />
Beispiele, die oben gezeigt wurden, hat man sich nicht mehr auf <strong>der</strong> Masch<strong>in</strong>e e<strong>in</strong>geloggt,<br />
son<strong>der</strong>n nur noch e<strong>in</strong> Kommando abgesetzt, welches remote ausgeführt wird.<br />
Möchte man sich regelmässig auf verschiedenen Rechnern e<strong>in</strong>loggen und nicht jedesmal<br />
se<strong>in</strong> Passwort für diese Verb<strong>in</strong>dung angeben, kann man e<strong>in</strong>en Schlüssel auf dem entsprechenden<br />
Rechner generieren und den Public-Teil <strong>in</strong> <strong>der</strong> Datei:<br />
/.ssh/authorized keys (im Homeverzeichnis unterhalb des versteckten Verzechnisses .ssh)<br />
speichern.<br />
dsuchod@s14:~ > ssh-keygen -t dsa<br />
Mit dem Tool ssh-agent kann man sich das Leben noch erleichtern: Dieser fragt zu<br />
beg<strong>in</strong> e<strong>in</strong>er Sitzung die Passphrase für die gesammelten Schlüssel ab und authentifiziert<br />
jede bereits e<strong>in</strong>mal aufgebaute Verb<strong>in</strong>dung automatisch ohne weitere Nachfrage.<br />
17.4.4 Der Intenet-”Super”-Daemon (x)<strong>in</strong>etd<br />
Viele Dienste, die nicht sehr häufig nachgefragt werden, wie z.B. ”telnet”, ”talk” und ”ftp”<br />
müssen nicht permanent im H<strong>in</strong>tergrund laufen und die CPU, sowie den Arbeitsspeicher<br />
belasten. Sie werden auf Anfor<strong>der</strong>ung durch den (x)<strong>in</strong>etd gestartet und nach Beendigung<br />
<strong>der</strong> Verb<strong>in</strong>dung wie<strong>der</strong> geschlossen.<br />
Der x<strong>in</strong>etd stellt die weiterentwickelte Form des <strong>in</strong>etd dar und kann die oben genannte<br />
For<strong>der</strong>ung nach <strong>der</strong> Beschränkung des Zugriffs von sich aus erfüllen. In <strong>der</strong> Konfigurationsdatei<br />
des Dienstes <strong>der</strong> /etc/x<strong>in</strong>etd.conf können Bereiche angegeben werden, von denen <strong>der</strong><br />
Zugriff auf e<strong>in</strong>en bestimmten Dienst erlaubt wird:<br />
service ftp<br />
{<br />
socket_type = stream<br />
protocol = tcp<br />
wait = no<br />
user = root<br />
server = /usr/sb<strong>in</strong>/proftpd<br />
server_args = -p 0<br />
only_from = 172.16.0.0/16<br />
}<br />
Der <strong>in</strong>etd benötigt hierzu noch den TCP-Wrapper tcpd, welcher über die Dateien<br />
/etc/hosts.deny und /etc/hosts.allow gesteuert wird.<br />
Generell gilt natürlich, dass alle Dienste, die nicht benötigt werden, auf jeden Fall deaktiviert<br />
werden sollten. Gerade diese bergen häufig die Gefahr, dass (weil man nicht an sie<br />
denkt) hierüber <strong>der</strong> erfolgreiche Angriff stattf<strong>in</strong>det.
250 KAPITEL 17. SYSTEMSICHERHEIT<br />
17.4.5 xhost + und das unsichtbare Fenster<br />
Mit ”xhost +” serviert man potentiellen <strong>E<strong>in</strong></strong>brechern die gewünschten Informationen auf<br />
e<strong>in</strong>em goldenen Tablett! Das e<strong>in</strong>zige, was <strong>der</strong> Hacker zu tun hat, ist e<strong>in</strong> unsichtbares Fenster<br />
auf dem Bildschirm zu platzieren. Dieses bekommt natürlich, weil es zu oberst liegt, alle<br />
Informationen von Maus und Keyboard exklusiv. Je nach Gutdünken des Hackers werden<br />
diese Informationen an die Fenster, an die sie eigentlich gerichtet s<strong>in</strong>d, weitergeleitet o<strong>der</strong><br />
eben auch nicht. Der Hacker kann alles mitprotokollieren o<strong>der</strong> das keyboard/maus toten<br />
Mann spielen lassen o<strong>der</strong> alles an<strong>der</strong>e, was das Herz begehrt, mit dem Bildschirm anstellen.<br />
<strong>E<strong>in</strong></strong> Log<strong>in</strong>-Bildschirm über Nacht auf’s Display gezaubert, br<strong>in</strong>gt am nächsten Morgen e<strong>in</strong><br />
sicheres Passwort.<br />
17.4.6 .rhosts<br />
Es ist grundsätzlich abzulehnen, den eigenen Account gegenüber e<strong>in</strong>em Benutzer zu öffnen,<br />
<strong>der</strong> behauptet, sich auf e<strong>in</strong>er Masch<strong>in</strong>e zu bef<strong>in</strong>den, die ihrerseits behauptet, e<strong>in</strong>en<br />
bestimmten Namen zu tragen. Man sieht schon jetzt wie fragil das Konstrukt ist... Je<strong>der</strong><br />
kann irgendetwas behaupten, aber darum ist demjenigen noch ke<strong>in</strong> Account zu öffnen.<br />
Das Konzept <strong>der</strong> R-Tools (Steuerung über die .rhosts im eigenen Homeverzeichnis) wie<br />
sie e<strong>in</strong>mal von Sun e<strong>in</strong>geführt wurden, ist <strong>in</strong> <strong>der</strong> heutigen Zeit obsolet geworden. Dazu gibt<br />
es SecureShell und -Copy und den SSH-Agent, wenn man vermeiden will, bei jedem Log<strong>in</strong><br />
auf e<strong>in</strong>er an<strong>der</strong>en Masch<strong>in</strong>e immer wie<strong>der</strong> e<strong>in</strong> Passwort e<strong>in</strong>geben zu müssen.<br />
17.4.7 Überprüfung <strong>der</strong> <strong>Netzwerk</strong>sicherheit eigener und an<strong>der</strong>er Rechner<br />
Es gibt <strong>in</strong>zwischen e<strong>in</strong>e ganze Reihe von Programmen, mit denen sich <strong>der</strong> <strong>Netzwerk</strong>verkehr<br />
überwachen und überprüfen lässt. Dieses s<strong>in</strong>d zum e<strong>in</strong>en die Tools zum ”Mitlauschen”<br />
des Datenverkehrs tcpdump, ntop und ethereal. Gerade das letzte Tool ist beson<strong>der</strong>s<br />
zu empfehlen, da es über e<strong>in</strong> komfortables grafisches Frontend, gute Packetviewer und<br />
Filterfunktionen verfügt. ntop ist e<strong>in</strong> textbasiertes <strong>in</strong>teraktives Programm, welches aktuelle<br />
Verb<strong>in</strong>dungen und die dabei umgesetzten Datenmengen nach Verb<strong>in</strong>dung und Protokollart<br />
aufzeigt. tcpdump arbeitet an <strong>der</strong> Kommandozeile und schneidet Pakete mit, welche an<br />
<strong>der</strong> <strong>Netzwerk</strong>schnittstelle angenommen werden. Bei allen Tools lassen sich auch Nicht-IP-<br />
Protokolle registrieren.<br />
Die Untersuchung auf bestimmte Dienste, d.h. offene Ports von Rechnern o<strong>der</strong> <strong>in</strong> <strong>Netzwerk</strong>en,<br />
lässt sich mit dem Portsniffer nmap bewerkstelligen.<br />
nmap -O 172.16.0.0/16 Feststellen des Betriebssystems im<br />
Class-B-Subnetz<br />
nmap -sP 172.16.1.0/24 P<strong>in</strong>g-Scan (Erreichbarkeit von Rechnern<br />
Class-C-Subnetz<br />
nmap -sT 172.16.1.1 Scan auf offene TCP-Ports <strong>der</strong> Masch<strong>in</strong>e<br />
mit <strong>der</strong> IP 172.16.1.1<br />
nmap -sU www.goe.net Scan auf offene UDP-Ports <strong>der</strong> Masch<strong>in</strong>e<br />
mit dem FQDN www.goe.net<br />
Tabelle 17.2: NMAP im <strong>E<strong>in</strong></strong>satz
17.5. AUFGABEN 251<br />
17.4.8 Firewall<br />
Inzwischen gibt es drei Firewallimplementationen für den L<strong>in</strong>uxkernel: Das ipfwadm führte<br />
diese Funktionalität <strong>in</strong> den 2.0.er Kernel als e<strong>in</strong> wichtiges neues Feature e<strong>in</strong>. Die Firewall<strong>in</strong>gfähigkeit<br />
wurde mit ipcha<strong>in</strong>s im Kernel <strong>der</strong> 2.2.er Serie stark verbessert und wird<br />
deshalb <strong>in</strong> e<strong>in</strong>em eigenen Kapitel beschrieben. Der Kernel 2.4 br<strong>in</strong>gt e<strong>in</strong>e weiter verbesserte<br />
Firewall mit netfilter mit sich, ist aber abwärtskompatibel über Kernelmodule zu<br />
ipfwadm und ipcha<strong>in</strong>s.<br />
17.5 Aufgaben<br />
17.5.1 Secure Shell<br />
1. Wie sieht das Kommando aus, wenn man sich auf e<strong>in</strong>e entferne Masch<strong>in</strong>e (Remote-<br />
Log<strong>in</strong>) mit dem Rechnernamen test.doma<strong>in</strong>.local verb<strong>in</strong>den will und man die Benutzer-<br />
ID ”userid” auf <strong>der</strong> entfernten Masch<strong>in</strong>e verwenden will und unter e<strong>in</strong>er an<strong>der</strong>en ID<br />
auf <strong>der</strong> Ausgangsmasch<strong>in</strong>e angemeldet ist?<br />
2. Wie könnte <strong>der</strong> SCP-Kopierbefehl aussehen, wenn e<strong>in</strong>e Datei namens unterlagen.txt<br />
vom Rechner test.doma<strong>in</strong>.local unter <strong>der</strong> UserID ”root” <strong>in</strong> das lokale Verzeichnis auf<br />
dem eigenen Rechner kopiert werden soll?<br />
3. Welches Problem liegt vor, wenn ich folgende Meldung zu sehen bekomme?<br />
user@l<strong>in</strong>ux:~/SharedFiles/kurs/klausur> ssh 10.30.4.44<br />
8014: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br />
8014: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @<br />
8014: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<br />
8014: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!<br />
8014: Someone could be eavesdropp<strong>in</strong>g on you right now (man-<strong>in</strong>-the-middle attack)!<br />
8014: It is also possible that the RSA host key has just been changed.<br />
8014: The f<strong>in</strong>gerpr<strong>in</strong>t for the RSA key sent by the remote host is<br />
53:8c:4b:13:f6:df:2e:d1:e5:cf:21:12:a4:c2:ea:c5.<br />
8014: Please contact your system adm<strong>in</strong>istrator.<br />
8014: Add correct host key <strong>in</strong> /home/user/.ssh/known_hosts to get rid of this message.<br />
8014: Offend<strong>in</strong>g key <strong>in</strong> /home/user/.ssh/known_hosts:11<br />
8014: RSA host key for 10.30.4.44 has changed and you have requested strict check<strong>in</strong>g.<br />
8014: Host key verification failed.<br />
4. Wie kann ich mich auf an<strong>der</strong>en Masch<strong>in</strong>en per SSH unter Vermeidung <strong>der</strong> <strong>E<strong>in</strong></strong>gabe<br />
e<strong>in</strong>es Passwortes anmelden? Wann benötigt man dieses?<br />
5. Wie tunnele ich e<strong>in</strong>e POP3-Verb<strong>in</strong>dung (Port 143) von me<strong>in</strong>er Masch<strong>in</strong>e (z.B. mymach<strong>in</strong>e.dyndns.org)<br />
auf den POP3-Server (z.B. pop3.mydoma<strong>in</strong>.local), wo ich über<br />
e<strong>in</strong>en SSH-Zugang verfüge?
252 KAPITEL 17. SYSTEMSICHERHEIT
Kapitel 18<br />
Sicheres IP<br />
18.1 Sicherheitsprobleme des <strong>der</strong>zeitigen IP-Standards<br />
18.1.1 Intro<br />
Die Idee und erste Implementationen des Internet Protokolls gehen auf die Anfänge <strong>der</strong><br />
70er Jahre zurück. Sicherheitserwägungen spielten bei <strong>der</strong> Entwicklung des IP zu beg<strong>in</strong><br />
nur e<strong>in</strong>e nachrangige Rolle bzw. wurde bewußt auf höhere Protokollschichten verlagert.<br />
Die Datenpakete, <strong>in</strong> die Datenströme aufgeteilt werden, passieren auf ihrem Weg zwischen<br />
Sen<strong>der</strong> und Empfänger e<strong>in</strong>e ganze Reihe von Routern. Der Weg selbst ist <strong>in</strong> den meisten<br />
Fällen nicht vorherbestimmt (von beson<strong>der</strong>en Ausnahmen e<strong>in</strong>mal abgesehen). So können<br />
Pakete, obwohl sie zwischen Partnern <strong>in</strong>nerhalb e<strong>in</strong>er Stadt ausgetauscht werden, durchaus<br />
mehrfach Landesgrenzen überschreiten. An <strong>der</strong> Weiterleitung dieser Datenströme s<strong>in</strong>d<br />
dann meistens mehrere Provi<strong>der</strong> beteiligt, die über sehr unterschiedliches Know-How und<br />
Sicherheitsvorstellungen verfügen können.<br />
18.1.2 Offener Datentransport<br />
Für den Transport von Daten <strong>in</strong> e<strong>in</strong>em <strong>Netzwerk</strong>, d.h. e<strong>in</strong>e Kommunikation zwischen zwei<br />
Rechnern A und B, benötigt man offene und geme<strong>in</strong>same Standards, damit e<strong>in</strong>e Verb<strong>in</strong>dung<br />
zustande kommen kann. Hierfür reicht es aus, dass jeweils die Datenhea<strong>der</strong> <strong>der</strong> verwendeten<br />
Protokolle genormt und für alle am Transport Beteiligten <strong>in</strong>terpretierbar s<strong>in</strong>d.<br />
Da Empfänger und Absen<strong>der</strong> nicht direkt mite<strong>in</strong>an<strong>der</strong> kommunizieren, son<strong>der</strong>n ihre<br />
Pakete nur an den nächsten Router (meistens e<strong>in</strong>fach an das Default-Gateway) ausliefern,<br />
lassen sich Aussagen über die Authentizität und die Richtigkeit des Inhaltes von Paketen<br />
nicht machen. Für erfahrene Anwen<strong>der</strong> bzw. Benutzer e<strong>in</strong>schlägiger Programme ist es überhaupt<br />
ke<strong>in</strong> Problem IP-Pakete mitzulesen (z.B. dsniff, ethereal, ...). Dieses kann bereits im<br />
eigenen LAN geschehen. Jedoch kann auch jede Masch<strong>in</strong>e auf dem Weg <strong>der</strong> Datenpakete<br />
diese mitlesen. Beides läßt sich <strong>in</strong> den seltensten Fällen feststellen. Selbst wenn Pakete<br />
auf ihrer Reise verän<strong>der</strong>t werden, kann man dies nicht e<strong>in</strong>fach feststellen, da die Prüfsummen<br />
von IP- und TCP-Hea<strong>der</strong> natürlich auch vom Fälscher korrekt e<strong>in</strong>getragen werden.<br />
Genausowenig läßt sich feststellen, ob <strong>der</strong> Absen<strong>der</strong> wirklich <strong>der</strong> erwartete Kommunikationspartner<br />
ist o<strong>der</strong> ob sich <strong>der</strong> Man-<strong>in</strong>-the-Middle e<strong>in</strong>geschaltet hat.<br />
Viele Benutzer werden sicherlich sagen, dass an<strong>der</strong>e mit ihren Daten nichts anfangen<br />
können und dass sie nicht relevant s<strong>in</strong>d. Trotzdem möchte man sicherlich nicht, dass jemand<br />
se<strong>in</strong>e Mailbox bei e<strong>in</strong>em Webmailer ausräumt o<strong>der</strong> Mails unter dem eigenen Namen<br />
verschickt. Wenn vielleicht mit e<strong>in</strong>er e<strong>in</strong>fachen Mailadresse noch ke<strong>in</strong>e kostenpflichtigen<br />
Dienste aufgerufen werden können, so lassen sich doch Mails mit sehr üblen Inhalten ver-<br />
253
254 KAPITEL 18. SICHERES IP<br />
Abbildung 18.1: Snapshot e<strong>in</strong>er Ethereal-Analyse<br />
fassen, die den o<strong>der</strong> die Account<strong>in</strong>haberIn <strong>in</strong> Schwierigkeiten br<strong>in</strong>gen können. O<strong>der</strong> aber<br />
jemand verwendet mitgehörte Ebay-Daten dazu, Gebote auf eigene Artikel zu platzieren.<br />
Das folgende List<strong>in</strong>g zeigt e<strong>in</strong>en Ausschnitt e<strong>in</strong>er Google-Sitzung; viele Informationen kann<br />
man sofort und ohne großen Aufwand direkt entnehmen.<br />
b5 48 00 00 01 01 08 0a 11 df 06 9c 42 97 -@5H.... ..._..B.<br />
0040 29 0d 47 45 54 20 2f 73 65 61 72 63 68 3f 71 3d ).GET /search?q=<br />
0050 77 69 65 2b 68 61 63 6b 65 2b 69 63 68 2b 6d 65 wie+hacke+ich+me<br />
0060 69 6e 2b 6e 65 74 7a 26 69 65 3d 49 53 4f 2d 38 <strong>in</strong>+netz&ie=ISO-8<br />
0070 38 35 39 2d 31 26 68 6c 3d 64 65 26 6d 65 74 61 859-1&hl=de&meta<br />
0080 3d 20 48 54 54 50 2f 31 2e 31 0d 0a 55 73 65 72 = HTTP/1.1..User<br />
0090 2d 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f -Agent:Mozilla/<br />
00a0 35 2e 30 20 28 63 6f 6d 70 61 74 69 62 6c 65 3b 5.0 (compatible;<br />
00b0 20 4b 6f 6e 71 75 65 72 6f 72 2f 33 3b 20 4c 69 Konqueror/3; Li<br />
00c0 6e 75 78 29 0d 0a 52 65 66 65 72 65 72 3a 20 68 nux)..Referer: h<br />
00d0 74 74 70 3a 2f 2f 77 77 77 2e 67 6f 6f 67 6c 65 ttp://www.google<br />
00e0 2e 64 65 2f 0d 0a 41 63 63 65 70 74 3a 20 74 65 .de/..Accept: te<br />
00f0 78 74 2f 2a 2c 20 69 6d 61 67 65 2f 6a 70 65 67 xt/*, image/jpeg<br />
0100 2c 20 69 6d 61 67 65 2f 70 6e 67 2c 20 69 6d 61 , image/ png,ima<br />
0110 67 65 2f 2a 2c 20 2a 2f 2a 0d 0a 41 63 63 65 70 ge/*, */*..Accep<br />
0120 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 78 2d 67 7a t-Encodi ng:x-gz<br />
0130 69 70 2c 20 67 7a 69 70 2c 20 69 64 65 6e 74 69 ip, gzip ,identi<br />
0140 74 79 0d 0a 41 63 63 65 70 74 2d 43 68 61 72 73 ty..Accept-Chars<br />
0150 65 74 3a 20 69 73 6f 2d 38 38 35 39 2d 31 2c 20 et: iso-8859-1,<br />
0160 75 74 66 2d 38 3b 71 3d 30 2e 35 2c 20 2a 3b 71 utf-8;q= 0.5,*;q<br />
0170 3d 30 2e 35 0d 0a 41 63 63 65 70 74 2d 4c 61 6e =0.5..Accept-Lan
18.1. SICHERHEITSPROBLEME DES DERZEITIGEN IP-STANDARDS 255<br />
0180 67 75 61 67 65 3a 20 65 6e 0d 0a 48 6f 73 74 3a guage: en..Host:<br />
0190 20 77 77 77 2e 67 6f 6f 67 6c 65 2e 64 65 0d 0a www.google.de..<br />
01a0 43 6f 6f 6b 69 65 3a 20 50 52 45 46 3d 49 44 3d Cookie:PREF=ID=<br />
01b0 35 66 35 31 34 38 31 33 30 35 35 64 62 62 38 32 5f514813055dbb82<br />
01c0 3a 4c 44 3d 64 65 3a 54 4d 3d 31 30 33 38 38 32 :LD=de:TM=103882<br />
01d0 37 31 37 30 3a 4c 4d 3d 31 30 33 38 38 32 37 31 7170:LM=10388271<br />
01e0 37 30 3a 53 3d 35 49 4b 57 55 36 38 68 50 58 73 70:S=5IKWU68hPXs<br />
01f0 38 53 59 7a 51 0d 0a 0d 0a<br />
Darüberh<strong>in</strong>aus gel<strong>in</strong>gt es leicht, Pakete zu modifizieren. So kann die Absende- o<strong>der</strong><br />
Empfangsadresse e<strong>in</strong>es Datenpaketes umgeschrieben werden. Dies geschieht gewollt z.B.<br />
bereits beim Passieren e<strong>in</strong>er Firewall mit Network Address Translation (NAT), o<strong>der</strong> durch<br />
sogenannte Bouncer und Redirecter. Die Modifikation des Absen<strong>der</strong>s kann auch aus weniger<br />
ehrenhaften Gründen, wie DoS-Attacken erfolgen.<br />
Weiterh<strong>in</strong> gibt e<strong>in</strong>em die Tatsache, dass bei vielen klassischen Protokollen (wie Telnet,<br />
Pop3, Imap4, ftp, http) Passwörter im Klartext übertragen werden und damit sehr e<strong>in</strong>fach<br />
abzufischen s<strong>in</strong>d, ke<strong>in</strong> gutes Gefühl. Der Inhalt <strong>der</strong> Pakete ist auch vor Fälschungen nicht<br />
sicher. Zwar bildet <strong>der</strong> IP-Stack Prüfsummen über den Hea<strong>der</strong> und den Paket<strong>in</strong>halt 1 , jedoch<br />
s<strong>in</strong>d die Rout<strong>in</strong>en e<strong>in</strong>fach auf verän<strong>der</strong>te Pakete anwendbar.<br />
Die Verteilung des IP-Adressraumes liefert vielerlei Anhaltspunkte <strong>in</strong> Bezug auf die Lage<br />
bestimmter Masch<strong>in</strong>en und <strong>Netzwerk</strong>strukturen. <strong>E<strong>in</strong></strong> genaues Wissen über solche Strukturen<br />
erleichtert das <strong>E<strong>in</strong></strong>dr<strong>in</strong>gen <strong>in</strong> Netze. So wird vielleicht das Zielsystem nicht direkt angegriffen,<br />
son<strong>der</strong>n mittelbar über weitere Rechner, die ”näher an dieser Masch<strong>in</strong>e liegen”,<br />
korrumpiert.<br />
18.1.3 Absicherung - Lösungsansätze<br />
Die geschil<strong>der</strong>ten Probleme erzwangen Lösungen, ohne die sichere private und geschäftliche<br />
Kommunikation nicht denkbar wäre. Dabei gibt es e<strong>in</strong>e Reihe verschiedener Ansätze, die an<br />
unterschiedlichen Stellen des Protokollstacks implementiert s<strong>in</strong>d. Von <strong>der</strong> Implementierung<br />
hängt dann jedoch ab, welche Daten und Protokolle sich mit diesen sicheren Verb<strong>in</strong>dungen<br />
abwickeln lassen und welche Stufe von Sicherheit erreicht wird. Die Komplexität <strong>der</strong> e<strong>in</strong>zelnen<br />
Lösungen variiert: <strong>E<strong>in</strong></strong>ige Konzepte kann man bereits mit normalen Userprivilegien<br />
ausführen, die an<strong>der</strong>en erfor<strong>der</strong>n zusätzliche Kernelmodifikationen und Root-Rechte.<br />
<strong>Netzwerk</strong>-Level Pakete, die zwischen Rechnern auf dem <strong>Netzwerk</strong> transportiert werden,<br />
s<strong>in</strong>d verschlüsselt. Die Verschlüsselung erfolgt <strong>in</strong> <strong>der</strong> Nähe des <strong>Netzwerk</strong>treibers, wo die<br />
Daten auf die Reise geschickt werden. Der Vorteil dieses Verfahrens liegt dar<strong>in</strong>, dass es<br />
transparent arbeitet.<br />
Än<strong>der</strong>ungen o<strong>der</strong> Zusätze zu den e<strong>in</strong>zlenen <strong>Netzwerk</strong>applikationen<br />
s<strong>in</strong>d unnötig. In dem Augenblick wo IP-Pakete verschlüsselt werden, kann diese Funktion <strong>in</strong><br />
Router e<strong>in</strong>gebaut werden. Diese werden üblicherweise sowieso als ”BlackBoxes” betrachtet,<br />
da sie den Verkehr zwischen Hosts transparent weiterleiten und selbst nicht für den normalen<br />
Anwen<strong>der</strong> sichtbar werden. So sieht e<strong>in</strong> Verschlüsselungsrouter für den Endanwen<strong>der</strong> wie<br />
e<strong>in</strong> nichtverschlüsseln<strong>der</strong> Router aus. <strong>E<strong>in</strong></strong> Beispiel hierfür ist z.B. die SonicWall Pro. Dieser<br />
Ansatz lohnt sich beson<strong>der</strong>s dann, wenn e<strong>in</strong>e Verschlüsselung auf Applikationsebene nicht<br />
möglich o<strong>der</strong> äußerst aufwändig sche<strong>in</strong>t und sehr viele verschiedene Anwendungen sicher<br />
kommunizieren sollen. Beispiele für diesen Ansatz s<strong>in</strong>d Microsofts ”Microsoft Po<strong>in</strong>t-to-Po<strong>in</strong>t<br />
1 IP merkt sich die Paketgesamtlänge und e<strong>in</strong>e Hea<strong>der</strong>prüfsumme, TCP die Hea<strong>der</strong>länge und e<strong>in</strong>e Daten-<br />
prüfsumme
256 KAPITEL 18. SICHERES IP<br />
Tunnel Protocol” (PPTP), die Crypto IP Encapsulation (CIPE), OpenVPN und IPsec. Die<br />
beiden letzteren Ansätze werden als freie Software im S<strong>in</strong>ne <strong>der</strong> GPL entwickelt.<br />
Für das Microsoft-Protokoll existiert e<strong>in</strong> L<strong>in</strong>ux-Client, um Verb<strong>in</strong>dung mit entsprechenden<br />
Microsoftsystemen aufnehmen zu können. Den Client, die Dokumentation und Installationsanleitungen<br />
f<strong>in</strong>det man bei den nachstehenden Literaturh<strong>in</strong>weisen. Inzwischen s<strong>in</strong>d<br />
etliche Anmerkungen zu diesem Protokoll veröffentlicht, die e<strong>in</strong>ige Schwächen des Konzeptes<br />
aufzeigen. Trotzdem sollte es <strong>der</strong> Vollständigkeit halber genannt werden, da es noch<br />
an vielen Stellen zum <strong>E<strong>in</strong></strong>satz kommt. Da es an <strong>der</strong> Transport- und Sicherungsschicht ansetzt,<br />
s<strong>in</strong>d verschiedene höhere Protokolle, also nicht nur IP-Pakete darüber zu tunneln.<br />
So können auch IPX und NetBIOSPakete verschickt werden. Der <strong>E<strong>in</strong></strong>richtungsaufwand für<br />
dieses Protokoll muss wegen e<strong>in</strong>iger Kernel- und Systemanpassungen als recht hoch e<strong>in</strong>geschätzt<br />
werden. Es gibt verschiedene Versionen und wi<strong>der</strong>sprüchliche Anleitungen im<br />
Netz, so dass je nach e<strong>in</strong>gesetztem System mit Problemen gerechnet werden muss. Wenn<br />
möglich sollte <strong>der</strong> <strong>E<strong>in</strong></strong>richtungsaufwand lieber auf e<strong>in</strong>e aus Sicht des Autors bessere Technologie,<br />
wie CIPE o<strong>der</strong> IPsec verwandt werden.<br />
Jedoch haben alle Low-level-Verschlüsselungen den geme<strong>in</strong>samen Nachteil, dass sie ke<strong>in</strong>en<br />
Schutz gegen <strong>E<strong>in</strong></strong>brüche und Attacken auf höheren Protokollebenen bieten. Trojaner per<br />
Email o<strong>der</strong> durch e<strong>in</strong>e Webanwendung, Exploits auf <strong>der</strong> Betriebssystemebene s<strong>in</strong>d auf diese<br />
Weise nicht zu unterb<strong>in</strong>den. Sie erfor<strong>der</strong>n spezielle Maßnahmen, wie die PGP-Verschlüsselung<br />
und Signierung von Emails o<strong>der</strong> Zertifikate für Web<strong>in</strong>halte und Programme.<br />
Socket-Level Für e<strong>in</strong>e ganze Reihe von Anwendungen s<strong>in</strong>d sichere Protokolle entwickelt<br />
worden. So wird <strong>der</strong> chronisch unsichere Telnet-, Remote-Log<strong>in</strong> bzw. Remote-Copy-Dienst<br />
zur Anmeldung an entfernten Masch<strong>in</strong>en durch die Secure Shell (SSH) ersetzt. Sie arbeitet<br />
auf TCP-Ebene, verschlüsselt aber den Inhalt von Paketen. So können die übertragenen<br />
Passwörter und Daten nicht von Dritten mitgehört und modifiziert werden. Mittels SSH<br />
lassen sich e<strong>in</strong>fache TCP-Tunnel realisieren, dieses wird <strong>in</strong> [lmssh] beschrieben.<br />
Für webbasierte Kommunikation wurde <strong>der</strong> Secure Socket Layer e<strong>in</strong>geführt, <strong>der</strong> es<br />
ermöglicht die HTTP-Kommunikation zwischen Server und Webbrowser zu verschlüsseln.<br />
Diese Verb<strong>in</strong>dung arbeitet auf <strong>der</strong> logischen Verb<strong>in</strong>dungsebene <strong>der</strong> kommunizierenden Programme.<br />
In beiden geschil<strong>der</strong>ten Fällen wird zwar verh<strong>in</strong><strong>der</strong>t, dass die Pakete mitgelesen<br />
und modifiziert werden können, jedoch bleibt dem Aussenstehenden die - <strong>der</strong> Kommunikation<br />
zugrundeliegende - Netzstruktur nicht verborgen. Der Aufwand <strong>der</strong> Konfiguration hält<br />
sich sowohl für SSH, als auch für SSL <strong>in</strong> Maßen. Es werden ke<strong>in</strong>e Kernelmodule benötigt<br />
und die Verschlüsselung kann vom normalen Benutzer ohne spezielle Rechte durch den<br />
Aufruf bzw. die entsprechende Konfiguration <strong>der</strong> Applikation erfolgen.<br />
Applikationsebene In jede Applikation kann e<strong>in</strong>e Verschlüsselung e<strong>in</strong>gebaut werden,<br />
welche die Daten - bevor sie <strong>in</strong> die Transportschicht gelangen - geeignet e<strong>in</strong>packt. <strong>E<strong>in</strong></strong><br />
Beispiel s<strong>in</strong>d Emailprogramme: Emails werden standardmäßig unverschlüsselt übertragen.<br />
Dabei könnte pr<strong>in</strong>zipiell je<strong>der</strong> Adm<strong>in</strong>istrator e<strong>in</strong>es Servers, <strong>der</strong> von <strong>der</strong> Mail durchlaufen<br />
wird, die Mail lesen. Natürlich wäre auch e<strong>in</strong> Geheimdienst o<strong>der</strong> Wirtschaftsspion <strong>in</strong> <strong>der</strong><br />
Lage die Leitungen anzuzapfen und könnte jede Mail mitlesen. Um dieses zu verh<strong>in</strong><strong>der</strong>n<br />
wird den Mailprogrammen e<strong>in</strong> Plug<strong>in</strong> h<strong>in</strong>zugeführt, bzw. die Fähigkeit Emails vor dem<br />
Versenden zu verschlüsseln und auf <strong>der</strong> Empfängerseite zu entschlüsseln.<br />
Viele Mailprogramme haben Verschlüsselungsmöglichkeiten bereits e<strong>in</strong>gebaut. Spezielle<br />
Verschlüsselungsprogramme wie Pretty Good Privacy (PGP) stehen zum Download bereit.<br />
Installations- und Gebrauchsanweisungen s<strong>in</strong>d allenthalben zu f<strong>in</strong>den. Die Installationsrout<strong>in</strong>en<br />
und Bedienoberflächen s<strong>in</strong>d ausgereift; sie können auch ohne tiefgreifende technische
18.2. VPNS - SICHERE NETZE ÜBER DAS INTERNET 257<br />
Vorkenntnisse genutzt werden.<br />
18.2 VPNs - Sichere Netze über das Internet<br />
<strong>E<strong>in</strong></strong> VPN ”Virtual Private Network 2 ” verb<strong>in</strong>det entwe<strong>der</strong> zwei <strong>Netzwerk</strong>e o<strong>der</strong> e<strong>in</strong>en Computer<br />
mit e<strong>in</strong>em <strong>Netzwerk</strong> o<strong>der</strong> zwei Computer - und das jeweils auch über öffentliche,<br />
unsichere Verb<strong>in</strong>dungen (z.B. das Internet). Der Ausdruck ”privat” bedeutet, dass die Verb<strong>in</strong>dung<br />
zwischen zwei Rechnern genauso gut gesichert ist, als wenn sie zusammen <strong>in</strong> e<strong>in</strong>em<br />
lokalen <strong>Netzwerk</strong> kommunizieren würden. Obwohl die Rechner räumlich durch das öffentliche<br />
Netz getrennt s<strong>in</strong>d, hat man durch das Tunnel<strong>in</strong>g-Verfahren e<strong>in</strong>e Situation geschaffen,<br />
welche die Rechner ”virtuell” wie Mitglie<strong>der</strong> des lokalen <strong>Netzwerk</strong>es ersche<strong>in</strong>en läßt.<br />
Left Subnet<br />
192.168.2.0/24<br />
Öffentliches<br />
unsicheres<br />
IP-<strong>Netzwerk</strong><br />
202.38.21.24 62.137.15.134<br />
lisa.dyndns.org ra<strong>in</strong>er.dyndns.org<br />
Internet<br />
Right Subnet<br />
192.168.4.0/24<br />
192.168.2.254 192.168.4.254<br />
Abbildung 18.2: <strong>E<strong>in</strong></strong>e typische VPN-Situation<br />
Folgende Ziele sollen durch VPN’s erreicht werden:<br />
• erweitertes Rout<strong>in</strong>g - IP-Netze können von dritten unsichtbar über öffentliche Netze<br />
getunnelt werden. Dadurch läßt sich die zugrundeliegende <strong>Netzwerk</strong>struktur verdecken<br />
und die Identität <strong>der</strong> kommunizierenden Rechner verbergen.<br />
• Sicherstellung <strong>der</strong> Absen<strong>der</strong>authenzität<br />
• Verschlüsselung des Inhaltes unabhängig von <strong>der</strong> Paketart<br />
• Vere<strong>in</strong>fachung des netzwerk<strong>in</strong>ternen Rout<strong>in</strong>gs. Räumlich und <strong>in</strong>frastrukturell weit<br />
ause<strong>in</strong>an<strong>der</strong>liegende Teile e<strong>in</strong>er Organisation ersche<strong>in</strong>en auf <strong>der</strong> logischen <strong>Netzwerk</strong>ebene<br />
nahe beie<strong>in</strong>an<strong>der</strong><br />
18.3 CIPE<br />
18.3.1 Idee<br />
<strong>E<strong>in</strong></strong>en e<strong>in</strong>fachen und dynamischen Ansatz für Verschlüsselungstunnel bietet die Crypto IP<br />
Encapsulation. Dieses Protokoll ist so angelegt, dass IP-Pakete <strong>in</strong> verschlüsselten UDP-<br />
Paketen übertragen werden. Der Vorteil UDP als Transportprotokoll zu verwenden, liegt<br />
2 zu deutsch: Virtuelles Privates <strong>Netzwerk</strong>
258 KAPITEL 18. SICHERES IP<br />
<strong>in</strong> <strong>der</strong> leichten Unterscheidbarkeit verschiedener Endpunkte. Bei e<strong>in</strong>er e<strong>in</strong>fachen IP-zu-IP-<br />
Kapselung ist man auf die eigene e<strong>in</strong>getragene IP-Adresse beschränkt und kann schwer<br />
mehrere Tunnel vone<strong>in</strong>an<strong>der</strong> unterscheiden. Weiterh<strong>in</strong> wird <strong>der</strong> Transport über dynamische<br />
Adressen, Network Address Translation und SOCKS Proxies ermöglicht, die ke<strong>in</strong>e<br />
spezielle Anpassung für CIPE benötigen. CIPE kann damit komplett auf <strong>der</strong> bestehenden<br />
IP-Infrastruktur aufsetzen, ist allerd<strong>in</strong>gs nicht kompatibel zu den <strong>in</strong> RFCs publizierten<br />
Pr<strong>in</strong>zipen von IPsec.<br />
Es existieren Implementationen für L<strong>in</strong>ux und W<strong>in</strong>dows. Die L<strong>in</strong>uximplementation erfor<strong>der</strong>t<br />
e<strong>in</strong> spezielles Kernelmodul, das jedoch bei den meisten Distributionen mit CIPE bereits<br />
mitgeliefert wird. Das Kernelmodul regelt das Senden und Empfangen <strong>der</strong> IP-Pakete.<br />
Es def<strong>in</strong>iert e<strong>in</strong> <strong>Netzwerk</strong>device cipcb*, z.B.<br />
ifconfig cipcb0<br />
cipcb0 L<strong>in</strong>k encap:IPIP Tunnel HWaddr<br />
<strong>in</strong>et addr:192.168.2.254 P-t-P:192.168.4.254 Mask:255.255.255.255<br />
UP POINTOPOINT RUNNING NOARP MTU:1442 Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:100<br />
RX bytes:0 (70.6 Mb) TX bytes:0 (813.0 Mb)<br />
o<strong>der</strong> mittels des IP-Route2-Tools ip:<br />
ip addr show dev cipcb0<br />
9: cipcb0: mtu 1442 qdisc pfifo_fast qlen 100<br />
l<strong>in</strong>k/ipip 00:00:5e:b2:00:43 peer 00:00:00:00:00:00<br />
<strong>in</strong>et 192.168.2.2 peer 192.168.2.1/32 scope global cipcb0<br />
Def<strong>in</strong>ierte CIPE-Interfaces tauchen als Hostrouten <strong>in</strong> <strong>der</strong> Kernelrout<strong>in</strong>gtabelle auf. Die<br />
Devices können analog zu an<strong>der</strong>en <strong>Netzwerk</strong>devices angesprochen und benutzt werden, z.B.<br />
um weitere Routen darüber mittels /etc/cipe/ip-up e<strong>in</strong>zutragen o<strong>der</strong> Firewall-Regeln darauf<br />
anzuwenden. Im Namen des <strong>Netzwerk</strong><strong>in</strong>terfaces wird <strong>der</strong> Verschlüsselungsalgorithmus (im<br />
Beispiel ”b” für blowfish) kodiert, <strong>der</strong> zum Zeitpunkt <strong>der</strong> Übersetzung von CIPE angegeben<br />
werden kann.<br />
Im ”user space” läuft <strong>der</strong> H<strong>in</strong>tergrunddienst ciped. Dieser kann mit dem pppd verglichen<br />
werden. Er regelt das Aufsetzen und Schliessen des <strong>Netzwerk</strong><strong>in</strong>terfaces anhand <strong>der</strong> <strong>in</strong><br />
den entsprechenden Konfigurationsdateien vorhandenen <strong>E<strong>in</strong></strong>stellungen.<br />
Verschlüsselungsrouter auf Basis von CIPE weisen e<strong>in</strong>e herausragende Leistung auf,<br />
mit Datentransferraten, die nur zwei bis drei Prozent unter denen des unverschlüsselten<br />
Verkehrs liegen. <strong>E<strong>in</strong></strong> Teil <strong>der</strong> Performanz von CIPE kommt durch die Verwendung von<br />
UDP als Transport Protokoll. Es vermeidet verschiedene Formen subtiler Interaktionen, die<br />
durch mehrere TCP-Layer entstehen können. Diese Bee<strong>in</strong>flussungen tragen dazu bei, dass<br />
die Leistung von MPPE/PPTP 15 % bis 20 % unter <strong>der</strong> re<strong>in</strong>en Verb<strong>in</strong>dungsgeschw<strong>in</strong>digkeit<br />
liegen. CIPE Tunnel s<strong>in</strong>d sehr robust. Sie können durchaus mehrere Wochen laufen, ohne<br />
wie<strong>der</strong> neu aufgebaut werden zu müssen (wenn sich die IP-Daten <strong>der</strong> Verb<strong>in</strong>dung nicht<br />
än<strong>der</strong>n).
18.3. CIPE 259<br />
18.3.2 Aufsetzen von CIPE<br />
Meistens wird CIPE mit <strong>der</strong> jeweiligen L<strong>in</strong>uxdistribution mitgeliefert. Dann wird üblicherweise<br />
e<strong>in</strong> Startskript und das Konfigurationsverzeichnis /etc/cipe angelegt. Das Kernelmodul<br />
cipcb.o wird entwe<strong>der</strong> automatisch mit dem Start des CIPE-Daemons geladen o<strong>der</strong><br />
kann per <strong>in</strong>smod cipcb e<strong>in</strong>gefügt werden. Für jeden CIPE-Tunnel wird e<strong>in</strong>e eigene Konfigurationsdatei<br />
angelegt. Bei SuSE wird dem Date<strong>in</strong>amen ”option” die Bezeichnung <strong>der</strong><br />
Verb<strong>in</strong>dung nach e<strong>in</strong>em Punkt angehängt, so dass alle Verb<strong>in</strong>dungen mit dem Init-Skript<br />
gestartet werden, die mit ”option.*” beg<strong>in</strong>nen.<br />
Für das Beispiel-VPN im Bild würden die Konfigurat<strong>in</strong>sdateien für beide Tunnelendpunkte<br />
wie folgt aussehen:<br />
# option.example-vpn right side<br />
#<br />
# the peer’s IP address<br />
ptpaddr 192.168.4.254<br />
# our CIPE device’s IP address<br />
ipaddr 192.168.2.254<br />
# my UDP address. Note: if you set port 0 here, the system will pick<br />
# one and tell it to you via the ip-up script. Same holds for IP 0.0.0.0.<br />
me 62.137.15.134:10000<br />
# ...and the UDP address we connect to. Of course no wildcards here.<br />
peer 202.38.21.24:10001<br />
# The static key. Keep this file secret!<br />
# The key is 128 bits <strong>in</strong> hexadecimal notation.<br />
key 0219e5bfcae114c9203e2e26f048e21d<br />
Sowie für die Gegenstelle:<br />
# option.example-vpn left side<br />
#<br />
# the peer’s IP address<br />
ptpaddr 192.168.2.254<br />
# our CIPE device’s IP address<br />
ipaddr 192.168.4.254<br />
# my UDP address. Note: if you set port 0 here, the system will pick<br />
# one and tell it to you via the ip-up script. Same holds for IP 0.0.0.0.<br />
me 202.38.21.24:10001<br />
# ...and the UDP address we connect to. Of course no wildcards here.<br />
peer 62.137.15.134:10000<br />
# The static key. Keep this file secret!<br />
# The key is 128 bits <strong>in</strong> hexadecimal notation.<br />
key 0219e5bfcae114c9203e2e26f048e21d<br />
In diesem Beispiel wird davon ausgegangen, dass die routebaren Internet-Adressen<br />
62.137.15.134 und 202.38.21.24 statisch s<strong>in</strong>d. <strong>E<strong>in</strong></strong>e solche Situation betrifft Firmen, die mit<br />
festen IP-Nummern ans Netz angebunden s<strong>in</strong>d. Für den Privatanwen<strong>der</strong> mit <strong>der</strong> Internet-<br />
<strong>E<strong>in</strong></strong>wahl und dynamischer IP-Vergabe kann man e<strong>in</strong>e Seite so konfigurieren, dass sie <strong>in</strong><br />
Abhängigkeit von <strong>der</strong> e<strong>in</strong>gehenden Verb<strong>in</strong>dung die Gegenstelle erkennt:<br />
# option.example-vpn right side
260 KAPITEL 18. SICHERES IP<br />
#<br />
[ ... ]<br />
me 134.34.80.5:10001<br />
peer 127.0.0.1:9<br />
maxerr -1<br />
Hier<strong>in</strong> besteht <strong>der</strong> Trick, dass als Gegenstelle e<strong>in</strong>fach die Masch<strong>in</strong>e selbst mit dem Discard-<br />
Port angegeben wird, <strong>der</strong> alle e<strong>in</strong>treffenden Pakete verwirft. Damit <strong>der</strong> ciped nicht abbricht,<br />
wird die Zahl <strong>der</strong> erlaubten Fehlversuche mit ”-1” auf unendlich gesetzt. Die Gegenstelle,<br />
d.h. <strong>der</strong> Rechner mit <strong>der</strong> dynamischen IP-Adresse erhält folgende <strong>E<strong>in</strong></strong>stellungen:<br />
# option.example-vpn left side<br />
#<br />
[ ... ]<br />
me 0.0.0.0:10000<br />
peer 134.34.80.5:10001<br />
dynip<br />
Nur dieser Rechner kann e<strong>in</strong>e Verb<strong>in</strong>dung <strong>in</strong>itiieren. Wenn zwei Masch<strong>in</strong>en mit dynamischer<br />
IP mite<strong>in</strong>an<strong>der</strong> kommunizieren, kann auch <strong>der</strong> DNS-Name statt e<strong>in</strong>er festen IP<br />
e<strong>in</strong>getragen werden. Probleme könnten jedoch auftreten, wenn sich die IP-Nummer än<strong>der</strong>t.<br />
Mit CIPE 1.5 ist die Möglichkeit h<strong>in</strong>zugekommen, Schlüssel über e<strong>in</strong> Public-Key-Verfahren<br />
analog zu SSH auszutauschen. Dieser Prozess wird mittels des Zusatzprogrammes pkcipe<br />
abgewickelt.<br />
<strong>E<strong>in</strong></strong>facher und weniger fehleranfällig, sowie unter Sicherheitsaspekten meistens ausreichend,<br />
ist es <strong>in</strong> den Konfigurationen e<strong>in</strong>en geme<strong>in</strong>samen Schlüssel von 128 bit Länge zu<br />
verwenden. Diesen kann man z.B. mittels echo ”this is my keyphrase”—md5sum generieren<br />
und an die beiden Tunnelenden kopieren. Dieser Schlüssel dient zur Generierung<br />
des häufiger gewechselten dynamischen Schlüssels mit dem die Daten tatsächlich gecryptet<br />
werden.<br />
Die realen routebaren Adressen und die virtuellen Tunneladressen müssen sich <strong>in</strong> jedem<br />
Fall unterscheiden. Zusätzlich def<strong>in</strong>ierte Routen und Firewallregeln sollten nur mittels ipup<br />
Skript e<strong>in</strong>getragen und mittels ip-down abgebaut werden. Wenn Firewalls e<strong>in</strong>gesetzt<br />
werden, sollte daran gedacht werden, dass die für CIPE benutzten Ports freigegeben s<strong>in</strong>d.<br />
pkcipe benutzt an<strong>der</strong>e als die Tunnelportnummern und muss geson<strong>der</strong>t betrachtet werden.<br />
Die <strong>E<strong>in</strong></strong>schränkung, dass sich mittels CIPE ausschliesslich 2er Tunnel aufbauen lassen, führt<br />
zur Beschäftigung mit IPsec.<br />
18.4 IPsec-Theorie<br />
IPsec ist e<strong>in</strong> Versuch, sämtlichen 3 Internet-Verkehr automatisch zu verschlüsseln. Damit<br />
dies ohne Verän<strong>der</strong>ung <strong>der</strong> bestehenden Anwendungen geschehen kann, wird die Verschlüsselung<br />
und Authentifizierung auf IP-Ebene, also unterhalb von TCP, UDP und an<strong>der</strong>er Protokolle<br />
durchgeführt.<br />
IPSec wird als Internet Standard entwickelt. Es kann <strong>in</strong> zwei verschiedenen Betriebsarten<br />
e<strong>in</strong>gesetzt werden: Im Tunnelmode werden die Pakete - wie bei an<strong>der</strong>en Tunnel<strong>in</strong>gverfahren<br />
auch - komplett mit IP-Hea<strong>der</strong> verschickt. So lassen sich vollständig virtuelle Netze schaffen,<br />
die unabhängig von <strong>der</strong> darunterliegenden Infrastruktur kommunizieren können. Im<br />
3 o<strong>der</strong> zum<strong>in</strong>dest e<strong>in</strong>en großen Teil des
18.4. IPSEC-THEORIE 261<br />
IP Hea<strong>der</strong> Authentication<br />
Hea<strong>der</strong><br />
Next Hea<strong>der</strong> Payload Length RESERVED<br />
Security Parameters Index (SPI)<br />
Sequence Number Field<br />
Authentication Data (variable)<br />
32 bit<br />
Data (variable)<br />
Abbildung 18.3: Aufbau und <strong>E<strong>in</strong></strong>satz im IP e<strong>in</strong>es Authentication-Hea<strong>der</strong><br />
Transportmode - dem e<strong>in</strong>facheren Verfahren - werden nur die Daten <strong>der</strong> Transportschicht<br />
beachtet. Bei beiden Typen werden die Daten verschlüsselt und es wird jeweils gegenüber<br />
<strong>der</strong> an<strong>der</strong>en Masch<strong>in</strong>e bzw. dem Tunnelendpunkt authentifiziert.<br />
IP Hea<strong>der</strong> Data (variable)<br />
Neuer<br />
IP Hea<strong>der</strong><br />
Neuer<br />
IP Hea<strong>der</strong><br />
IP Hea<strong>der</strong> Data (variable)<br />
Auth.<br />
Hea<strong>der</strong><br />
Orig<strong>in</strong>al IP-Datagramm<br />
IP Hea<strong>der</strong> Data (variable)<br />
authentifiziert<br />
Getunneltes IP-Datagramm<br />
Datagramm mit Auth-Hea<strong>der</strong> im Tunnelmodus<br />
Abbildung 18.4: <strong>E<strong>in</strong></strong>fügen des AH im Tunnelmodus<br />
Zur Realisierung <strong>der</strong> Paket<strong>in</strong>tegrität s<strong>in</strong>d dem Internet-Protokoll zwei weitere Hea<strong>der</strong>typen<br />
(AH und ESP) <strong>in</strong> <strong>der</strong> Transportschicht h<strong>in</strong>zugefügt worden. Beide Hea<strong>der</strong> s<strong>in</strong>d pr<strong>in</strong>zipiell<br />
unabhängig von möglichen kryptographischen Verfahren, um Anpassungen an konkrete<br />
<strong>E<strong>in</strong></strong>satzgebiete und den Stand <strong>der</strong> Kryptografie zu erlauben. Mittels Authentication Hea<strong>der</strong><br />
(AH) wird die Integrität <strong>der</strong> übertragenen Daten geschützt und die Authentizität sichergestellt.<br />
Selbst wenn die Daten nicht verschüsselt werden, erlaubt AH die Überprüfung<br />
<strong>der</strong> Daten. Dies erfolgt mittels Prüfsumme über den Datenblock durch SHA-1 o<strong>der</strong> MD5-<br />
Verfahren.<br />
ESP steht für Encapsulated Security Payload und sorgt durch Verschlüsselung für: Die<br />
Vertraulichkeit <strong>der</strong> Daten, <strong>der</strong>en Integrität und die Authentifizierung <strong>der</strong> Datenquellen<br />
von IP. Der ESP-Hea<strong>der</strong> ist selbst nicht verschlüsselt, <strong>der</strong> ESP-Trailer teilweise. Der ESP-<br />
Hea<strong>der</strong> enthält: Sicherheitsparameter<strong>in</strong>dex (SPI), den Verschlüsselungsalgorithmus, die Authentifizierung<br />
und den Modus. Im Trailer s<strong>in</strong>d e<strong>in</strong>e Seriennummer, e<strong>in</strong>e Prüfsumme zur<br />
Sicherstellung <strong>der</strong> Daten<strong>in</strong>tegrität und weitere SPI.
262 KAPITEL 18. SICHERES IP<br />
Security Parameters Index (SPI)<br />
Sequence Number Field<br />
Payload Data (variable)<br />
Padd<strong>in</strong>g (0-255 byte) Pad Length<br />
Authentication Data (variable)<br />
32 bit<br />
Padd<strong>in</strong>g<br />
Next Hea<strong>der</strong><br />
Abbildung 18.5: Aufbau e<strong>in</strong>es ESP Paketes<br />
IP Hea<strong>der</strong> Data (variable)<br />
Neuer<br />
IP Hea<strong>der</strong><br />
Neuer<br />
IP Hea<strong>der</strong><br />
IP Hea<strong>der</strong> Data (variable)<br />
ESP<br />
Hea<strong>der</strong><br />
Orig<strong>in</strong>al IP-Datagramm<br />
Getunneltes IP-Datagramm<br />
IP Hea<strong>der</strong> Data (variable)<br />
verschlüsselt<br />
authentifiziert<br />
e<br />
n<br />
c<br />
r<br />
y<br />
p<br />
t<br />
e<br />
d<br />
Datagramm mit ESP im Tunnelmodus<br />
ESP<br />
Trail<br />
Abbildung 18.6: <strong>E<strong>in</strong></strong>satz des ESP im IP-Datagramm<br />
ESP<br />
Auth<br />
Ergänzt werden die beiden Hea<strong>der</strong>-Typen durch das Internet Security Association and<br />
Key Management Protocol (ISAKMP). Dieses wird dazu verwendet, e<strong>in</strong>e Security Association<br />
zwischen den beteiligten Kommunikationspartnern zu etablieren und Schlüssel auszutauschen.<br />
Es def<strong>in</strong>iert hierzu Formate und Methoden zur Generierung, Modifikation und<br />
Entsorgung von SAs. Unter dem Internet Key Exchange (IKE) versteht man e<strong>in</strong> konkretes<br />
Schlüsselaustauschverfahren, welches speziell auf die Benutzung mit ISAKMP abgestimmt<br />
ist.<br />
IPSec wird sich vermutlich auf Dauer durchsetzen. Durch se<strong>in</strong>e Aufnahme als Internetstandard<br />
besteht die Hoffnung, dass sich VPN’s e<strong>in</strong>em geme<strong>in</strong>samen Standard annähern und<br />
später produktübergreifend <strong>in</strong>teroperabel werden. Unter L<strong>in</strong>ux erweitert das FreeSWAN-<br />
Projekt [fs] den L<strong>in</strong>ux-IP-Stack um die Fähigkeiten von IPsec. Es gibt Lösungen für W<strong>in</strong>dows2000<br />
und XP, sowie e<strong>in</strong>ige proprietäre kommerzielle Produkte, wie die SonicWall Pro.<br />
Zur Zeit funktioniert die Zusammenarbeit zwischen verschiedenen Security-Gateways<br />
und -Lösungen jedoch nur e<strong>in</strong>geschränkt. Als Beispiel wird die erfolgreiche Zusammenarbeit<br />
von L<strong>in</strong>ux/FreeSWAN mit <strong>der</strong> SonicWall Pro genannt. Jedoch funktionieren hier nicht alle<br />
vom Standard vorgeschlagenen Features.<br />
18.5 IPsec praktisch - FreeSWAN<br />
Die Konfigurationsmöglichkeiten und Fähigkeiten von IPsec übersteigen die von an<strong>der</strong>en Sicherheitslösungen<br />
erheblich. Das impliziert jedoch e<strong>in</strong>e Modifikation des Kernels. Aufgrund<br />
sehr komfortabler Skripte gel<strong>in</strong>gen die notwendigen Anpassungen auch weniger erfahrenen<br />
a<br />
u<br />
t<br />
h<br />
e<br />
n<br />
t<br />
i<br />
c<br />
a<br />
t<br />
e<br />
d
18.5. IPSEC PRAKTISCH - FREESWAN 263<br />
Kernelbauer. Vielen L<strong>in</strong>uxdistributionen liegt <strong>in</strong>zwischen die FreeSWAM IPsec-Suite bei.<br />
Die FreeSWAN IPSec Authentifizierung und Verschlüsselung kann entwe<strong>der</strong> SSL o<strong>der</strong><br />
RSA (public/private Schlüsselpaare) o<strong>der</strong> statische PSK (Pre-Shared Keys) verwenden.<br />
IPSec Verschlüsselungstunnel gibt es <strong>in</strong> verschiedenen Formen, die drei üblichsten s<strong>in</strong>d:<br />
Netz-Netz, Netz-Host, Host-Host.<br />
18.5.1 Konfigurationsmöglichkeiten von IPsec<br />
Verschlüsselter Internet-Verkehr zwischen Rechnern o<strong>der</strong> ganzen Netzen kann auf vielerlei<br />
Arten genutzt werden. Hier sollen e<strong>in</strong>ige Beispiele für den <strong>E<strong>in</strong></strong>satz von IPsec im täglichen<br />
Leben gezeigt werden.<br />
• Po<strong>in</strong>t-to-Po<strong>in</strong>t Verschlüsselung zwischen zwei e<strong>in</strong>zelnen Masch<strong>in</strong>en - Die e<strong>in</strong>fachste<br />
Art e<strong>in</strong>e IPsec Verschlüsselung zu nutzen besteht dar<strong>in</strong>, den kompletten IP-Verkehr<br />
zwischen zwei Masch<strong>in</strong>en zu verschlüsseln: die Po<strong>in</strong>t-to-Po<strong>in</strong>t Verschlüsselung. Hierbei<br />
werden <strong>in</strong> <strong>der</strong> Konfiguration ke<strong>in</strong>e Netze h<strong>in</strong>ter den verme<strong>in</strong>dlichen Gateways angegeben.<br />
Der Aufwand ist hierbei ger<strong>in</strong>g und es wird so auf e<strong>in</strong>fache Weise e<strong>in</strong>e sichere<br />
Verb<strong>in</strong>dung für alle Applikationen aufgebaut.<br />
• Von <strong>der</strong> WG <strong>in</strong> die Firma - Bei dieser IPsec Anwendung handelt es sich um e<strong>in</strong>e Netzzu-Netz<br />
Konfiguration. Als Beispiel soll hier die heimische WG (alternativ: das Netz<br />
im <strong>E<strong>in</strong></strong>familienhaus mit Vater, Mutter und K<strong>in</strong><strong>der</strong>n) auf das Firmen<strong>in</strong>ternet <strong>Netzwerk</strong><br />
des Arbeitgebers zugreifen. Das WG-Netz ist dabei z.B. über e<strong>in</strong>en L<strong>in</strong>ux-Router<br />
(”me<strong>in</strong>ewg.dyndns.org”) und DSL an das Internet angeschlossen. H<strong>in</strong>ter diesem Router<br />
bef<strong>in</strong>det sich das private Netz <strong>der</strong> WG (172.16.1.0/255.255.255.0). Die Firma ist<br />
über e<strong>in</strong>e Firewall, die idealerweise über e<strong>in</strong>e IPsec Implementation verfügt 4 , mit dem<br />
Internet verbunden (gateway.firma.de). (siehe Abbildung: VPN1.eps)<br />
Nachdem die Konfiguration (siehe unten) vorgenommen wurde, kann man aus dem<br />
e<strong>in</strong>en privaten Netz problemlos auf das an<strong>der</strong>e zugreifen. Die beiden router (me<strong>in</strong>ewg.dyndns.org)<br />
und (gateway.firma.de) übertragen die entsprechenden Pakete über<br />
den aufgebauten IPsec Tunnel, was für die Benutzer völlig transparent geschieht.<br />
• “Direktes Ersche<strong>in</strong>en lassen <strong>der</strong> Masch<strong>in</strong>e im Firmennetz” - damit ist <strong>in</strong> diesem Zusammenhang<br />
geme<strong>in</strong>t, dass e<strong>in</strong> weit entfernter Rechner über IPsec sozusagen <strong>in</strong> das<br />
Firmennetzwerk <strong>in</strong>tegriert wird. Dabei erhält <strong>der</strong> Rechner e<strong>in</strong>e IP aus dem Pool <strong>der</strong><br />
Firma und ist nicht über se<strong>in</strong>e aktuelle (evt. dynamisch vergebene) IP e<strong>in</strong>es Provi<strong>der</strong>s<br />
zu erreichen.<br />
Der Vorteil e<strong>in</strong>er solchen Installation besteht dar<strong>in</strong>, dass <strong>in</strong> IP-Netzen die Zugriffe<br />
auf Resourcen am e<strong>in</strong>fachsten und effektivsten durch IP-Beschränkungen verwirklicht<br />
werden. So ist es beispielsweise möglich - beim Zugriff auf Fileserver, Datenbankserver<br />
o<strong>der</strong> Arbeitsgruppen - den Zugriff auf das <strong>in</strong>terne Netz e<strong>in</strong>zuschränken, also mögliche<br />
externe IPs zu berücksichtigen.<br />
• Road-Warrior - Die ”Road-Warrior” Konfiguration ist das Paradebeispiel für den reisenden<br />
Handels-/Versicherungsvertreter mit dem Notebook unterm Arm. Bei diesem<br />
Setup handelt es sich um e<strong>in</strong>e Rechner-Netz Situation, <strong>in</strong> <strong>der</strong> <strong>der</strong> IPsec-Tunnel dafür<br />
sorgt, dass <strong>der</strong> Road-Warrior sich über e<strong>in</strong>e öffentliche Leitung <strong>in</strong>s Internet e<strong>in</strong>wählen<br />
und auf das <strong>in</strong>terne Netz se<strong>in</strong>er Firma zugreifen kann. Somit entfällt die Notwendigkeit<br />
e<strong>in</strong>er <strong>E<strong>in</strong></strong>wahlanlage <strong>in</strong> <strong>der</strong> Firma, falls <strong>der</strong> Vertreter während se<strong>in</strong>er Reisen auf<br />
4 wie z.B. die SonicWall Pro o<strong>der</strong> <strong>der</strong> klassichen L<strong>in</strong>ux-Router
264 KAPITEL 18. SICHERES IP<br />
Firmenrechner zugreifen muß. <strong>E<strong>in</strong></strong> angenehmer Nebeneffekt ist dabei natürlich auch,<br />
dass potentiell vertrauliche Daten nicht unverschlüsselt durch die Leitungen geschickt<br />
werden müssen.<br />
18.5.2 <strong>E<strong>in</strong></strong>richtung von IPsec unter L<strong>in</strong>ux<br />
FreeSwan implementiert IPsec unter L<strong>in</strong>ux. Zum Gesamtpaket zählen das Kernelmodul ipsec.o,<br />
die Konfigurationsdatei /etc/ipsec.conf, sowie das Userspace-Programm ipsec. Diese<br />
sollten geme<strong>in</strong>sam mit <strong>der</strong> jeweiligen L<strong>in</strong>ux-Distribution <strong>in</strong>stalliert se<strong>in</strong>.<br />
Wenn diese nicht beiliegen o<strong>der</strong> seitens des Distributors beigelegt werden o<strong>der</strong> die jeweils<br />
aktuellste Version verwendet werden soll, empfielt sich das Selbstkompilieren. Hierzu lädt<br />
man die Sourcen von <strong>der</strong> FreeSWAN-Website (siehe [frsw]) herunter und entpackt diese.<br />
Vorher sollten jedoch die Kernelsources zum verwendeten Kernel vorbereitet werden.<br />
<strong>E<strong>in</strong></strong>richten des Kernels Beispielhaft soll hier die Installation und Übersetzung <strong>der</strong> Quellen<br />
von FreeSWAN auf e<strong>in</strong>em Rechner mit RedHat L<strong>in</strong>ux 8.0 beschrieben werden, wofür<br />
root-Rechte erfor<strong>der</strong>lich s<strong>in</strong>d. Auf SuSE-Systemem kann man sich die Mühe sparen, da e<strong>in</strong>e<br />
fertig übersetze FreeSWAN Version <strong>in</strong> <strong>der</strong> Distribution enthalten ist.<br />
Man hat die Möglichkeit entwe<strong>der</strong> die FreeSWAN-Quellen, o<strong>der</strong> schon kompilierte Red-<br />
Hat B<strong>in</strong>aries5 zu benutzen. Das RPM-Paket, das man hier f<strong>in</strong>det, be<strong>in</strong>haltet allerd<strong>in</strong>gs nur<br />
die Userspace Programme - das Kernelmodul muß man trotzdem selber übersetzen. Das<br />
von uns benutzte Testsystem läuft unter RedHat 8.0, wobei die als ”Server” bezeichnete<br />
Installation gewählt wurde. Zusätzlich zu den vorgegebenen Angaben bei <strong>der</strong> Paketauswahl<br />
wurden aus <strong>der</strong> Gruppe ”Development”, die ”Development Tools” sowie ”Kernel development”<br />
<strong>in</strong>stalliert.<br />
Bau des Kernels Werden das Kernelmodul und die Programme des Userspace von <strong>der</strong><br />
gewählten Distribution nicht mitgeliefert, so muss die Software aus den Sourcen gebaut<br />
werden. Besitzer <strong>der</strong> aktuellen SuSE-Distributionen haben es da leichter, auch wenn nicht<br />
immer das aktuellste FreeSWAN mitgeliefert wird.<br />
Der Start <strong>der</strong> Installation von FreeSWAN beg<strong>in</strong>nt mit dem Download <strong>der</strong> aktuellen<br />
Quellen <strong>in</strong> unserem Fall 1.99 vom FreeSWAN-FTP-Server:<br />
ftp://ftp.xs4all.nl/pub/crypto/freeswan<br />
Danach folgt das Entpacken des Pakets mit ”tar xvzf freeswan-1.99.tar.gz”, was e<strong>in</strong>em<br />
als nächstes die Möglichkeit eröffnet, e<strong>in</strong>en Blick <strong>in</strong> die Datei ”INSTALL” zu werfen (das<br />
sei übrigens jedem empfohlen !). Hierbei fällt bald auf, dass <strong>der</strong> Makefile vier Möglichkeiten<br />
bereithält, wobei <strong>in</strong> jedem Fall zuerst automatisch mit Hilfe des Pakets ”patch” die<br />
Verän<strong>der</strong>ungen im Baum <strong>der</strong> Kernelquellen vorgenommen werden:<br />
• make menugo - Wer diesen Weg wählt, hat alle Möglichkeiten, die man auch mit dem<br />
klassischen make menuconfig hat. Falls die Kernel bisher noch nicht konfiguriert<br />
wurde (falls z.B. die Quellen gerade erst entpackt wurden), bietet sich <strong>der</strong> Weg über<br />
make menugo an.<br />
• make xgo - Das gleiche wie ”menugo” nur dieses mal im graphischen Modus unter<br />
X11.<br />
• make ogo - Für die Puristen unter den Lesern ist diese Möglichkeit beson<strong>der</strong>s <strong>in</strong>teressant,<br />
da sie dem guten alten make config entspricht.<br />
5 ftp://ftp.xs4all.nl/pub/crypto/freeswan/b<strong>in</strong>aries/RedHat-RPMs/2.4.18-24
18.5. IPSEC PRAKTISCH - FREESWAN 265<br />
• make oldgo - ”oldgo” entspricht make oldconfig und übernimmt die aktuelle Kernelkonfiguration<br />
aus “.config” und wählt alle IPsec Optionen aus, wobei IPsec selber<br />
als Modul ipsec.o übersetzt wird.<br />
Bef<strong>in</strong>det sich auf dem System schon e<strong>in</strong> fertig konfigurierter Kernel o<strong>der</strong> hat <strong>der</strong> Adm<strong>in</strong>istrator<br />
ke<strong>in</strong>e Lust alles neu zu übersetzen, dann kann make menumod sehr hilfreich<br />
se<strong>in</strong>. Dieser Befehl br<strong>in</strong>gt den Benutzer <strong>in</strong> die Kernelconfiguration mittels make menuconfig<br />
und kompiliert ausschließlich die Module des Kernels neu, was natürlich voraussetzt,<br />
dass <strong>in</strong> <strong>der</strong> Konfiguration IPsec als Modul ausgewählt wurde (so wie unten gezeigt).<br />
Nachdem <strong>der</strong> Kernel o<strong>der</strong> nur die Module kompiliert und <strong>in</strong>stalliert s<strong>in</strong>d 6 , bef<strong>in</strong>den<br />
sich die Userspace-Programme unter /usr/local/lib/ipsec und unter /usr/local/sb<strong>in</strong>. Die<br />
Konfigurationsdateien ipsec.conf und ipsec.secrets liegen im Verzeichnis /etc.<br />
18.5.3 <strong>E<strong>in</strong></strong>schaltbare Optionen<br />
Nach dem Patchen des Kernels stehen dem Anwen<strong>der</strong> mehrere IPsec Optionen im Kernel<br />
zur Verfügung. Hier sei nur kurz auf <strong>der</strong>en Bedeutung e<strong>in</strong>gegangen. Weitere Details s<strong>in</strong>d<br />
dem entsprechenden RFC2402 [rfc] zu entnehmen.<br />
Übersicht nach make mengo im Bereich ”Network<strong>in</strong>g options”:<br />
01 IP Security Protocol (FreeS/WAN IPSEC)<br />
02 --- IPSec options (FreeS/WAN)<br />
03 [*] IPSEC: IP-<strong>in</strong>-IP encapsulation (tunnel mode)<br />
04 [*] IPSEC: Authenticbation Hea<strong>der</strong><br />
05 [*] HMAC-MD5 authentication algorithm<br />
06 [*] HMAC-SHA1 authentication algorithm<br />
07 [*] IPSEC: Encapsulat<strong>in</strong>g Security Payload<br />
08 [*] 3DES encryption algorithm<br />
09 [*] IPSEC: IP Compression<br />
10 [*] IPSEC Debugg<strong>in</strong>g Option<br />
In <strong>der</strong> Zeile ”1” wird IPsec als Kernelmodul für den aktuellen Kernel generiert. Es<br />
wäre auch möglich es fest e<strong>in</strong>zub<strong>in</strong>den für sichere Kernels, die nicht mit ladbaren Modulen<br />
arbeiten sollen. Zeile ”3” aktiviert den Tunnelmodus, so dass mit IPsec nicht nur<br />
Punkt-zu-Punkt-Verb<strong>in</strong>dungen verschlüsselt werden, son<strong>der</strong>n die L<strong>in</strong>uxmasch<strong>in</strong>en an den<br />
Tunnelenden als Verschlüsselungsgateway für ganze Netze arbeiten. In <strong>der</strong> Zeile ”5” wird die<br />
HMAC MD5 Authentifizierung e<strong>in</strong>geschaltet. Dieses ist notwendig, um e<strong>in</strong>e L<strong>in</strong>uxmasch<strong>in</strong>e<br />
via IPsec z.B. an e<strong>in</strong>e SonicWall Pro anzub<strong>in</strong>den.<br />
Das RFC2104 sagt hierzu: “message authentication codes” (MAC): Mechanismen, um<br />
mit “secret keys” die Authentizität von Informationen zu überprüfen, die über e<strong>in</strong> unsicheres<br />
Medium übermittelt wurden. HMAC ist e<strong>in</strong> Mechanismus zur Authentifizierung von<br />
Nachrichten (ganz allgeme<strong>in</strong>), <strong>der</strong> cryptogaphische “hash” Funktionen benutzt (“H”). Dabei<br />
kann z.B. MD5 o<strong>der</strong> SHA-1 <strong>in</strong> Komb<strong>in</strong>ation mit e<strong>in</strong>em “secret shared key” zum <strong>E<strong>in</strong></strong>satz<br />
kommen, welches <strong>in</strong> Zeile “6” aktiviert wird. Zeile sieben fügt das Transportprotokoll ESP<br />
h<strong>in</strong>zu, welches zum Beg<strong>in</strong>n des Abschnitts erklärt wurden.<br />
Die Verschlüsselung nach tripple-DES - ebenfalls wichtig für die Anb<strong>in</strong>dung an e<strong>in</strong>e<br />
SonicWall Pro- wird <strong>in</strong> Zeile “8” zur Verfügung gestellt. Zeile “9” erlaubt das <strong>E<strong>in</strong></strong>schalten<br />
von Kompression im VPN; was vor allem Geschw<strong>in</strong>digkeitsvorteile bei <strong>der</strong> Übertragung<br />
normaler ungepackter Dateien, jedoch auch Overhead bei bereits komprimierten Daten mit<br />
6 <strong>in</strong> /usr/src/l<strong>in</strong>ux/ rufe man make modules <strong>in</strong>stall auf
266 KAPITEL 18. SICHERES IP<br />
sich br<strong>in</strong>gt. Kompression geht aber auf Kosten <strong>der</strong> CPU und muss bei <strong>der</strong> Kalkulation <strong>der</strong><br />
Leistung <strong>der</strong> Verschlüsselungsgateways e<strong>in</strong>gerechnet werden.<br />
“klipsdebug” option: Ohne diesen Schalter gibt es ke<strong>in</strong> Debugg<strong>in</strong>g. Es ist nützlich, wenn<br />
alles funktioniert, aber von Nachteil, wenn e<strong>in</strong>e Verb<strong>in</strong>dung aus unbekannten Gründen nicht<br />
zustande kommt. Die Datei “INSTALL” hält dazu folgenden Ratschlag bereit: Turn<strong>in</strong>g<br />
“IPSEC Debugg<strong>in</strong>g Option” off may look attractive but is unwise. Diese Optionen schaltet<br />
man am besten komplett e<strong>in</strong>, damit sie später ohne Probleme genutzt werden können. Nicht<br />
alle Optionen werden z.B. geme<strong>in</strong>sam mit <strong>der</strong> Sonic-Wall verwendet (ke<strong>in</strong> IP Compression,<br />
ke<strong>in</strong> HMAC-SHA1 authentication), so dass sie auch weggelassen werden können (wenn nur<br />
e<strong>in</strong>e solche Anwendung erfolgt).<br />
Die INSTALL Datei warnt noch davor bei e<strong>in</strong>em Kernel <strong>der</strong> Version 2.2.x die Option<br />
”[*] IP: advanced router” unter ”Network<strong>in</strong>g options” zu verwenden. Dieses kann entwe<strong>der</strong><br />
direkt beim <strong>der</strong> Konfiguration des Kernels geschehen o<strong>der</strong> nachträglich mit:<br />
echo ′′ 0 ′′ >/proc/sys/net/ipv4/conf/all/rp filter<br />
geschehen. Bei <strong>der</strong> verwendeten RedHat Installation wurde e<strong>in</strong>e entsprechende Warnung<br />
auch bei e<strong>in</strong>em 2.4.18er Kernel ausgegeben<br />
ipsec_setup: Start<strong>in</strong>g FreeS/WAN IPsec 1.99...<br />
ipsec_setup: Us<strong>in</strong>g /lib/modules/2.4.18-24.8.0custom/kernel/net/ipsec/ipsec.o<br />
ipsec_setup: WARNING: eth0 has route filter<strong>in</strong>g turned on, KLIPS may not work<br />
ipsec_setup: (/proc/sys/net/ipv4/conf/eth0/rp_filter = ‘1’, should be 0)<br />
18.5.4 Konfiguration von IPsec-Verb<strong>in</strong>dungen<br />
Die zentrale Konfigurationsdatei ist ipsec.conf. Hier werden alle Verb<strong>in</strong>dungsdaten für die<br />
e<strong>in</strong>zelnen Verschlüsselungstunnel festgelegt. Aufbau <strong>der</strong> Konfigurationsdatei - Basiskonfiguration:<br />
# basic configuration<br />
config setup<br />
# THIS SETTING MUST BE CORRECT or almost noth<strong>in</strong>g will work;<br />
# %defaultroute is okay for most simple cases.<br />
#<strong>in</strong>terfaces=%defaultroute<br />
<strong>in</strong>terfaces="ipsec0=eth1"<br />
# Debug-logg<strong>in</strong>g controls: "none" for (almost) none, "all" for lots.<br />
klipsdebug=none<br />
plutodebug=none<br />
# Use auto= parameters <strong>in</strong> conn descriptions to control startup actions.<br />
plutoload=%search<br />
plutostart=%search<br />
# Close down old connection when new one us<strong>in</strong>g same ID shows up.<br />
uniqueids=yes<br />
Basiskonfiguration für alle Verb<strong>in</strong>dungen<br />
# defaults for subsequent connection descriptions<br />
# (mostly to fix <strong>in</strong>ternal defaults which, <strong>in</strong> retrospect, were badly chosen)<br />
conn %default<br />
key<strong>in</strong>gtries=0<br />
disablearrivalcheck=no<br />
authby=rsasig
18.6. KOMMERZIELLE VPN-LÖSUNGEN 267<br />
# leftrsasigkey=%dns<br />
# rightrsasigkey=%dns<br />
<strong>E<strong>in</strong></strong>zelne Verb<strong>in</strong>dungen, hier kann es viele Teile geben.<br />
conn freeswan<br />
auth=esp<br />
authby=secret<br />
pfs=yes<br />
# esp=3des-hamac-md5<br />
esp=hmac-md5-96<br />
# Left security gateway, subnet beh<strong>in</strong>d it, next hop toward right.<br />
left=172.16.0.1<br />
leftid=172.16.0.1<br />
#left=10.10.156.2<br />
leftsubnet=10.10.156.0/22<br />
# leftnexthop=10.10.156.1<br />
18.6 Kommerzielle VPN-Lösungen<br />
18.6.1 Cisco-VPN<br />
An vielen Universitäten und <strong>in</strong> vielen Firmen sche<strong>in</strong>t sich die IPsec-Implementation von<br />
Cisco durchzusetzen. Deshalb soll <strong>der</strong> L<strong>in</strong>ux-Client an dieser Stelle vorgestellt werden.<br />
Bei <strong>der</strong> Cisco-Lösung handelt es sich um e<strong>in</strong>e zentrale Hardwarekomponente <strong>der</strong> Cisco<br />
VPN3000-Serie. Diese agiert als Verschlüsselungs- und Authentifizierungs- Gateway für<br />
L<strong>in</strong>ux-, W<strong>in</strong>dows- o<strong>der</strong> Mac<strong>in</strong>tosh-Clients. Die Clients s<strong>in</strong>d <strong>in</strong> Software implementiert. Derzeitig<br />
ist die Softwareversion 3.7 aktuell, von <strong>der</strong> Benutzung älterer wird wegen e<strong>in</strong>iger<br />
Sicherheitsprobleme abgeraten.<br />
Um den Client unter L<strong>in</strong>ux nutzen zu können, muss dieser für den aktuellen Kernel<br />
kompiliert werden. Das kl<strong>in</strong>gt nach freier Software, die es nicht ist, da e<strong>in</strong>fach nur e<strong>in</strong><br />
Wrapper generiert wird, <strong>der</strong> den mitgelieferten Object-Code für den entsprechenden Kernel<br />
ladbar anpasst. In <strong>der</strong> Datei <strong>in</strong>terceptor.c lassen sich e<strong>in</strong>ige Anpassungen vornehmen, was<br />
das Sperren von Devices nach dem Start des Clients anbetrifft.<br />
Um das Kernelmodul zu übersetzen, müssen die passenden Kernelsources <strong>in</strong>stalliert<br />
se<strong>in</strong>. Anschliessend entpackt man das TAR-Archiv des Clients und wechselt <strong>in</strong> das Verzeichnis.<br />
Mit dem Befehl ./vpn <strong>in</strong>stall wird die Installation und das Bauen des Moduls<br />
gestartet. Im dann ersche<strong>in</strong>enden Dialog wird man aufgefor<strong>der</strong>t das Zielverzeichnis für die<br />
erzeugten ausführbaren Dateien (das betrifft die Programme vpnclient, cisco cert mgr,<br />
cvpnd und ipseclog) anzugeben und die Autostartoption - für das Laden des notwendigen<br />
Kernelmoduls - festzulegen. Weiterh<strong>in</strong> wird das Verzeichnis für die Kernelsources<br />
abgefragt. Überlichweise lassen sich die vorgeschlagenen <strong>E<strong>in</strong></strong>stellungen direkt übernehmen.<br />
Am Ende des Installationsvorganges wird dr<strong>in</strong>gend dazu geraten die Zugriffsrechte für das<br />
/etc/CiscoSystemsVPNClient-Verzeichnis restriktiver zu handhaben. Hier liegen nicht nur<br />
die Konfigurationsdateien, son<strong>der</strong>n eventuelle Zertifikate und auf jeden Fall die Profile.<br />
Mit dem Befehl /etc/<strong>in</strong>it.d/vpnclient <strong>in</strong>it start kann <strong>der</strong> VPN-Client <strong>in</strong>itialisiert<br />
werden. Es wird sodann das Kernelmodul geladen. Die Vershlüsselungsverb<strong>in</strong>dung wird<br />
mittels des <strong>in</strong>teraktiven Kommandozeilen-Tools (vpnclient connect) vpnprofile <strong>in</strong>itiiert.<br />
“vpnprofile” verweist auf e<strong>in</strong>es <strong>der</strong> unterhalb des Cisco-Konfigurationsverezichnisses
268 KAPITEL 18. SICHERES IP<br />
im Unterverzeichnis Profile abgelegten Benutzungsprofile. Trägt man <strong>in</strong> diese die Credentials<br />
zur Authentifizierung (Benutzername und Passwort) e<strong>in</strong>, kann die Verb<strong>in</strong>dung auch<br />
automatisch im H<strong>in</strong>tergrund z.B. nach <strong>der</strong> DSL-<strong>E<strong>in</strong></strong>wahl im Skript ip-up.local aufgebaut<br />
werden.<br />
<strong>E<strong>in</strong></strong>e typische Profile-Datei (Im Beispiel bleibend vpnprofile.pcf), ist abgelegt im Verzeichnis:<br />
/etc/CiscoSystemsVPNClient/Profile<br />
und sieht wie folgt aus:<br />
[ma<strong>in</strong>]<br />
Description=VPN zu e<strong>in</strong>em Cisco IPsec-Gateway<br />
Host=ipsec-gw.mydoma<strong>in</strong>.org<br />
AuthType=1<br />
GroupName=<br />
GroupPwd=<br />
EnableISPConnect=0<br />
ISPConnectType=0<br />
ISPConnect=<br />
ISPCommand=<br />
Username=<br />
UserPassword=<br />
SaveUserPassword=0<br />
EnableBackup=0<br />
BackupServer=<br />
EnableNat=0<br />
CertStore=0<br />
CertName=<br />
CertPath=<br />
CertSubjectName=<br />
CertSerialHash=00000000000000000000000000000000<br />
DHGroup=2<br />
ForceKeepAlives=0<br />
Bei <strong>der</strong> Option Host muss <strong>der</strong> entsprechende Cisco-VPN-Server e<strong>in</strong>getragen werden.<br />
GroupName und GroupPwd erlauben die Unterscheidung von Benutzerkreisen, die auf e<strong>in</strong><br />
Verschlüsselungsgateway zugreifen. Mit <strong>der</strong> Option Username wird <strong>der</strong> eigene Benutzname<br />
e<strong>in</strong>getragen. Zusätzlich kann man die Option UserPassword e<strong>in</strong>fügen. Dort wird dann<br />
das entsprechende Passwort <strong>in</strong> Klartext abgelegt. Nach <strong>der</strong> ersten Verb<strong>in</strong>dung wird dieses<br />
Passwort wie<strong>der</strong> gelöscht und durch e<strong>in</strong> Verschüsseltes ersetzt, das gleiche passiert beim<br />
Gruppenpasswort.<br />
Wenn <strong>der</strong> Cisco VPN-Client auf e<strong>in</strong>em Rechner betrieben werden soll, <strong>der</strong> h<strong>in</strong>ter e<strong>in</strong>er<br />
Firewall liegt, muss dafür gesorgt se<strong>in</strong>, dass alle für die IPsec-Verb<strong>in</strong>dung erfor<strong>der</strong>lichen<br />
Datenpakete durchgelassen werden. Dazu zählen das Transportprotokoll ESP mit <strong>der</strong> Protokollnummer<br />
50 und UDP-Pakete auf Port 500. Wenn das IPsec/UDP verwendet wird,<br />
muss <strong>der</strong> entsprechende UDP-Port (defaultmäßig 10000) freigeschaltet se<strong>in</strong>.<br />
Es gibt e<strong>in</strong>e für alle Profile geme<strong>in</strong>sam verwendete Konfigurationsdatei (vpnclient.<strong>in</strong>i),<br />
welche den Umfang <strong>der</strong> geschriebenen Log-Informationen und die Lage <strong>der</strong> ausführbaren<br />
Programme bestimmt.<br />
Lei<strong>der</strong> ist die Implementation des Cisco-IPsec nicht beson<strong>der</strong>s schön, so dass die IPsec<br />
Interfaces und entsprechende Rout<strong>in</strong>ge<strong>in</strong>träge nicht mit den üblichen L<strong>in</strong>ux-Tools (ifconfig,
18.6. KOMMERZIELLE VPN-LÖSUNGEN 269<br />
netstat) angezeigt werden. Diese Informationen erhält man mittels vpnclient stat o<strong>der</strong> bekommt<br />
sie bei <strong>in</strong>teraktiver Benutzung auf <strong>der</strong> Kommandozeile ausgegeben. Der Statusbefehl<br />
liefert weitere Zusatz<strong>in</strong>formationen wie Angaben zur Verschlüsselung und an<strong>der</strong>e verb<strong>in</strong>dungsspezifische<br />
Daten zu bestehenden IPsec-Verb<strong>in</strong>dungen. Genausowenig läßt sich <strong>der</strong><br />
Datenverkehr s<strong>in</strong>nvoll mit ethereal o<strong>der</strong> tcpdump analysieren: In e<strong>in</strong>e Richtung werden<br />
verschlüsselte, <strong>in</strong> die an<strong>der</strong>e Richtung unverschlüsselte Datenpakete angezeigt. Das hängt<br />
wohl damit zusammen, dass sich das Kernelmodul sehr tief e<strong>in</strong>kl<strong>in</strong>kt, um bei Bedarf den<br />
Datenverkehr über weitere Interfaces zu unterb<strong>in</strong>den.<br />
<strong>E<strong>in</strong></strong> Vor- aber auch Nachteil des Cisco-Clients liegt <strong>in</strong> se<strong>in</strong>er zentralen Steuerung, die es<br />
erlaubt vom Benutzer <strong>in</strong> <strong>der</strong> vpnclient.<strong>in</strong>i getroffene <strong>E<strong>in</strong></strong>stellungen zu überschreiben. Das<br />
Verbot e<strong>in</strong>es LAN-Zugriffes und damit implizit das Aufsetzen e<strong>in</strong>es Masquerad<strong>in</strong>g-Routers<br />
kann zentral vom Verschlüsselungsgateway erzwungen werden, <strong>in</strong> Abhängigkeit davon, wie<br />
<strong>der</strong> zuständige Adm<strong>in</strong>istrator die Policies e<strong>in</strong>stellt. Durch das Sperren weiterer Interfaces<br />
und den Zugriff auf das lokale Netz erreicht man e<strong>in</strong>e höhere Sicherheit, jedoch kann dann<br />
z.B. schon ke<strong>in</strong> lokaler <strong>Netzwerk</strong>drucker mehr verwendet werden, wenn <strong>der</strong> Verschlüsseltungstunnel<br />
aktiv ist. Dieses mag zwar für spezielle Road-Warrior-<strong>E<strong>in</strong></strong>sätze nicht von Bedeutung<br />
se<strong>in</strong>, kann aber <strong>in</strong> an<strong>der</strong>en Szenarien für gewaltigen Overhead sorgen, wenn alle<br />
Daten ausnahmslos über das Gateway geschleust werden. Im Extremfall verdoppelt sich <strong>der</strong><br />
IP-Traffic im eigenen Netz. <strong>E<strong>in</strong></strong> weiteres Problem ergibt sich durch die möglichen Benennungen<br />
von Interfaces: In e<strong>in</strong>igen Distributionen werden Funk-Karten mit “wlan0” bezeichnet,<br />
die dem Client nicht bekannt s<strong>in</strong>d. Damit ist e<strong>in</strong> Aufbau e<strong>in</strong>er Verschlüsselungsverb<strong>in</strong>dung<br />
über diese Interfaces unmöglich. Abhilfe für beide Probleme schafft e<strong>in</strong> Blick <strong>in</strong> den Code.<br />
Ob die vorgeschlagenen Än<strong>der</strong>ungen auch mit <strong>der</strong> Cisco-Lizenz vere<strong>in</strong>bar s<strong>in</strong>d, muss <strong>der</strong><br />
Anwen<strong>der</strong> jeweils für sich klären.<br />
Jedoch kann durch e<strong>in</strong>ige Än<strong>der</strong>ungen an <strong>der</strong> <strong>in</strong>terceptor.c die o.g. Problematik umgangen<br />
werden wie das nachstehende Diff zeigt:<br />
*** ../test/vpnclient/<strong>in</strong>terceptor.c 2002-10-22 05:47:21.000000000 +0200<br />
--- <strong>in</strong>terceptor.c 2003-03-04 13:39:42.000000000 +0100<br />
*************** static <strong>in</strong>t handle_vpnup()<br />
*** 315,320 ****<br />
--- 315,332 ---if<br />
(strcmp(LINUX_VPN_IFNAME, dp->name) == 0) {<br />
cont<strong>in</strong>ue;<br />
}<br />
+<br />
+ if ((strcmp("eth1", dp->name) == 0) ||<br />
+ (strcmp("eth2", dp->name) == 0) ||<br />
+ (strcmp("ppp0", dp->name) == 0) ||<br />
+ (strcmp("ppp1", dp->name) == 0) ||<br />
+ (strcmp("ipsec0", dp->name) == 0) ||<br />
+ (strcmp("ipsec1", dp->name) == 0) ||<br />
+ (strcmp("ipsec2", dp->name) == 0)) {<br />
+ cont<strong>in</strong>ue;<br />
+ }<br />
+<br />
+<br />
if (strcmp("lo", dp->name) == 0) {<br />
/*b<strong>in</strong>d to loopback so we can <strong>in</strong>ject UDP packets<br />
*for IPC, but don’t change the xmit function
270 KAPITEL 18. SICHERES IP<br />
*************** static <strong>in</strong>t recv_ip_packet_handler(struct<br />
*** 509,514 ****<br />
--- 521,540 ---struct<br />
ethhdr ppp_dummy_buf;<br />
+<br />
+ if ((strcmp("eth1", dev->name) == 0) ||<br />
+ (strcmp("eth2", dev->name) == 0) ||<br />
+ (strcmp("ppp0", dev->name) == 0) ||<br />
+ (strcmp("ppp1", dev->name) == 0) ||<br />
+ (strcmp("ipsec0", dev->name) == 0) ||<br />
+ (strcmp("ipsec1", dev->name) == 0) ||<br />
+ (strcmp("ipsec2", dev->name) == 0))<br />
+ {<br />
+ rc2 = orig<strong>in</strong>al_ip_handler.orig_handler_func(skb, dev, type);<br />
+ goto exit_gracefully;<br />
+ }<br />
+<br />
+<br />
if (strcmp("lo", dev->name) == 0) {<br />
/* grab the rout<strong>in</strong>g entry for loopback packets, <strong>in</strong> case we need<br />
* to send some later*/<br />
18.6.2 Verwendung <strong>der</strong> Cisco-Tools<br />
vpnclient ist das Haupttool <strong>der</strong> Cisco-VPN-Lösung. Ohne Parameter aufgerufen, werden<br />
dem Benutzer gleich mal alle Kommandozeilenparameter mitgeteilt (ja, auch das L<strong>in</strong>ux<br />
übliche “–help” funktioniert; schön, dass Cisco diesen Standard e<strong>in</strong>hält).<br />
Der Client hat drei ”Haupt” Optionen:<br />
connect Hierbei ist es zw<strong>in</strong>gend erfor<strong>der</strong>lich als nächste Option e<strong>in</strong> Profil anzugeben,<br />
das sich als Datei unter /etc/CiscoSystemsVPNClient/Profiles bef<strong>in</strong>det (<strong>in</strong> unserem<br />
Beispiel “goemobile”). Wer beim Start nicht nach se<strong>in</strong>em Benutzernamen und Passwort<br />
gefragt werden möchte, sollte nach dem Profil noch se<strong>in</strong>en Usernamen übergeben. Man<br />
kann auch noch das Passwort übergeben, was aber nicht zu empfehlen ist, da es auf e<strong>in</strong>er<br />
Masch<strong>in</strong>e mit mehreren Benutzern sehr leich ausspioniert werden kann:<br />
l<strong>in</strong>ux:/etc/CiscoSystemsVPNClient/Profiles # ps aux|grep vpnclient<br />
root 2004 0.0 1.0 1756 680 pts/1 S 18:49 0:00<br />
/usr/local/b<strong>in</strong>/vpnclient connect goemobile user test@realm pwd<br />
<br />
Normalerweise kann man Bentuzernamen und Passwort <strong>in</strong> <strong>der</strong> Profildatei speichen, was<br />
aber serverseitig (!) unterbunden werden kann. Wie s<strong>in</strong>nvoll das ist, bleibt dah<strong>in</strong>gestellt -<br />
wenn man die oben genannte Sicherheitslücke <strong>in</strong> Betracht zieht. Der Aufruf von vpnclient<br />
connect user führt letztendlich zu:<br />
Cisco Systems VPN Client Version 3.7 (Rel)<br />
Copyright (C) 1998-2002 Cisco Systems, Inc. All Rights Reserved.
18.6. KOMMERZIELLE VPN-LÖSUNGEN 271<br />
Client Type(s): L<strong>in</strong>ux<br />
Runn<strong>in</strong>g on: L<strong>in</strong>ux 2.4.19 #8 Sat Nov 9 12:20:38 PST 2002 i586<br />
Initializ<strong>in</strong>g the IPSec l<strong>in</strong>k.<br />
Contact<strong>in</strong>g the gateway at 10.100.0.1<br />
Authenticat<strong>in</strong>g user.<br />
Your l<strong>in</strong>k is secure.<br />
IPSec tunnel <strong>in</strong>formation.<br />
Client address: 134.76.n.n<br />
Server address: 10.100.n.n<br />
Encryption: 168-bit 3-DES<br />
Authentication: HMAC-MD5<br />
IP Compression: None<br />
NAT passthrough is <strong>in</strong>active<br />
Local LAN Access is disabled<br />
Wie hier deutlich zu sehen ist, ist die zugewiesene Adresse e<strong>in</strong>e öffentliche Adresse,<br />
während die Gateway Adresse, wie die Adresse <strong>der</strong> Funklankarte e<strong>in</strong>e private ist. Der Cisco<br />
führt <strong>in</strong> diesem Beispiel also DirectNAT durch. In diesem Fall sieht man, dass ”local LAN”<br />
ausgeschaltet wurde. Das allerd<strong>in</strong>gs nicht anhand <strong>der</strong> Profildatei son<strong>der</strong>n von Seiten des<br />
Adm<strong>in</strong>istrators auf dem Cisco3000. Aber was solls, <strong>in</strong>terceptor.c macht e<strong>in</strong>iges möglich !<br />
Wenn man sich nun <strong>in</strong> e<strong>in</strong>em Netz h<strong>in</strong>ter e<strong>in</strong>er Firewall bef<strong>in</strong>det und das VPN-Gateway<br />
den Rechner selber direkt nicht erreicht kann, kommt “NAT passthrough” <strong>in</strong>s Spiel. Das<br />
Ergebnis sieht dann folgen<strong>der</strong>maßen aus:<br />
IPSec tunnel <strong>in</strong>formation.<br />
Client address: 134.76.n.n<br />
Server address: 134.76.n.n<br />
Encryption: 168-bit 3-DES<br />
Authentication: HMAC-MD5<br />
IP Compression: None<br />
NAT passthrough is active on port UDP 10000<br />
Local LAN Access is enabled<br />
disconnect Diese Option ist schnell erklärt: vpnclient disconnect beendet e<strong>in</strong>e bestehende<br />
Verb<strong>in</strong>dung.<br />
stat Was man im Hause Cisco “Statistik” zu nennen sche<strong>in</strong>t, hat den Namen eigentlich<br />
nicht verdient:<br />
IPSec tunnel <strong>in</strong>formation.<br />
Connection Entry: goemobile<br />
Client address: 134.76.n.n<br />
Server address: 10.100.n.n<br />
Encryption: 168-bit 3-DES<br />
Authentication: HMAC-MD5<br />
IP Compression: None<br />
NAT passthrough is <strong>in</strong>active<br />
Local LAN Access is enabled
272 KAPITEL 18. SICHERES IP<br />
VPN traffic summary.<br />
Time connected: 0 day(s), 00:09.31<br />
Bytes <strong>in</strong>: 84443<br />
Bytes out: 115760<br />
Packets encrypted: 816<br />
Packets decrypted: 671<br />
Packets bypassed: 19<br />
Packets discarded: 7<br />
Configured routes.<br />
Secured Network Dest<strong>in</strong>ation Netmask Bytes<br />
* 10.100.n.n 255.255.255.255 0<br />
* 0.0.0.0 0.0.0.0 157753<br />
Local Network Dest<strong>in</strong>ation Netmask<br />
10.100.n.n 255.255.0.0<br />
Neben dem vpnclient Werkzeug existiert e<strong>in</strong> nettes kle<strong>in</strong>es Programm zum Schreiben<br />
von Logfiles. Dessen Verwendung ist zwar etwas ungewöhnlich, aber das Pr<strong>in</strong>zip funktioniert.<br />
Bevor man sich entscheidet, e<strong>in</strong>en Logfile schreiben zu lassen (eigentlich unklar, warum<br />
nicht gleich an den syslogd übergeben wird), kann man entscheiden, was und wieviel man<br />
mitschreiben lassen möchte. Die <strong>E<strong>in</strong></strong>stellungen hierzu muss man <strong>in</strong> <strong>der</strong> Datei:<br />
/etc/CiscoSystemsVPNClient/vpnclient.<strong>in</strong>i<br />
vornehmen. Die Variable “EnableLog” muss zum erfolgreichen Logg<strong>in</strong> auf 1 gesetzt se<strong>in</strong>.<br />
Die e<strong>in</strong>zelnen Optionen s<strong>in</strong>d relativ gut selbsterklärend. Dabei ist e<strong>in</strong> hoher “level” mit<br />
ausführlichen Mitteilungen des Klienten gleichzusetzen.<br />
Das Schreiben des Logfiles startet man letztendlich mit: ipseclog logname& - ne<strong>in</strong>,<br />
das Programm geht nicht automatisch <strong>in</strong> den H<strong>in</strong>tergrund. Auch hier hat sich Cisco e<strong>in</strong><br />
eigenartiges Format ausgedacht, was nur etwas gewöhnungsbedürftig ist, aber den Zweck<br />
erfüllt. Wenn man den Cisco Klienten zusammen mit Zertifikaten e<strong>in</strong>setzt, kommt man<br />
an <strong>der</strong> Benutzung des “Zertifikate Managers” (cisco cert mgr) nicht vorbei. Dieses kann<br />
nützlich se<strong>in</strong>, wenn man mit FreeSWAN auf den Cisco-Server zugreifen möchte. Erklärungen<br />
zu Details f<strong>in</strong>det man bei Cisco.<br />
18.6.3 <strong>E<strong>in</strong></strong>satzszenarien<br />
Der Cisco-VPN-Router wird zur Zeit beson<strong>der</strong>s <strong>in</strong> Funk-LANs e<strong>in</strong>gesetzt. Diese müssen<br />
um e<strong>in</strong>iges besser gegen Mitlesen des Datenverkehrs abgesichert werden, als drahtgebundene<br />
Installationen. Die Ausbreitung <strong>der</strong> Funkwellen läßt sich bei weitem nicht so gut<br />
überblicken, wie die von TP-Kabeln. Die Funk-LAN-eigenen Sicherungssysteme s<strong>in</strong>d nicht<br />
beson<strong>der</strong>s ernstzunehmen, weshalb e<strong>in</strong> an<strong>der</strong>er Ansatz gewählt wird: Man baut e<strong>in</strong> offenes<br />
privates Netz auf, über das die Teilnehmer nach dynamischer IP-Zuweisung per DHCP<br />
e<strong>in</strong>en Verschlüsselungstunnel über den Cisco-Router aufbauen und erst so <strong>in</strong> das ”rich-<br />
tige” Netz kommen. Die Masch<strong>in</strong>e bildet den e<strong>in</strong>zigen<br />
Übergang und übernimmt neben<br />
den Authentifizierungs- auch Rout<strong>in</strong>gaufgaben. Kommunizieren die e<strong>in</strong>zelnen Clients kaum<br />
selbst untere<strong>in</strong>an<strong>der</strong>, so ist dieses Setup sehr ökonomisch: Es existiert e<strong>in</strong>e e<strong>in</strong>heitliche Software<br />
für unterschiedliche Clients, die recht bequem zu benutzen ist. Die Lizenzgebühren
18.7. LITERATUR 273<br />
werden über die Anschaffung <strong>der</strong> Hardware 7 fällig, die Clients können <strong>in</strong> beliebiger Zahl<br />
benutzt werden.<br />
<strong>E<strong>in</strong></strong> ähnliches Szenario ergibt sich durch die Anb<strong>in</strong>dung von Aussendienstmitarbeitern<br />
über das unsichere Internet: Sie können auf diese Weise direkt <strong>in</strong> das jeweilige <strong>Netzwerk</strong><br />
ihrer Abteilung o<strong>der</strong> Firma transparent e<strong>in</strong>gebunden werden.<br />
Wenn man mit Zertifikaten statt <strong>der</strong> userbasierten Authentifizierung arbeitet, kann<br />
<strong>der</strong> Cisco-VPN-Server auch mit FreeSWAN zusammenarbeiten. Inwieweit sich <strong>der</strong> höhere<br />
<strong>E<strong>in</strong></strong>richtungsaufwand lohnt, muss je<strong>der</strong> für sich selbst festlegen. Stellt man ke<strong>in</strong>e beson<strong>der</strong>en<br />
Anfor<strong>der</strong>ungen, dann ist <strong>der</strong> <strong>E<strong>in</strong></strong>satz <strong>der</strong> Orig<strong>in</strong>alsoftware die e<strong>in</strong>fachere Wahl (beson<strong>der</strong>s<br />
da, wo ke<strong>in</strong>e Extrakosten für den Client anfallen).<br />
18.6.4 Fazit<br />
Der Cisco-VPN-Client basiert zwar wie z.B. FreeSWAN auf <strong>der</strong> identischen Technologie,<br />
jedoch s<strong>in</strong>d die Unterschiede so gross, dass beide nicht <strong>in</strong>teroperabel s<strong>in</strong>d. Beide Verfahren<br />
scheiden sich bereits im Authentifizierungsansatz: FreeSWAN arbeitet mit hostbasierten<br />
Schlüsseln unabhängig von den auf dem jeweiligen Rechner arbeitenden Usern. Der Cisco-<br />
Client arbeitet mit userbasierten Credentials, die unabhängig von <strong>der</strong> darunterliegenden<br />
Hardware funktionieren. Im klassischen Road-Warrior-<strong>E<strong>in</strong></strong>satz spielt dieser Unterschied ke<strong>in</strong>e<br />
wesentlich Rolle, da Masch<strong>in</strong>e und Benutzer identisch s<strong>in</strong>d. Vom <strong>E<strong>in</strong></strong>satzszenario eignet<br />
sich <strong>der</strong> vorgestellte Cisco-Client nur für den Road-Warrior o<strong>der</strong> den Rechner im lokalen<br />
Netz, die kaum Daten mite<strong>in</strong>an<strong>der</strong> austauschen, da <strong>der</strong> gesamte Verkehr jeweils über das<br />
Cisco-IPsec-Gateway abgewickelt wird.<br />
Von <strong>der</strong> Konzeption her bietet sich deshalb das hier vorgestellte Modell nicht dafür<br />
an, Verschlüsselungstunnel für ganze Netze e<strong>in</strong>zelner Betriebsteile zu bauen. Hierfür gibt es<br />
entwe<strong>der</strong> spezielle Hardware, die diese Aufgabe besser erfüllen kann o<strong>der</strong> die GPL-basierten<br />
Verschlüsselungstunnel CIPE o<strong>der</strong> FreeSWAN.<br />
Am Ende bleibt die Frage nach <strong>der</strong> Sicherheit <strong>der</strong> Cisco-VPN-Lösung. Der entscheidende<br />
Code liegt im B<strong>in</strong>ärformat vor und kann nicht von je<strong>der</strong>mann e<strong>in</strong>gesehen werden.<br />
<strong>E<strong>in</strong></strong> weiteres Problem zeigt sich mit <strong>der</strong> “ Öffnung” des Interceptors: Damit lassen sich die<br />
Vorgaben des VPN-Adm<strong>in</strong>istrators aushebeln, womit zum<strong>in</strong>dest diese Sicherheitsdimension<br />
nicht mehr wirklich gesteuert werden kann. Weiterh<strong>in</strong> verhält sich <strong>der</strong> Client mit se<strong>in</strong>en Interfaces<br />
aus Adm<strong>in</strong>istratorensicht ärgerlich, weil die Standardtools nicht <strong>in</strong> <strong>der</strong> gewohnten<br />
Weise e<strong>in</strong>gesetzt werden können.<br />
18.7 Literatur<br />
Cisco:<br />
http://www.cisco.com/univercd/cc/td/doc/product/vpn/client/rel3 7/cli3 7/certs.htm<br />
7 <strong>der</strong>en Kosten liegen bei ca. 16.000 Euro
274 KAPITEL 18. SICHERES IP
Kapitel 19<br />
Firewall<br />
19.1 Aufbau<br />
Der Begriff ”firewall” bezeichnet e<strong>in</strong>en (speziell konfigurierten) Computer, <strong>der</strong> mittels entsprechen<strong>der</strong><br />
Software (auch diese wird häufig als firewall bezeichnet) den Strom <strong>der</strong> Verb<strong>in</strong>dungspakete<br />
(durch mehrere Interfaces) regelt. Dieses Konzept ist recht alt (ca. 1985),<br />
daher ist auch L<strong>in</strong>ux seit langer Zeit als firewall nutzbar.<br />
Mit <strong>der</strong> neuen Kernelgeneration wurde e<strong>in</strong>e neue TCP/IP Stack Implementation e<strong>in</strong>geführt<br />
und e<strong>in</strong>ige <strong>der</strong> bekannten Programme wie ipcha<strong>in</strong>s und ipfwadm durch Kernelmodule<br />
und Tools aus dem netfilter Paket ersetzt. Vorhandene Skripte lassen sich aber relativ<br />
leicht anpassen.<br />
_____<br />
/ \<br />
Incom<strong>in</strong>g -->[Rout<strong>in</strong>g ]--->|FORWARD|-------> Outgo<strong>in</strong>g<br />
[Decision] \_____/ ^<br />
| |<br />
v ____<br />
___ / \<br />
/ \ |OUTPUT|<br />
|INPUT| \____/<br />
\___/ ^<br />
| |<br />
----> Local Process ----<br />
Pakete die über e<strong>in</strong> Netz<strong>in</strong>terface e<strong>in</strong>treffen, s<strong>in</strong>d entwe<strong>der</strong> an die firewall selbst gerichtet<br />
(INPUT) o<strong>der</strong> sollen an e<strong>in</strong>en an<strong>der</strong>en Rechner weitergeleitet werden (FORWARD); lokal<br />
erzeugte Pakete durchlaufen OUTPUT, bevor sie gesendet werden.<br />
Jedes <strong>der</strong> angedeuteten Ovale stellt e<strong>in</strong>e ”cha<strong>in</strong>” dar, die jeweils e<strong>in</strong>e Menge von Regeln<br />
enthält. Wenn e<strong>in</strong> Pakethea<strong>der</strong> auf e<strong>in</strong>e <strong>der</strong> Regeln zutrifft, gibt diese an, wie weiter mit<br />
dem Paket zu verfahren ist. Passt ke<strong>in</strong>e <strong>der</strong> Regeln e<strong>in</strong>er cha<strong>in</strong>, wird die ”policy” <strong>der</strong> cha<strong>in</strong><br />
verwendet. <strong>E<strong>in</strong></strong>e e<strong>in</strong>fache Regel könnte so aussehen:<br />
target prot opt source dest<strong>in</strong>ation<br />
ACCEPT all -- anywhere anywhere<br />
Diese recht nutzlose Regel akzeptiert alle Pakete, unabhängig von Protokoll sowie Ursprung<br />
und Ziel. Das target könnte auch REJECT, DROP o<strong>der</strong> FORWARD se<strong>in</strong>, o<strong>der</strong><br />
275
276 KAPITEL 19. FIREWALL<br />
allgeme<strong>in</strong> <strong>der</strong> Name e<strong>in</strong>er cha<strong>in</strong> (die vordef<strong>in</strong>ierten targets s<strong>in</strong>d <strong>in</strong> Grossbuchstaben). Alle<br />
an<strong>der</strong>en Datenfel<strong>der</strong> zeigen hier ”menschenlesbare” Schlüsselworte (sofern dieses Verhalten<br />
nicht durch Zusatzparameter unterdrückt wird), so fasst z.B. ”all” die Menge aller Protokolle<br />
zusammen; alternativ kann man e<strong>in</strong>en e<strong>in</strong>zelnen Namen (z.B. tcp, siehe /etc/protocols)<br />
bzw. den entsprechenden numerischen Wert angeben. Letztlich kann man durch e<strong>in</strong> vorangestelltes<br />
”!” die Komplementmenge wählen (z.B. !icmp), diese Möglichkeit besteht auch<br />
bei vielen an<strong>der</strong>en Schaltern. Ebenso ist ”anywhere” nur e<strong>in</strong> an<strong>der</strong>er Ausdruck für die<br />
Netzmaske 0.0.0.0/0.<br />
19.2 <strong>E<strong>in</strong></strong>- und Austragen von cha<strong>in</strong>s und Filter-Regeln<br />
iptables wird meistens mit recht vielen Argumenten aufgerufen, zum Beispiel können Regeln<br />
<strong>in</strong> den verschiedenen cha<strong>in</strong>s e<strong>in</strong>getragen, gelöscht und verän<strong>der</strong>t werden. Die vordef<strong>in</strong>ierten<br />
”cha<strong>in</strong>s” (<strong>in</strong> Großbuchstaben) können jedoch nicht gelöscht werden.<br />
1. Alle Regeln <strong>in</strong> e<strong>in</strong>er cha<strong>in</strong> listen (-L).<br />
2. Alle Regeln <strong>in</strong> e<strong>in</strong>er cha<strong>in</strong> löschen (-F).<br />
3. Alle Pakete und Paketzähler <strong>in</strong> <strong>der</strong> cha<strong>in</strong> zurücksetzen (-Z).<br />
4. <strong>E<strong>in</strong></strong>e neue cha<strong>in</strong> erzeugen (-N).<br />
5. Die Policy für e<strong>in</strong>e e<strong>in</strong>gebaute cha<strong>in</strong> än<strong>der</strong>n (-P).<br />
6. <strong>E<strong>in</strong></strong>e leere cha<strong>in</strong> löschen (-X).<br />
Es existieren mehrere Möglichkeiten, e<strong>in</strong>e Regel <strong>in</strong> e<strong>in</strong>er cha<strong>in</strong> zu verän<strong>der</strong>n:<br />
1. <strong>E<strong>in</strong></strong>e Regel <strong>in</strong> e<strong>in</strong>er cha<strong>in</strong> e<strong>in</strong>fügen (<strong>in</strong>sert, d.h. oben <strong>in</strong> die Liste e<strong>in</strong>hängen) (-I).<br />
2. <strong>E<strong>in</strong></strong>e Regel an e<strong>in</strong>e cha<strong>in</strong> anfügen (append, d.h. unten <strong>in</strong> die Liste e<strong>in</strong>fügen) (-A).<br />
3. <strong>E<strong>in</strong></strong>e Regel <strong>in</strong> e<strong>in</strong>er cha<strong>in</strong> ersetzen (replace) (-R).<br />
4. <strong>E<strong>in</strong></strong>e (bzw. die erste passende) Regel <strong>in</strong> e<strong>in</strong>er cha<strong>in</strong> löschen (delete) (-D).<br />
19.2.1 Pakete genauer spezifizieren<br />
Die meisten Regeln bestehen aus e<strong>in</strong>er (beliebigen) Komb<strong>in</strong>ation <strong>der</strong> folgenden Parameter:
19.2. EIN- UND AUSTRAGEN VON CHAINS UND FILTER-REGELN 277<br />
”-p, –protocol [!] protocol”:<br />
”protocol” ist e<strong>in</strong> Name aus /etc/protocols, <strong>der</strong> entsprechende numerische<br />
Wert o<strong>der</strong> ’all’<br />
”-s, –source [!] address[/netmask]” und ”-d, –dest<strong>in</strong>ation [!] address[/netmask]”:<br />
die Adresse kann theoretisch e<strong>in</strong> hostname se<strong>in</strong>, um ständige DNS<br />
requests zu vermeiden sollte man jedoch die IP verwenden. Optional<br />
kann e<strong>in</strong>e Netzmaske angegeben werden.<br />
”-j, –jump target”:<br />
das Ziel (”target”) <strong>der</strong> Regel gibt an, wie mit matchenden Paketen<br />
verfahren wird, ”target” ist entwe<strong>der</strong> e<strong>in</strong>es <strong>der</strong> vordef<strong>in</strong>ierten<br />
targets (ACCEPT, DROP, ...) o<strong>der</strong> <strong>der</strong> Name e<strong>in</strong>er an<strong>der</strong>en cha<strong>in</strong>.<br />
”-i, –<strong>in</strong>-<strong>in</strong>terface [!] name” sowie ”-o, –out-<strong>in</strong>terface [!] name”:<br />
diese Schalter ermöglichen es Pakete durch den Namen des Interfaces<br />
zu spezifizieren; e<strong>in</strong>ige Komb<strong>in</strong>ationen s<strong>in</strong>d allerd<strong>in</strong>gs nicht<br />
möglich, zum Beispiel e<strong>in</strong>e ”-i” Angabe <strong>in</strong> <strong>der</strong> OUTPUT cha<strong>in</strong>.<br />
Man kann durch Anhängen e<strong>in</strong>es ”+” mehrere <strong>in</strong>terfaces <strong>in</strong> e<strong>in</strong>er<br />
Regeln bezeichnen (z.B. ppp0, ppp1).<br />
”[!] -f, –fragment”:<br />
bezieht die Regel auf das zweite und alle folgenden Fragmente<br />
e<strong>in</strong>es fragmentierten Paketes, o<strong>der</strong> (negiert) auf unfragmentierte<br />
Pakete und erste Fragmente. Fragmentierung von Paketen tritt<br />
zum Beispiel <strong>in</strong> Ethernet <strong>Netzwerk</strong>en durch die Begrenzung <strong>der</strong><br />
Framegrösse auf 1500 Byte (MTU) auf, e<strong>in</strong> grösseres Paket wird<br />
automatisch zerteilt, gesendet und wie<strong>der</strong> zusammengesetzt.<br />
Theoretisch kann man auf das Filtern von folgenden Fragmenten<br />
verzichten, da sofern das Erste fehlt, das Zusammensetzen des gesamten<br />
Paketes fehlschlagen sollte. Dies setzt aber die Korrektheit<br />
<strong>der</strong> TCP Stack Implementation voraus, dementsprechend gibt es<br />
viele Angriffe, die spezielle Schwächen verschiedener Betriebssysteme<br />
ausnutzen.<br />
19.2.2 ”Match Extensions” und Erweiterbarkeit<br />
iptables unterstützt viele weitere Filterspezifikationen durch externe Module (”match extensions”),<br />
die implizit durch die Verwendung des ”-p” flags geladen werden (jeweils auf<br />
das Protokoll bezogen), o<strong>der</strong> explizit durch ”-m modulname” bezeichnet werden müssen.<br />
So wird durch die Angabe ” -p tcp” e<strong>in</strong>e Reihe von TCP bezogenen Filterangaben<br />
verfügbar:
278 KAPITEL 19. FIREWALL<br />
”–tcp-flags [!] mask comp”:<br />
matcht Pakete mit e<strong>in</strong>er bestimmten Komb<strong>in</strong>ation gesetzter flags.<br />
Die Maske gibt an, welche <strong>der</strong> flags betrachtet werden, <strong>der</strong> zweite<br />
Str<strong>in</strong>g gibt die eigentliche Komb<strong>in</strong>ation an. flags s<strong>in</strong>d durch Komma<br />
zu trennen, <strong>der</strong> erste Parameter darf auch als ”NONE” o<strong>der</strong><br />
”ALL” angegeben werden.<br />
”[!] –syn”:<br />
ist e<strong>in</strong>e Kurzform für ”–tcp-flags SYN,RST,ACK SYN” und bezeichnet<br />
das jeweils erste Paket e<strong>in</strong>er TCP Verb<strong>in</strong>dung.<br />
”–source-port [!] port[:range]” und ”–dest<strong>in</strong>ation-port [!]<br />
port[:range]”:<br />
bezeichnen Pakete durch <strong>E<strong>in</strong></strong>schränkung auf e<strong>in</strong>en Port (o<strong>der</strong> e<strong>in</strong><br />
Intervall) an den beiden Enden <strong>der</strong> Verb<strong>in</strong>dung. Die Parameter<br />
”–sport” und ”–dport” s<strong>in</strong>d Aliasnamen.<br />
Die UDP Filter bieten analog die Angabe von Portadressen an, ICMP kennt ke<strong>in</strong>e<br />
Ports und kann daher lediglich mit ”–icmp-type [!] type” spezifiziert werden, wobei type<br />
e<strong>in</strong> numerischer Wert ist.<br />
<strong>E<strong>in</strong></strong>e weitere wichtige Erweiterung ist das ”limit” Modul, mit dem die Rate <strong>der</strong> gematchten<br />
Pakete pro Zeite<strong>in</strong>heit beschränkt werden kann. Damit kann verh<strong>in</strong><strong>der</strong>t werden, das e<strong>in</strong>e<br />
(entsprechend konfigurierte) firewall sich durch das Loggen von zu vielen Paketen selbst<br />
beh<strong>in</strong><strong>der</strong>t. Darüber h<strong>in</strong>aus existieren viele ”Denial of Service” Angriffe (” Überschwemmen<br />
e<strong>in</strong>er Leitung mit vielen Paketen”) die zwar nicht vollkommen ausgeschaltet werden können<br />
(die Bandbreite zur Übertragung ist verloren), <strong>der</strong>en Auswirkungen (stabiler Betrieb <strong>der</strong><br />
Computer, Netzüberlastung durch Antwortpakete) aber erheblich reduziert werden.<br />
Das Modul kann zusätzlich mit den Parametern ”–limit number” und ”–limit-burst<br />
number” aufgerufen werden. Der erste Wert gibt die Rate an (<strong>der</strong> Zahl kann e<strong>in</strong>e Zeite<strong>in</strong>heit<br />
folgen), <strong>der</strong> zweite e<strong>in</strong>en Schwellenwert, <strong>der</strong> überschritten werden muss, bevor die –limit<br />
Rate e<strong>in</strong>setzt.<br />
Im e<strong>in</strong>fachsten fall reicht das Laden des Moduls aus:<br />
iptables -A INPUT -m limit -j LOG<br />
Die Standardwerte s<strong>in</strong>d 3 Pakete pro Stunde mit e<strong>in</strong>em Burstwert von 5, d.h. von e<strong>in</strong>em<br />
ununterbrochenem Strom von ankommenden Paketen würden die ersten 5 gelogt, danach ist<br />
die Regel 20 M<strong>in</strong>uten <strong>in</strong>aktiv, bevor auch nur e<strong>in</strong> Paket verzeichnet wird. Wenn <strong>in</strong>nerhalb<br />
von 20 M<strong>in</strong>uten ke<strong>in</strong> neues Paket e<strong>in</strong>trifft, wird e<strong>in</strong>e ”burst-<strong>E<strong>in</strong></strong>heit” zurückgewonnen; nach<br />
100 M<strong>in</strong>uten ohne Aktivität wäre die firewall wie<strong>der</strong> im Anfangszustand.<br />
Syn-Flood<br />
<strong>E<strong>in</strong></strong> bekannter DoS Angriff ist das Senden e<strong>in</strong>er grossen Zahl von Paketen, die den<br />
Zielrechner zum Aufbau e<strong>in</strong>er Verb<strong>in</strong>dung auffor<strong>der</strong>n; <strong>der</strong> angegriffene Rechner verbraucht<br />
dabei mehr Resourcen als <strong>der</strong> Angreifer benötigt um die Pakete zu senden.<br />
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT<br />
”P<strong>in</strong>g of Death”
19.3. VON ”MASQUERADING” UND ”PACKET MANGLING” 279<br />
Viele ältere Betriebssysteme reagieren sehr empf<strong>in</strong>dlich auf ICMP Pakete, die grösser<br />
als 65535 byte s<strong>in</strong>d. Da auch von diesem Angriff viele Varianten existieren, blocken manche<br />
Adm<strong>in</strong>istratoren die entsprechenden Pakete komplett, o<strong>der</strong> beschränken zum<strong>in</strong>dest die Rate<br />
<strong>der</strong> e<strong>in</strong>gehenden Pakete.<br />
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s \<br />
-j ACCEPT<br />
Letztlich bleibt noch das ”state” modul, das die Zuordnung von e<strong>in</strong>zelnen Paketen<br />
zu <strong>der</strong> entsprechenden Verb<strong>in</strong>dung ermöglicht. Durch Laden des Moduls wird e<strong>in</strong> weiterer<br />
Schalter ”[!] –state STATE” verfügbar, die Angabe ”STATE” kann dabei entwe<strong>der</strong> ”NEW”,<br />
”ESTABLISHED”, ”RELATED” o<strong>der</strong> ”INVALID” se<strong>in</strong>. (siehe connection-track<strong>in</strong>g)<br />
19.3 von ”masquerad<strong>in</strong>g” und ”packet mangl<strong>in</strong>g”<br />
Neben dem Filtern von (unerwünschten) Paketen sollte e<strong>in</strong>e mo<strong>der</strong>ne firewall auch die<br />
Hea<strong>der</strong> von bestimmten Paketen verän<strong>der</strong>n können, diese Fähigkeit wird im Allgeme<strong>in</strong>en<br />
<strong>in</strong> zwei Bereiche unterteilt. Beide waren bei ipcha<strong>in</strong>s noch durch spezielle cha<strong>in</strong>s implementiert,<br />
s<strong>in</strong>d <strong>in</strong>zwischen jedoch als eigene Subsystem (table) gekapselt und damit vom<br />
Filtermechanismus getrennt.<br />
Der entsprechende iptables Parameter ist ”-t” gefolgt von dem Namen des anzusprechenden<br />
tables: entwe<strong>der</strong> ”nat” o<strong>der</strong> ”mangle”. Wird <strong>der</strong> Parameter nicht angegeben, wird<br />
auf dem ”filter” table operiert.<br />
19.3.1 Network Address Translation<br />
Unter diesem Begriff werden Regeln zusammengefasst, die Quell bzw. Zieladresse von Paketen<br />
verän<strong>der</strong>n. An<strong>der</strong>s als bei den normalen Filterregeln, wird hier immer nur das jeweils<br />
erste Paket e<strong>in</strong>er Verb<strong>in</strong>dung betrachtet. Das Ergebnis dieses Paketes wird für alle folgenden<br />
Pakete verwendet.<br />
1. Source NAT (SNAT):<br />
Die Quelladresse des ersten Paketes e<strong>in</strong>er Verb<strong>in</strong>dung wird verän<strong>der</strong>t, bevor es durch<br />
das Netzgerät gesendet wird. Auf <strong>der</strong> an<strong>der</strong>en Seite <strong>der</strong> Verb<strong>in</strong>dung ersche<strong>in</strong>t die<br />
firewall als <strong>der</strong> Ursprung <strong>der</strong> Verb<strong>in</strong>dung.<br />
2. Dest<strong>in</strong>ation NAT (DNAT):<br />
Die Zieladresse des ersten Paketes wird unmittelbar nachdem es empfangen wurde<br />
ver”an<strong>der</strong>t, jedoch bevor die ”Rout<strong>in</strong>g Decision” den weiteren Verlauf bestimmt. Hier<br />
ersche<strong>in</strong>t die firewall als das Ziel <strong>der</strong> Verb<strong>in</strong>dung.<br />
Nun ist es notwendig das ”rout<strong>in</strong>g” Diagramm etwas komplexer darzustellen:
280 KAPITEL 19. FIREWALL<br />
--->[1]--->[ROUTE]--->[3]--->[4]---><br />
| ^<br />
| |<br />
| [ROUTE]<br />
v |<br />
[2] [5]<br />
| ^<br />
| |<br />
v |<br />
Die bereits bekannten targets INPUT (2), OUTPUT (5) und FORWARD (3) werden<br />
durch PRE ROUTING (1) und POST ROUTING (4) ergänzt, allerd<strong>in</strong>gs kann nicht jede<br />
cha<strong>in</strong> <strong>in</strong> jedem table verwendet werden. Im ”nat” table dürfen PRE ROUTING sowie<br />
POST ROUTING und OUTPUT verwendet werden.<br />
SNAT wird verwendet, um Zugriffe aus e<strong>in</strong>em Rechnernetz <strong>in</strong> an<strong>der</strong>es h<strong>in</strong>e<strong>in</strong> so zu<br />
maskieren, dass die firewall als Ausgangspunkt <strong>der</strong> Verb<strong>in</strong>dungen ersche<strong>in</strong>t. <strong>E<strong>in</strong></strong>e firewall<br />
sei durch das Interface eth0 mit dem Internet verbunden und habe die IP 1.2.3.4.<br />
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4<br />
Jedes Paket (aus e<strong>in</strong>em <strong>in</strong>ternen Netz), das durch diese firewall <strong>in</strong>s Internet geroutet<br />
wird, hat als source Adresse die firewall. Eventuelle Antwortpakete werden beim Empfang<br />
automatisch entsprechend manipuliert und an den eigentlichen Quellrechner weitergeleitet.<br />
Da bei Auswahlverb<strong>in</strong>dungen die (externe) Adresse erst beim Verb<strong>in</strong>dungsaufbau bekannt<br />
ist, existiert hierfür e<strong>in</strong>e Spezialfall des SNAT: MASQUERADE. Die Angabe <strong>der</strong> –to<br />
Adresse entfällt hier.<br />
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE<br />
DNAT ermöglicht es, e<strong>in</strong>e auf <strong>der</strong> firewall e<strong>in</strong>gehende Verb<strong>in</strong>dung an e<strong>in</strong>en an<strong>der</strong>en<br />
Rechner weiterzuleiten. Häufig müssen bestimmte Dienste auch vom Internet her verfügbar<br />
se<strong>in</strong>, meistens werden dafür e<strong>in</strong>ige Rechner <strong>in</strong> e<strong>in</strong>em (vom eigentlichen lokalen <strong>Netzwerk</strong>)<br />
getrenntes Netzsegment untergebracht (DMZ, demilitarized zone) das ebenfalls über die<br />
firewall mit dem Internet verbunden ist.<br />
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT \<br />
--to 5.6.7.8:80<br />
Diese Regel würde auf eth0 e<strong>in</strong>gehenden Traffic (an Port 80) an den Webserver auf<br />
Rechner 5.6.7.8 (<strong>in</strong> <strong>der</strong> DMZ) weiterleiten.<br />
19.3.2 packet mangl<strong>in</strong>g<br />
Auch die Regeln dieses tables dienen <strong>der</strong> Verän<strong>der</strong>ung von Pakethea<strong>der</strong>n, <strong>in</strong>sbeson<strong>der</strong>e des<br />
TOS (Type of Service) flags und zum Setzen von eigenen Paketmarkierungen. Seit <strong>der</strong><br />
Kernelversion 2.4.18 s<strong>in</strong>d alle bisher genannten targets <strong>in</strong> diesem table gültig.<br />
iptables wird hier mit den Parameter ”–set-mark” bzw. ”–set-tos” und e<strong>in</strong>em geeigneten<br />
Wert aufgerufen.<br />
Der ”Type Of Service” <strong>E<strong>in</strong></strong>trag e<strong>in</strong>es Paketes hat Auswirkung auf die Rout<strong>in</strong>gentscheidung<br />
des Kernels, <strong>in</strong>sbeson<strong>der</strong>e wie lange das Paket <strong>in</strong> e<strong>in</strong>em Cache (exakter: <strong>in</strong> e<strong>in</strong>er<br />
Queue) warten darf, bzw. wieviel Bandbreite zur Übertragung verwendet werden sollte.
19.4. CONNECTION TRACKING 281<br />
Diese Werte s<strong>in</strong>d jedoch nur als ”Vorschlag” zu verstehen, IPV4 bietet ke<strong>in</strong>e Möglichkeit<br />
<strong>der</strong>artige Zusicherungen wirklich e<strong>in</strong>zuhalten (”Quality of Service” o<strong>der</strong> kurz QoS).<br />
Der Wert ist als 4-Bit Feld def<strong>in</strong>iert, von dem immer nur e<strong>in</strong> Bit gesetzt ist:<br />
1000 -- m<strong>in</strong>imize delay<br />
0100 -- maximize throughput<br />
0010 -- maximize reliability<br />
0001 -- m<strong>in</strong>imize monetary cost<br />
0000 -- normal service<br />
Der ”–set-mark” Parameter wird meistens verwendet, um die Lesbarkeit <strong>der</strong> firewall<br />
Logdateien durch Schlüsselworte zu verbessern.<br />
19.4 connection track<strong>in</strong>g<br />
Unter diesem Begriff versteht man die Fähigkeit e<strong>in</strong>er firewall Status<strong>in</strong>formationen über alle<br />
aktiven <strong>Netzwerk</strong>verb<strong>in</strong>dungen zu verwalten, bzw. Pakete e<strong>in</strong>zelnen Verb<strong>in</strong>dungen zuzuordnen.<br />
Dabei werden die Quell- und Ziel-adressen, die Portnummern, verwendete Protokolle<br />
und jeweils e<strong>in</strong> ”Zustand” (state) <strong>der</strong> Verb<strong>in</strong>dungen im Speicher gehalten. <strong>E<strong>in</strong></strong>e Firewall<br />
mit dieser Eigenschaft wird als ”stateful” bezeichnet.<br />
Zustand allgeme<strong>in</strong>e Bedeutung<br />
bezeichnet Pakete, die e<strong>in</strong>e neue Verb<strong>in</strong>dung aufbauen, bzw. die<br />
NEW zu e<strong>in</strong>er Verb<strong>in</strong>dung gehören, <strong>der</strong> bisher noch ke<strong>in</strong>e Pakete zugeordnet<br />
wurden.<br />
e<strong>in</strong>e Verb<strong>in</strong>dung gilt als ESTABLISHED, wenn <strong>in</strong> beide Richtun-<br />
ESTABLISHED<br />
gen m<strong>in</strong>destens e<strong>in</strong> Paket geflossen ist.<br />
auch diese Pakete bauen e<strong>in</strong>e neue Verb<strong>in</strong>dung auf, s<strong>in</strong>d jedoch im<br />
RELATED Kontext zu e<strong>in</strong>er existierenden Verb<strong>in</strong>dung zu betrachten (FTP<br />
Datenverb<strong>in</strong>dung, ICMP Fehlermeldung).<br />
INVALID bezeichnet Pakete die zu ke<strong>in</strong>er bekannten Verb<strong>in</strong>dung gehören.<br />
Je nach Protokoll <strong>der</strong> Verb<strong>in</strong>dung haben diese Zustände unterschiedliche technische<br />
Bedeutung, o<strong>der</strong> s<strong>in</strong>d nur teilweise anwendbar.<br />
UDP Pakete haben ke<strong>in</strong>e Sequenznummern, allgeme<strong>in</strong> wird UDP ”stateless” genannt.<br />
Wenn bisher nur e<strong>in</strong> Paket <strong>in</strong> e<strong>in</strong>e Richtung geschickt wurde, wird die Verb<strong>in</strong>dung <strong>in</strong>tern als<br />
”UNREPLIED” markiert; wenn <strong>in</strong>nerhalb e<strong>in</strong>er gewissen Zeit (timeout) e<strong>in</strong> Antwortpaket<br />
e<strong>in</strong>trifft wird diese Markierung gelöscht und die Verb<strong>in</strong>dung gilt als ”ESTABLISHED”.<br />
Nach e<strong>in</strong>er vorkonfigurierten Anzahl von Paketen (<strong>in</strong> beide Richtungen) gilt die Verb<strong>in</strong>dung<br />
<strong>in</strong>tern als ”ASSURED” und <strong>der</strong> timeout Wert wird heraufgesetzt.<br />
TCP Verb<strong>in</strong>dungen werden durch e<strong>in</strong>en ”3-way handshake” aufgebaut, dies ist e<strong>in</strong>e<br />
Folge von Anfrage- und Antwort-paketen, bei denen bestimmte Komb<strong>in</strong>ationen an TCP<br />
flags gesetzt s<strong>in</strong>d. Analog zu UDP gilt e<strong>in</strong>e Verb<strong>in</strong>dung als ”ESTABLISHED” (<strong>in</strong>tern AS-<br />
SURED) sobald das abschliessende ACK empfangen wurde.<br />
ICMP Verb<strong>in</strong>dungen bestehen entwe<strong>der</strong> aus e<strong>in</strong>er Anfrage (request, NEW) und <strong>der</strong><br />
Antwort (reply, ESTABLISHED) o<strong>der</strong> aus e<strong>in</strong>em e<strong>in</strong>zelnen Paket (RELATED).<br />
Die Beachtung <strong>der</strong> <strong>in</strong>ternen Zustände kann bei Computern mit relativ wenig Hauptspeicher<br />
notwendig se<strong>in</strong>, da die Anzahl <strong>der</strong> gleichzeitig überwachbaren Verb<strong>in</strong>dungen durch
282 KAPITEL 19. FIREWALL<br />
den verfügbaren Hauptspeicher begrenzt ist. Wenn die Resourcen erschöpft s<strong>in</strong>d und weitere<br />
Verb<strong>in</strong>dungen überwacht werden müssen, werden bevorzugt Verb<strong>in</strong>dungen im Zustand<br />
”UNREPLIED” gelöscht und <strong>der</strong> Verb<strong>in</strong>dungsaufbau damit unterbrochen. Die konfigurierte<br />
Anzahl gleichzeitig verfolgbarer Verb<strong>in</strong>dungen ist <strong>in</strong> /proc/sys/net/ipv4/ip conntrack max<br />
gespeichert.<br />
Darüber h<strong>in</strong>aus werden Verb<strong>in</strong>dungen spezieller Dienste (z.B. FTP) durch zusätzliche<br />
Kernelmodule (ip conntrack ftp) überwacht, um damit bestimmte Pakete als ”RELATED”<br />
zu klassifizieren und den Verb<strong>in</strong>dungsaufbau zuzulassen, ohne das die exakten Filterangaben<br />
dieser Pakete für die Konfiguration <strong>der</strong> firewall bekannt se<strong>in</strong> müssen. So werden<br />
im Fall von FTP (m<strong>in</strong>destens) zwei Verb<strong>in</strong>dungen (e<strong>in</strong>e Steuerleitung und e<strong>in</strong>e Datenleitung)<br />
verwendet. Der client baut zuerst die Steuerleitung zum Port 21 des servers auf.<br />
Danach sendet entwe<strong>der</strong> <strong>der</strong> client (active ftp) o<strong>der</strong> <strong>der</strong> server (passive ftp) e<strong>in</strong>e Portadresse<br />
(¿1024) und se<strong>in</strong> Gegenüber baut die Datenleitung zu <strong>der</strong> angegeben Portadresse auf.<br />
Der ip conntrack code filtert die Portangabe aus <strong>der</strong> Steuerleitung heraus und bezeichnet<br />
e<strong>in</strong> e<strong>in</strong>treffendes Paket mit den angegebenen Werten als ”RELATED” zu <strong>der</strong> existierenden<br />
Steuerverb<strong>in</strong>dung.<br />
19.5 Referenzen<br />
1. die iptables man page<br />
2. das netfilter, packet filter<strong>in</strong>g sowie NAT HOWTO<br />
http://www.netfilter.org/documentation/
Index<br />
Übertragungskapazität, 28<br />
A-Record, 91<br />
Abstract Syntax Notation, 175<br />
Acces Po<strong>in</strong>t Name, 26<br />
AccessPo<strong>in</strong>t, 18<br />
ACE-Umschrift, 86<br />
Acknowledge, 63<br />
Acknowledgenummer, 64<br />
Active Directory, 85<br />
Adress Resolution Protocol, 53<br />
Adressbereich, 43<br />
Adressierungsschema, 38<br />
ADSL, 11<br />
Agent, 174<br />
Alias, 92<br />
Anwendung, 158<br />
Anwendungsschicht, 9<br />
APN, 26<br />
Applikation, 36<br />
ARP, 51, 53<br />
ASN.1, 175<br />
ATM, 24, 27, 52<br />
Auslöschung, 18<br />
Bandbreit, 19<br />
Bandbreite, 18<br />
BDC, 143<br />
Benutzer, 143, 189<br />
Benutzerkonto, 143<br />
Berkeley Internet Name Doma<strong>in</strong> Software,<br />
84<br />
Betriebssystem, 8<br />
B<strong>in</strong>ärzahl, 40<br />
BIND, 84<br />
B<strong>in</strong>d, 89<br />
Bitübertragungsschicht, 11<br />
Bouncer, 199<br />
Broadcast, 42<br />
CA, 106<br />
CA.pl, 106<br />
283<br />
Carrier Sense Multiple Access, 2<br />
Carrierless Amplitude, 29<br />
CDMA, 27<br />
Certificate Authorisation, 106<br />
Chiffrierer, 29<br />
CIFS, 131<br />
CIPE, 200<br />
Circuit Switched Data, 27<br />
Cisco, 211<br />
Clear To Send, 17<br />
Common Internet File System, 131<br />
Common <strong>Unix</strong> Pr<strong>in</strong>ter System, 137<br />
Computern, 10<br />
Computersystem, 38<br />
Content-Type, 101<br />
Crypto IP Encapsulation, 200<br />
CSD, 27<br />
CSMA/CD, 14<br />
CTS, 17<br />
CUPS, 137<br />
Darstellungsschicht, 9<br />
Datagramm, 39, 63<br />
Datei, 2, 85, 158<br />
Dateisystem, 85<br />
Datenrate, 11<br />
Defaultrouter, 43<br />
Delegation, 87, 88<br />
dhclient, 75<br />
DHCP, 64, 67, 95<br />
DHCP-Server, 19<br />
dhcpcd, 75<br />
Dienst, 83, 189<br />
Directory, 158<br />
Directory Service, 158<br />
Discrete Multi-Tone Modulation, 30<br />
Diskless X-Station, 2, 71<br />
Dist<strong>in</strong>guished Name, 79<br />
DNS, 61, 64, 67, 83<br />
DocumentRoot, 105<br />
Domäne, 143<br />
Doma<strong>in</strong>, 61, 85
284 INDEX<br />
Doma<strong>in</strong> Name System, 83, 175<br />
Doma<strong>in</strong>-Name-Service, 61<br />
Doma<strong>in</strong>controller, 129<br />
Doma<strong>in</strong>name, 91<br />
Dotted Quad Notation, 84<br />
Dotted-Quad-Notation, 40<br />
Drucker, 158, 187<br />
Druckerfreigabe, 129<br />
Dynamic Host Configuration Protocol, 48,<br />
64<br />
Dynamic Host Control Protocol, 3<br />
EC, 28<br />
Echo Cancellation, 28<br />
Email, 200<br />
Endsystem, 23<br />
ENUM, 97<br />
EPROM, 127<br />
ESP, 212<br />
Ethernet, 11, 13, 24, 35<br />
Exploit, 200<br />
exports, 124<br />
FDDI, 33<br />
Fehlerrate, 64<br />
Fiber Distributed Data Interface, 33<br />
F<strong>in</strong>ish, 63<br />
Firewall, 199<br />
Flag, 63<br />
Flusskontrolle, 64<br />
FQDN, 61, 85, 89<br />
Fragment, 45<br />
Fragment Offset, 64<br />
Fragmentierung, 39<br />
Frequency Division Multiplex<strong>in</strong>g, 28<br />
Frequenzspektrum, 18<br />
ftp, 199<br />
Full Qualified Doma<strong>in</strong> Name, 61, 85<br />
Gateway, 71<br />
General Packet Radio Service, 26<br />
Generic Flow Control, 32<br />
GFC, 32<br />
Global Standard for Mobile Communication,<br />
26<br />
GMII, 16<br />
GPRS, 26<br />
groups, 157<br />
GSM, 26<br />
Hea<strong>der</strong>, 199<br />
High Speed Circuit Switched Data, 27<br />
Host, 23, 38<br />
host, 83<br />
HOST-RESOURCES-MIB, 182<br />
Hostname, 61, 71<br />
hosts, 157<br />
hosts.allow, 193<br />
hosts.deny, 193<br />
Hostteil, 51<br />
HSCSD, 27<br />
http, 199<br />
HTTP-Kommunikation, 200<br />
httpd, 101<br />
httpd.conf, 101<br />
HTTPS, 105<br />
ICMP, 40, 59<br />
imap, 111<br />
Imap4, 199<br />
<strong>in</strong>etd, 125, 193<br />
Internet, 38<br />
Internet Control Message Protocol, 40<br />
Internet-Protokoll, 38<br />
IP, 38, 59, 64, 192, 199<br />
IP Virtual Host, 104<br />
IP-Adressbereich, 41<br />
IP-Adresse, 37, 71, 83, 91, 158, 175<br />
IP-Adressraum, 46<br />
IP-Paket, 201<br />
IP-Stack, 199<br />
IPsec, 200<br />
IPX, 200<br />
ISDN, 11, 24<br />
Jam-Sequence, 14<br />
Kanalaufteilung, 18<br />
Kanalbündelung, 18<br />
Kernelmodul, 200<br />
Klartext, 199<br />
Koaxialkabel, 15<br />
Kollision, 14, 19<br />
Kommunikation, 46<br />
Konfigurationsdatei, 2<br />
LAN, 7, 36<br />
LDAP, 78, 147, 158<br />
LDAP-Server, 78<br />
ldapadd, 164, 166<br />
ldapdelete, 164
INDEX 285<br />
ldapmodify, 164<br />
ldapsearch, 164<br />
Leitungskodierer, 29<br />
Lightwight Directory Access Protocol, 147<br />
lilo, 191<br />
Lizenzgebühr, 129<br />
Local Area Network, 3, 13<br />
Logical L<strong>in</strong>k Control, 20<br />
Log<strong>in</strong>, 190<br />
log<strong>in</strong>.defs, 190<br />
Loopback, 84<br />
LPD, 129<br />
MAC, 13<br />
MACA, 17<br />
Management Architektur, 173<br />
Management Information Base, 174<br />
Management Station, 174<br />
Manipulation, 64<br />
Maximal Transmission Unit, 45<br />
Maximum Transfer Unit, 22<br />
MIB, 174<br />
Microsoft Po<strong>in</strong>t-to-Po<strong>in</strong>t Tunnel Protocol, 200<br />
Mitlauschen, 64<br />
Modem, 11, 24, 35<br />
Modulator, 29<br />
mount.cifs, 130<br />
MRTG, 183<br />
mtr, 48<br />
MTU, 22, 45<br />
Multi Router Traffic Grapher, 183<br />
Multi-Homed-Hosts, 42<br />
Multiple Access with Collision Avoidance, 17<br />
Name Virtual Host, 104, 105<br />
named, 90, 189<br />
named.conf, 90<br />
Namensraum, 87<br />
Nameserver, 62, 87<br />
Nam<strong>in</strong>g Authority Po<strong>in</strong>ter Records, 98<br />
NAPTR, 98<br />
NAT, 199<br />
NetBIOS, 130, 200<br />
netstat, 227<br />
Network Address Translation, 199, 202<br />
Network File System, 123<br />
Network Information System, 157, 159<br />
Network Number, 40<br />
Netzmaske, 71<br />
Netznummer, 40<br />
<strong>Netzwerk</strong>, 46, 201<br />
<strong>Netzwerk</strong>dateisystem, 129<br />
<strong>Netzwerk</strong>kennung, 46<br />
<strong>Netzwerk</strong>schnittstelle, 47<br />
<strong>Netzwerk</strong>teil, 51<br />
<strong>Netzwerk</strong>verb<strong>in</strong>dung, 227<br />
NFS, 64, 123<br />
NIS, 124, 157, 159<br />
nmbd, 131, 138, 142<br />
nslookup, 61<br />
Nyquist, 28<br />
Object Identifier Namespace, 175<br />
Open Systems Interconnection, 6<br />
openssl, 106<br />
OpenVPN, 200<br />
Paketübertragung, 35<br />
Paketbestätigung, 64<br />
Paketreihenfolge, 64<br />
passwd, 157, 190<br />
Passwort, 189, 190<br />
PATH, 190<br />
PDC, 143<br />
Perl, 3<br />
Personen, 158<br />
Phase Modulation, 29<br />
pla<strong>in</strong> old telephone system, 25<br />
Po<strong>in</strong>t-to-Po<strong>in</strong>t-Protokoll, 26<br />
Pop3, 199<br />
pop3, 111<br />
Port, 63<br />
Portnummer, 63<br />
POTS, 25<br />
PPP, 26<br />
PPTP, 200<br />
Präfix, 40<br />
Prüfsumme, 199<br />
proftpd, 125<br />
proftpd.conf, 125<br />
Protokoll, 5, 36, 127, 204<br />
Prozess, 189<br />
Prozessor, 187<br />
pump, 75<br />
Punkt-Dezimal-Notierung, 40<br />
Push, 63<br />
PXE, 127<br />
QoS, 52<br />
Quadrature Amplitude Modulation, 29
286 INDEX<br />
Quality of Service, 52<br />
Quelladresse, 63<br />
Ready To Send, 17<br />
Rechner, 143<br />
Redirect Message, 40<br />
Redirecter, 199<br />
Registrierung, 86<br />
Remote Procedure Call, 157<br />
Remote-Log<strong>in</strong>, 200<br />
Reset, 63<br />
resolv.conf, 61, 75<br />
Resource Record, 91<br />
Ressource, 158<br />
rhosts, 194<br />
Roam<strong>in</strong>g, 17<br />
Round Trip Time, 3<br />
route, 47<br />
route.conf, 48<br />
Router, 44, 47, 174<br />
Rout<strong>in</strong>g, 37, 46<br />
Rout<strong>in</strong>gtabellen, 49<br />
RPC, 157<br />
RR, 91<br />
RTS, 17<br />
RTT, 3<br />
RWHO, 64<br />
Samba, 129<br />
Schnittstelle, 5<br />
scp, 192<br />
Second-Level-Doma<strong>in</strong>, 86<br />
Secure Shell, 200<br />
Secure Socket Layer, 200<br />
SecureShell, 192<br />
Sendefilter, 29<br />
Sequencenummern, 64<br />
Server, 200<br />
ServerAlias, 105<br />
ServerName, 105<br />
Service, 189<br />
services, 63, 157<br />
shadow, 190<br />
Shannon, 28<br />
Sicherheit, 64<br />
Sicherungsschicht, 200<br />
Signal Noise Ratio, 4<br />
Signalstörung, 18<br />
Signierung, 200<br />
Simple Network Management Protocol, 173<br />
Sitzungsschicht, 9<br />
slapd, 163<br />
Slid<strong>in</strong>g-W<strong>in</strong>dow, 64<br />
SMB, 129<br />
smbclient, 130, 132<br />
smbd, 131, 138<br />
smbmount, 130<br />
smbpasswd, 145<br />
smbstatus, 135<br />
SMI, 175<br />
SMTP, 111<br />
SNMP, 64, 173, 183<br />
SNR, 4<br />
SOA, 87<br />
Socket, 63, 227<br />
SOCKS, 202<br />
Sourcecode, 67<br />
SSH, 200<br />
ssh, 192<br />
ssh-agent, 193<br />
SSL, 200<br />
Start Of Authority, 87<br />
State-Mach<strong>in</strong>e, 64<br />
Structure of Management Information, 175<br />
Subdoma<strong>in</strong>, 88<br />
subnett<strong>in</strong>g, 50<br />
Subnetz, 72<br />
Suffix, 40<br />
Swap, 187<br />
Switch, 14<br />
Synchronize, 63<br />
Systembefehl, 2<br />
TCP, 62, 192, 199, 204, 227<br />
TCP/IP, 6<br />
Telefonnetze, 35<br />
Telnet, 199<br />
telnet, 193<br />
Term<strong>in</strong>alemulation, 9<br />
TFTP, 127<br />
Th<strong>in</strong>-Client, 71<br />
Three-Way-Handshake, 64<br />
Time-To-Live, 89<br />
TokenR<strong>in</strong>g, 11, 19<br />
Tokenr<strong>in</strong>g, 24<br />
Toplevel-Doma<strong>in</strong>, 85<br />
traceroute, 47<br />
Transmission Control Protocol, 62, 63<br />
Transportprotokoll, 201<br />
Transportschicht, 9
INDEX 287<br />
Trojaner, 200<br />
TTL, 89<br />
Twisted Pair Kabel, 16<br />
UDP, 64, 192, 201, 204, 227<br />
UDPPaket, 201<br />
Umgebungsvariable, 193<br />
Universal Mobile Telecommunications System,<br />
27<br />
unix, 227<br />
Urgend, 63<br />
Urgendpo<strong>in</strong>ter, 63<br />
User Datagram Protocol, 64<br />
User Datagramm Protocol, 64<br />
UTMS, 27<br />
Verarbeitungsschicht, 9, 36<br />
Verb<strong>in</strong>dung, 192, 200–202, 207<br />
Verb<strong>in</strong>dungsverhalten, 63<br />
Vermittlungsschicht, 8<br />
Verzeichnis, 85<br />
Virtual Private Network, 201<br />
Visualisierung, 48, 176, 183<br />
Voice-over-IP, 97<br />
VPN, 201<br />
WAN, 7, 25, 27, 36<br />
Webbrowser, 200<br />
well-known services, 63<br />
whois, 86<br />
Wide Area Network, 25, 27<br />
WIN¿, 84<br />
W<strong>in</strong>dow-Size, 64<br />
W<strong>in</strong>dows, 129<br />
W<strong>in</strong>dows-Namensdienst, 132<br />
WINS, 130, 132, 140<br />
Wireless LANs, 16<br />
xhost, 194<br />
x<strong>in</strong>etd, 125, 193<br />
x<strong>in</strong>etd.conf, 193<br />
XML, 184<br />
Yellow Pages, 157<br />
ypb<strong>in</strong>d, 157<br />
ypserv, 157<br />
ypset, 157<br />
Zähler, 175, 230<br />
Zertifikat, 200, 211, 216<br />
Zieladresse, 20, 38, 63<br />
Zone, 88