Ein Mehrbenutzersystem in der Praxis Netzwerk Linux/Unix
Transcription
Ein Mehrbenutzersystem in der Praxis Netzwerk Linux/Unix
Ein Mehrbenutzersystem in der Praxis Netzwerk Linux/Unix Kursunterlagen -Universitäten Göttingen und Freiburg- WLAN Internet WAN 192.168.1.0/24 LAN printer hera zeus .dom.test .dom.test aphrodite .dom.test Dirk von Suchodoletz (dirk@goe.net) mit Beiträgen von: Frank Schwichtenberg Daniel van Ross Tim Oliver Kaiser Steffen Wagner Stefan Koospal Korrekturgelesen und zusammengestellt von: Antonia Blanke 3. Auflage 22. Mai 2006 Alle in diesem Dokument erscheinenden Produktnamen dienen nur zu Identifikationszwecken und sind Eigentum ihrer jeweiligen Besitzer. Inhaltsverzeichnis 1 Einleitung Netzwerk 1.1 Zu diesen Unterlagen . . . . . . . . . . . . . . 1.2 Bezeichnung von Dateien und Verzeichnissen 1.3 Begriffserklärungen - Bereich Netzwerk . . . . 1.4 Begriffserklärungen - Telefonie . . . . . . . . 2 OSI-Schichtenmodell 2.1 Kategorisierungen . . . . . . . 2.2 Protokollhierarchien . . . . . . 2.2.1 Hierarchie . . . . . . . . 2.3 Motivation . . . . . . . . . . . 2.4 Die einzelnen Schichten . . . . 2.4.1 Bitübertragungsschicht 2.4.2 Sicherungsschicht . . . . 2.4.3 Vermittlungsschicht . . 2.4.4 Transportschicht . . . . 2.4.5 Sitzungsschicht . . . . . 2.4.6 Darstellungsschicht . . . 2.4.7 Verarbeitungsschicht . . 2.5 Konzepte . . . . . . . . . . . . 2.5.1 Protokolle . . . . . . . . 2.6 Einordnungen . . . . . . . . . . 2.7 Aufgaben . . . . . . . . . . . . 2.7.1 OSI . . . . . . . . . . . 2.7.2 Netzwerke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 LAN Hardware 3.1 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Ethernet-Adapter . . . . . . . . . . . . . . . . . . . 3.1.2 Koaxialkabelbasierte Netze für 10 MBit . . . . . . 3.1.3 Twisted-Pair-basierte Verkabelungen 10/100 Mbit . 3.1.4 1000 Mbit . . . . . . . . . . . . . . . . . . . . . . . 3.1.5 Ethernet unter Linux . . . . . . . . . . . . . . . . 3.2 Funk-Netze . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 TokenRing . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Netzwerk-Interfaces von Linux . . . . . . . . . . . . . . . 3.5 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 2 5 . . . . . . . . . . . . . . . . . . 9 9 9 9 10 12 12 12 12 13 13 13 13 13 14 14 15 15 16 . . . . . . . . . . . 17 17 19 19 20 20 20 22 24 26 27 27 4 INHALTSVERZEICHNIS 4 WAN Hardware 4.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Leistung und Kosten der einzelnen Technologien . . . 4.2.1 Leistung / Datendurchsatz . . . . . . . . . . . 4.2.2 Kosten . . . . . . . . . . . . . . . . . . . . . . . 4.3 Telefonnetze . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Das klassische Telefonnetz . . . . . . . . . . . . 4.3.2 Digitale Telefonnetze - ISDN . . . . . . . . . . 4.3.3 Mobilfunknetze nach dem GSM-Standard . . . 4.3.4 GPRS . . . . . . . . . . . . . . . . . . . . . . . 4.3.5 HSCSD . . . . . . . . . . . . . . . . . . . . . . 4.3.6 Mobilfunknetze der dritten Generation - UMTS 4.4 ISDN . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Modem . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 ADSL . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1 Designüberlegungen . . . . . . . . . . . . . . . 4.6.2 Übertragungsmethoden . . . . . . . . . . . . . 4.6.3 Vorteile der neuen Technik . . . . . . . . . . . 4.6.4 Benutzung unter Linux . . . . . . . . . . . . . 4.7 ATM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.1 Die ATM-Zelle . . . . . . . . . . . . . . . . . . 4.8 FDDI . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.9 Mobilfunknetze . . . . . . . . . . . . . . . . . . . . . . 4.9.1 GSM, HSCSD, GPRS und UMTS . . . . . . . 4.10 Netzwerkadapter für Mobilfunknetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 29 30 30 30 30 31 31 32 32 33 33 34 34 34 35 35 36 37 37 38 40 40 40 41 5 TCP-IP 5.1 Schaffung von ”Inter-Nets” . . . . . 5.2 Überblick über TCP/IP . . . . . . . 5.3 Design . . . . . . . . . . . . . . . . . 5.4 Internet Protocol (IP) . . . . . . . . 5.5 Spezifikation . . . . . . . . . . . . . 5.5.1 IPv4-Standard . . . . . . . . 5.5.2 Notation . . . . . . . . . . . . 5.5.3 Adressbereiche . . . . . . . . 5.5.4 Spezielle IP-Adressen . . . . 5.5.5 Private IP-Adressen . . . . . 5.6 Der IP-Header . . . . . . . . . . . . 5.6.1 Fragmentierung . . . . . . . . 5.7 IP-Routing . . . . . . . . . . . . . . 5.7.1 Prinzip der IP-Netze . . . . . 5.7.2 Routing (Die Wege im Netz) 5.7.3 Einfaches Hostrouting . . . . 5.7.4 Routingentscheidung . . . . . 5.7.5 Subnetting und Supernetting 5.7.6 QoS-Routing . . . . . . . . . 5.8 Address Resolution Protocol . . . . . 5.8.1 ARP - Hilfsprotokoll des IP . 5.8.2 Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 43 44 46 46 48 48 48 49 50 51 52 53 53 54 55 56 56 58 60 61 61 62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INHALTSVERZEICHNIS 5.9 5.10 5.11 5.12 5.13 5.14 5.8.3 ARP unter Linux . . . . . . . . . . . 5.8.4 Eingebaute Sicherheitslücken . . . . 5.8.5 Gefahrenabwehr . . . . . . . . . . . 5.8.6 ARP und doppelte IP-Adressen . . . 5.8.7 Proxy-ARP . . . . . . . . . . . . . . 5.8.8 Probleme durch Proxy-ARP . . . . . ICMP - Internet Control Message Protocol Domain-Name-Service (DNS) . . . . . . . . Transmission Control Protocol (TCP) . . . User Datagram Protocol (UDP) . . . . . . . Ports . . . . . . . . . . . . . . . . . . . . . . Aufgaben . . . . . . . . . . . . . . . . . . . 5.14.1 Internets . . . . . . . . . . . . . . . 5.14.2 Internet Protokoll / Header . . . . . 5.14.3 IP-Netze . . . . . . . . . . . . . . . . 5.14.4 Fragmentierung . . . . . . . . . . . . 5.14.5 IP-Routing . . . . . . . . . . . . . . 5.14.6 ARP . . . . . . . . . . . . . . . . . . 6 Linux im Netzwerk 6.1 IP-Konfiguration unter Linux . . . . . . . . 6.1.1 Die traditionellen Tools . . . . . . . 6.1.2 Routing . . . . . . . . . . . . . . . . 6.1.3 Next Generation IP-Config . . . . . 6.1.4 Das Kommando ip . . . . . . . . . . 6.1.5 Erste Schritte mit ip . . . . . . . . . 6.2 Weitergehende Anwendungen von IProute2 6.2.1 Weitere Tools . . . . . . . . . . . . . 6.2.2 Routing Policy Database . . . . . . 6.2.3 Generelle 2-Wege-Routen . . . . . . 6.2.4 Dienste-basiertes Routing . . . . . . 6.3 Überprüfung der Konfiguration . . . . . . . 6.4 Aufgaben . . . . . . . . . . . . . . . . . . . 6.4.1 IP-Konfiguration und Erreichbarkeit 6.4.2 Datenverkehr zählen . . . . . . . . . 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 66 68 69 70 71 72 73 75 77 78 78 78 78 79 79 80 80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 81 81 82 83 83 85 86 87 88 89 91 91 91 91 92 7 DHCP 7.1 Automatische IP-Zuweisung . . . . . . . . . . 7.2 Implementation . . . . . . . . . . . . . . . . . 7.3 DHCP-Server . . . . . . . . . . . . . . . . . . 7.3.1 DHCP-Standardoptionen . . . . . . . 7.3.2 DHCP-DNS-Verbindung . . . . . . . . 7.4 Benutzerdefinierte Optionen . . . . . . . . . . 7.5 Die Verwendung von Vendor-Code-Identifiern 7.6 DHCP-Client . . . . . . . . . . . . . . . . . . 7.7 DHCP mit LDAP-Backend . . . . . . . . . . 7.8 Aufgaben . . . . . . . . . . . . . . . . . . . . 7.8.1 DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 93 93 96 97 98 99 100 101 104 106 106 6 INHALTSVERZEICHNIS 8 DNS 8.1 Einstieg . . . . . . . . . . . . . . . . . . . . . . . 8.1.1 Enstehungsgeschichte . . . . . . . . . . . 8.1.2 DNS - Das virtuelle IP-Telefonbuch . . . 8.1.3 Regeln für die Namensgebung . . . . . . . 8.1.4 Registrieren und Verwalten von Domains 8.2 Implementation . . . . . . . . . . . . . . . . . . . 8.2.1 Nameserver und Zuständigkeiten . . . . . 8.2.2 Caching . . . . . . . . . . . . . . . . . . . 8.2.3 Primärer und sekundäre Nameserver . . . 8.3 DNS-Server mit Linux . . . . . . . . . . . . . . . 8.3.1 Der Dämon . . . . . . . . . . . . . . . . . 8.3.2 Die DNS-Datenbank . . . . . . . . . . . . 8.3.3 Starten und Anhalten des Nameservers . 8.3.4 Slave-Server . . . . . . . . . . . . . . . . . 8.3.5 Delegation einer Subdomain . . . . . . . . 8.4 Dynamische Updates der Zonendateien . . . . . . 8.4.1 Sicherheit . . . . . . . . . . . . . . . . . . 8.5 DNS bekommt neue Aufgaben . . . . . . . . . . 8.5.1 ENUM . . . . . . . . . . . . . . . . . . . . 8.5.2 IPv6 . . . . . . . . . . . . . . . . . . . . . 8.5.3 DNS als Bannerfilter . . . . . . . . . . . . 8.6 Aufgaben . . . . . . . . . . . . . . . . . . . . . . 8.6.1 Rechnernamen im Internet . . . . . . . . 8.6.2 Domain Name Service (DNS) . . . . . . . 8.6.3 DNS Server . . . . . . . . . . . . . . . . . 9 Webserver 9.1 Überblick . . . . . . . . . . . . . . . . . . . . 9.2 HTTP-Kommunikation . . . . . . . . . . . . 9.3 Was ist ein Webserver? . . . . . . . . . . . . . 9.4 Apache 2 . . . . . . . . . . . . . . . . . . . . 9.4.1 Erweiterte Funktionalität . . . . . . . 9.5 Konfiguration . . . . . . . . . . . . . . . . . . 9.5.1 Optionen . . . . . . . . . . . . . . . . 9.5.2 Module . . . . . . . . . . . . . . . . . 9.5.3 User-WWW . . . . . . . . . . . . . . . 9.6 Webserver Erweiterungen . . . . . . . . . . . 9.6.1 Die Benutzer-Homepage - mod userdir 9.6.2 URL-Umschreiber mod rewrite . . . . 9.6.3 Zugriffskontrollen . . . . . . . . . . . . 9.6.4 Kompression . . . . . . . . . . . . . . 9.6.5 Das Web-DAV Modul . . . . . . . . . 9.6.6 Vrituelle Webserver . . . . . . . . . . 9.7 SSL (Secure Socket Layer) . . . . . . . . . . . 9.7.1 Funktionsweise . . . . . . . . . . . . . 9.7.2 Zertifikate . . . . . . . . . . . . . . . . 9.7.3 Zertifikate erzeugen . . . . . . . . . . 9.7.4 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 107 107 109 109 110 111 111 113 113 113 114 115 117 117 118 119 119 121 121 122 122 123 123 124 124 . . . . . . . . . . . . . . . . . . . . . 125 125 126 127 127 127 127 128 129 129 130 131 131 131 133 133 134 135 136 136 136 137 INHALTSVERZEICHNIS 9.8 9.9 9.10 9.11 9.12 9.13 9.14 9.15 9.16 9.17 7 CGI (-Modul) . . . . . . . . . . PHP . . . . . . . . . . . . . . . 9.9.1 Das Apache-PHP-Modul SSI (Server Side Includes) . . . Überblick . . . . . . . . . . . . HTTP-Kommunikation . . . . Überblick . . . . . . . . . . . . HTTP-Kommunikation . . . . Überblick . . . . . . . . . . . . HTTP-Kommunikation . . . . Dokumentation . . . . . . . . . 10 Mail 10.1 SMTP . . . . . . . . . 10.1.1 E-Mail-Adresse 10.1.2 Versenden einer 10.1.3 Mail-Body . . . 10.1.4 E-Mail Header 10.1.5 Open-Relay . . 10.1.6 Sicherheit . . . 10.2 sendmail . . . . . . . . 10.3 exim . . . . . . . . . . 10.4 POP . . . . . . . . . . 10.5 IMAP . . . . . . . . . 10.6 Aufgaben . . . . . . . 10.6.1 Dienste . . . . . . . . . . . . . . E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 138 139 140 141 142 142 143 143 144 144 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 146 147 147 148 149 150 150 152 152 153 155 156 156 . . . . . . . . . . . . . . . . . . . 157 157 158 159 161 161 161 162 162 166 166 166 166 169 170 171 171 172 173 175 11 Fileserver 11.1 Unix-Netzwerkdateisystem - NFS . . . . . . . 11.1.1 NFS im Einsatz . . . . . . . . . . . . . 11.1.2 NFS und Portmapper . . . . . . . . . 11.1.3 NFS-Clients . . . . . . . . . . . . . . . 11.1.4 NFS-Server . . . . . . . . . . . . . . . 11.1.5 NFS und (Un)Sicherheit . . . . . . . . 11.2 Andrew Filesystem (AFS) . . . . . . . . . . . 11.2.1 Die Clientseite . . . . . . . . . . . . . 11.3 File Transfer Protocol . . . . . . . . . . . . . 11.3.1 Dateiarchiv - FTP-Server . . . . . . . 11.3.2 FTP-Clients . . . . . . . . . . . . . . . 11.4 Das Minimal-FTP (TFTP) . . . . . . . . . . 11.5 Weitere Fileserver-Konzepte . . . . . . . . . . 11.6 Network Block Devices . . . . . . . . . . . . . 11.7 NBDs im Einsatz . . . . . . . . . . . . . . . . 11.7.1 Erste Versuche mit NBD . . . . . . . 11.7.2 NBD und Filesysteme . . . . . . . . . 11.7.3 DNBD - eine spezialisierte Alternative 11.8 Spezielle Blockdevice-Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 INHALTSVERZEICHNIS 12 Samba 12.1 Samba - Brücke zwischen Microsoft- und Unix-Welt 12.1.1 Einsatzgebiete von Samba . . . . . . . . . . . 12.2 Erste Versuche . . . . . . . . . . . . . . . . . . . . . 12.2.1 Windows-Server - Linux-Client . . . . . . . . 12.2.2 Linux-Server - Windows-Client . . . . . . . . 12.3 Weitergehende Konfiguration . . . . . . . . . . . . . 12.3.1 Homeverzeichnisse für Windows und Linux . 12.3.2 Druckerfreigaben . . . . . . . . . . . . . . . . 12.3.3 Nachrichtendienst auf Linux-Clients . . . . . 12.4 Die zentrale Samba-Konfigurationsdatei . . . . . . . 12.4.1 Struktur . . . . . . . . . . . . . . . . . . . . . 12.4.2 Wichtige Optionen in der Sektion [global] . . 12.4.3 Wichtige Optionen der anderen Abschnitte . 12.4.4 Virtuelle Samba-Server . . . . . . . . . . . . 12.5 Controller-Funktionalität . . . . . . . . . . . . . . . 12.5.1 Der Windows Namensdienst . . . . . . . . . . 12.5.2 NetBIOS Namen . . . . . . . . . . . . . . . . 12.5.3 Der Nameserver (WINS) . . . . . . . . . . . . 12.6 Samba als PDC . . . . . . . . . . . . . . . . . . . . . 12.6.1 Benutzerprofile und Logon-Skripten . . . . . 12.7 Samba und LDAP . . . . . . . . . . . . . . . . . . . 12.7.1 Konfiguration des LDAP-Servers . . . . . . . 12.7.2 Die neue Samba-Konfiguration . . . . . . . . 12.7.3 Die IDEALX-Skripten . . . . . . . . . . . . . 12.7.4 Fazit von Samba-LDAP-Aktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 177 177 178 178 180 181 183 184 184 184 185 185 186 187 187 187 188 190 191 192 194 195 195 197 202 13 Ressourcenverwaltung 13.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . 13.2 NIS . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1 Zielsetzung . . . . . . . . . . . . . . . . . 13.2.2 NIS-Datenbanken . . . . . . . . . . . . . . 13.2.3 NIS-Server . . . . . . . . . . . . . . . . . 13.2.4 NIS-Client . . . . . . . . . . . . . . . . . . 13.3 Hierarchische Datenbank: LDAP . . . . . . . . . 13.3.1 Intro . . . . . . . . . . . . . . . . . . . . . 13.3.2 Was kann mit LDAP abgebildet werden . 13.3.3 Das Datenmodell . . . . . . . . . . . . . . 13.3.4 Das Protokoll . . . . . . . . . . . . . . . . 13.4 LDAP praktisch . . . . . . . . . . . . . . . . . . 13.4.1 Server- und Clientprogramme unter Linux 13.4.2 Eine einfache Beispielkonfiguration . . . . 13.4.3 Absicherung durch SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 203 203 203 203 204 204 204 204 205 206 209 209 209 210 213 14 Drucken im Netz 14.1 Einleitung . . . . . . . 14.1.1 Anforderungen 14.1.2 Grundlagen . . 14.2 CUPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 219 219 220 220 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . INHALTSVERZEICHNIS 14.2.1 Client-Server-Architektur 14.2.2 IPP . . . . . . . . . . . . 14.2.3 Funktionsweise . . . . . . 14.2.4 Filter . . . . . . . . . . . 14.2.5 Konfiguration . . . . . . . 14.3 Alternativen . . . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 221 222 222 222 223 15 Wichtige Netzwerkkommandos 15.1 Offene Dateien und Netzwerkverbindungen 15.2 netstat . . . . . . . . . . . . . . . . . . . . . 15.3 Systemprogramme . . . . . . . . . . . . . . 15.3.1 Dämonen . . . . . . . . . . . . . . . 15.4 Netzwerkkonfiguration . . . . . . . . . . . . 15.4.1 Netzwerktests . . . . . . . . . . . . . 15.4.2 Netzwerküberwachung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 225 225 226 226 227 227 229 16 Netzwerküberwachung 16.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2 SNMP - Das Simple Network Mangement Protocol . . . . . . . . . . . . . 16.2.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3 Die Datendefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.1 Der SNMP-Namensraum und die Management Information Bases . 16.3.2 Die SNMP-Agenten . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3.3 Der Kommunikations-Code der Agenten . . . . . . . . . . . . . . . 16.4 SNMP-Implementierungen unter Linux . . . . . . . . . . . . . . . . . . . . 16.5 Kommandos zur Datenbeschaffung . . . . . . . . . . . . . . . . . . . . . . 16.6 Konfiguration des UCD-SNMP . . . . . . . . . . . . . . . . . . . . . . . . 16.6.1 Der Kopf definiert die Zugriffs-Policies . . . . . . . . . . . . . . . . 16.6.2 Parameter der ”Enterprise”-Erweiterungen . . . . . . . . . . . . . 16.6.3 Erweiterung durch externe Skripten und Programme . . . . . . . . 16.7 Überwachung weiterer Parameter . . . . . . . . . . . . . . . . . . . . . . . 16.7.1 Weitergehende Ergänzungen . . . . . . . . . . . . . . . . . . . . . . 16.7.2 Parameter der Host-Ressource-Erweiterungen . . . . . . . . . . . . 16.8 MRTG als Frontend zur Anzeige von Zeitreihen . . . . . . . . . . . . . . . 16.9 Einige abschließende Worte zu SNMP . . . . . . . . . . . . . . . . . . . . 16.10Weiterführende Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 231 231 231 232 233 234 234 235 235 236 236 237 237 238 239 240 241 242 242 17 Systemsicherheit 17.1 Generelle Überlegungen . . . . . . . . . . . . . . 17.2 Sicherheit auf dem Rechner . . . . . . . . . . . . 17.2.1 Einleitung . . . . . . . . . . . . . . . . . . 17.2.2 Passwörter . . . . . . . . . . . . . . . . . 17.2.3 Der Admin-Account . . . . . . . . . . . . 17.2.4 /etc/passwd und /etc/shadow . . . . . . . 17.2.5 Locken oder ausloggen . . . . . . . . . . . 17.2.6 Setuid und Verzeichnisse . . . . . . . . . . 17.2.7 Setuid und Mounting . . . . . . . . . . . 17.2.8 Browser, CGI / Java-Applet und Binaries, 17.2.9 Physikalischer Zugriff . . . . . . . . . . . 17.3 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 245 245 245 245 246 246 246 246 247 247 247 247 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . per Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 INHALTSVERZEICHNIS 17.4 Sicherheit im Netzwerk . . . . . . . . . . . . . . . . 17.4.1 Einleitung . . . . . . . . . . . . . . . . . . . 17.4.2 Gesicherte Verbindungen . . . . . . . . . . 17.4.3 ssh und scp . . . . . . . . . . . . . . . . . . 17.4.4 Der Intenet-”Super”-Daemon (x)inetd . . . 17.4.5 xhost + und das unsichtbare Fenster . . . . 17.4.6 .rhosts . . . . . . . . . . . . . . . . . . . . . 17.4.7 Überprüfung der Netzwerksicherheit eigener 17.4.8 Firewall . . . . . . . . . . . . . . . . . . . . 17.5 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . 17.5.1 Secure Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . und anderer Rechner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 248 248 248 249 250 250 250 251 251 251 18 Sicheres IP 18.1 Sicherheitsprobleme des derzeitigen IP-Standards 18.1.1 Intro . . . . . . . . . . . . . . . . . . . . . 18.1.2 Offener Datentransport . . . . . . . . . . 18.1.3 Absicherung - Lösungsansätze . . . . . . . 18.2 VPNs - Sichere Netze über das Internet . . . . . 18.3 CIPE . . . . . . . . . . . . . . . . . . . . . . . . 18.3.1 Idee . . . . . . . . . . . . . . . . . . . . . 18.3.2 Aufsetzen von CIPE . . . . . . . . . . . . 18.4 IPsec-Theorie . . . . . . . . . . . . . . . . . . . . 18.5 IPsec praktisch - FreeSWAN . . . . . . . . . . . . 18.5.1 Konfigurationsmöglichkeiten von IPsec . . 18.5.2 Einrichtung von IPsec unter Linux . . . . 18.5.3 Einschaltbare Optionen . . . . . . . . . . 18.5.4 Konfiguration von IPsec-Verbindungen . . 18.6 Kommerzielle VPN-Lösungen . . . . . . . . . . . 18.6.1 Cisco-VPN . . . . . . . . . . . . . . . . . 18.6.2 Verwendung der Cisco-Tools . . . . . . . . 18.6.3 Einsatzszenarien . . . . . . . . . . . . . . 18.6.4 Fazit . . . . . . . . . . . . . . . . . . . . . 18.7 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 253 253 253 255 257 257 257 259 260 262 263 264 265 266 267 267 270 272 273 273 19 Firewall 19.1 Aufbau . . . . . . . . . . . . . . . . . . . . . . . 19.2 Ein- und Austragen von chains und Filter-Regeln 19.2.1 Pakete genauer spezifizieren . . . . . . . . 19.2.2 ”Match Extensions” und Erweiterbarkeit 19.3 von ”masquerading” und ”packet mangling” . . . 19.3.1 Network Address Translation . . . . . . . 19.3.2 packet mangling . . . . . . . . . . . . . . 19.4 connection tracking . . . . . . . . . . . . . . . . . 19.5 Referenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 275 276 276 277 279 279 280 281 282 Kapitel 1 Einleitung Netzwerk 1.1 Zu diesen Unterlagen Der Kurs ”Linux und Netzwerke” soll in die Begriffswelt vernetzter Rechner einführen. Vorgestellt werden die Grundlagen von Netzwerken und darauf aufbauende Applikationen. Zur besseren Einordnung der unterschiedlichen Netzwerk-Layer ist das OSI-Schichtenmodell vorangestellt. Gefolgt wird dieses von Ausführungen zu derzeitig verfügbarer Netzwerkhardware, wie Ethernet oder Funk-Lan und verfügbaren Netzwerkanschlüssen, wie Modem, ISDN, ATM und ADSL. Alle Erläuterungen erfolgen am Beispiel des Betriebssystems Linux. Im Zuge des Skriptes werden etliche Programme vorgestellt, welche zu Konfiguration, Tests, Fehlersuche, Betrieb bestimmter Dienste und Abfragen dieser benötigt werden. Diese Unterlagen wurden aus Anlass mehrerer Vorlesungen, Seminare und einiger Fortbildungskurse zum Thema “Linux und Administration in Netzwerken”, ”Linux als Beispiel eines Netzwerkbetriebssystems” oder ”Einführung in IP-Netzwerke” zusammengestellt. Sie sind inzwischen ein gemeinsames Projekt des Rechenzentrums der Universität Freiburg und der mathematischen Fakultät Göttingen. Die Unterlagen werden permanent aktualisiert, jedoch können einige Teile durchaus älteren Datums sein. Sollte es Fehler in den Texten oder Probleme geben, bitte ich Sie, mich einfach zu benachrichtigen.1 Viele Teile stammen von Artikeln ab, die ich irgendwann mal in der einen oder anderen Publikumszeitschrift veröffentlicht hatte. Ich habe daher nichts dagegen, wenn diese Unterlagen ganz oder zum Teil für andere Projekte Verwendung finden. Ich möchte dann nur auf den Haftungsausschluss hinweisen und bitten, die Quellen zu überprüfen und gegebenenfalls zu kennzeichnen. Deshalb möchte ich die GPL möchte auf diese Unterlagen angewandt sehen. Das Skript erhebt keinen Anspruch auf Vollständigkeit oder Originalität. Vieles findet man im Internet oder in Lehrbüchern ebenso gut oder besser. Dort nachzuschlagen und zu vergleichen, sei den Lesern nachdrücklich ans Herz gelegt. Dennoch wird immer wieder ein ”eigener” Weg der Darstellung begangen, wobei manches über den normalen Umfang einer Einführung hinausgehen kann. Dafür kommen manche traditionell breits abgehandelten Gebiete hier recht kurz weg. Manches fehlt auch ganz, weil man es woanders leicht finden kann. Dieses Skript will und kann kein Lehrbuch ersetzen (das brauchen Sie außerdem), sondern ergänzen. Das “Self-Linux”-Projekt2 bietet eine vernünftige Ergänzung zu den vorliegenden Unterlagen. Einiges wird anders als gewohnt präsentiert. Es werden Beispiele und auch zusätzliche Informationen angeboten, die nicht unbedingt zum Prüfungsstoff gehören, aber gut zu wis1 2 beispielsweise per Mail an dirk@goe.net www.selflinux.org 1 2 KAPITEL 1. EINLEITUNG NETZWERK sen sind (oder die man hier bequemer findet). Dafür entfallen viele Aspekte, die in den Standard-Lehrbüchern gut dargestellt oder weitgehend bekannt sind. Die weiterführende Literatur findet sich am Ende eines Abschnitts. Ich hoffe, dass diese Kursunterlagen den Einstieg in Netzwerke und Linux in diesen erleichtern. Die Beispiele habe ich in den meisten Fällen selbst ausprobiert und Angaben aus Konfigurationsdateien stammen aus meiner eigenen Praxis. Trotzdem können Fehler enthalten sein, die ich dann zu entschuldigen bitte ... 1.2 Bezeichnung von Dateien und Verzeichnissen Zur Erhöhung der Lesbarkeit werden alle auführbaren Dateien/Systembefehle durch Fettdruck, z.B. dhcpd hervorgehoben. Alle Konfigurationsdateien, IP- und MAC-Adressen, Hostnamen werden italic gesetzt, um sie vom Druckbild hervorzuheben. Um den Lesefluss nicht stark zu stören, werden viele Erläuterungen als Fussnoten angefügt. Auch alle Links zu den entsprechenden Webseiten sind hier zu finden. 1.3 Begriffserklärungen - Bereich Netzwerk Im folgenden werden einige Begriffe und Abkürzungen erläutert, die im Bereich Linux im Netzwerk und Internet häufig vorkommen. Bandbreite wird in mehreren Bedeutungen benutzt: Zum einen ist die Bandbreite ein Mass für die Breite eines Frequenzbands. Die Differenz zwischen einer oberen und einer unteren Grenzfrequenz, die nie über- oder unterschritten wird. So hat beispielsweise hat ein analoges Telefonsignal, das in einem Frequenzbandbereich von 300 Hz bis 3400 Hz übertragen wird, eine Bandbreite von 3100 Hz. Andererseits ist die Bandbreite ein Mass für die Anzahl Bits pro Sekunde, die gleichzeitig über eine Kommunikationsleitung transferiert werden können. So hat das klassische Ethernet eine Bandbreite von 10 Mbit/s. CSMA Carrier Sense Multiple Access beschreibt das Zugriffsverfahren für bestimmte Broadcast-Netze, wie Ethernet oder TokenRing. Dabei gibt es zwei wichtige Ausprägungen: CD steht für Collision Detection, das Erkennen und CA für Collision Avoidance - das Vermeiden von Paketzusammenstößen. Ersteres ist charakteristisch für Ethernet, das Zweite für TokenRing oder FDDI. Datenübertragungsrate Die maximale Datenübertragungsrate R lässt sich gemäss dem Nyquist-Theorem folgendermassen berechnen: Wenn das Signal aus V diskreten Stufen besteht: R = 2Hlog2V Bit/s. Nach Shannon beträgt die maximale Datenübertragungsrate R eines rauschenden Kanals mit einer Bandbreite von H Hz und einem Rauschabstand von S/N gleich Hlog2(1 + S/N ), die maximale Anzahl von Bit pro Sekunde. Dezibel (dB) ist ein einheitenloses Maß. Bel ist nach dem Physiker Alexander Graham Bell benannt. In der Nachrichtentechnik verwendet kommt üblicherweise die Masseinheit Dezibel (dB) zum Einsatz. Das Dezibel ist ein logarithmisches Maß. Es vereinfacht die Berechnung der Dämpfung oder Verstärkung. Damit müssen für die Ermittlung der Verstärkung eines Gesamtsystems nur die einzelnen dB-Werte addiert werden. Eine Rechnung der Sendeleistung (beispielsweise eines WLAN-Access-Points) addiert die Leistung 1.3. BEGRIFFSERKLÄRUNGEN - BEREICH NETZWERK 3 des Senders/Empfängers zur Leistung eines eventuell verwendeten Verstärkers und der Antennenleistung. Von diesem Wert zieht man den Leistungsverlust durch Kabel, Stecker und eventuellem Blitzschutz ab. Eine Veränderung um 3 dB entspricht immer einer Leistungsverdoppelung oder Halbierung. Die Einheit Dezibel Milliwatt (dBm) beschreibt den Leistungspegel bezogen auf ein Milliwatt. Die Einheit ist eine absolute Angabe. 20 dBm entsprechen einer Leistung von 100 mW, 0 dBm entsprechen 1 mW. Der Antennengewinn in dBi beschreibt die Leistungsverbesserung gegenüber einem isotrophen Kugelstrahler. Sobald die Leistung nicht mehr in alle Richtungen gleichmäßig, sondern bezogen auf ein bestimmtes Raumsegment abgegeben wird, erhält man einen Gewinn. Diskless X-Station Diskless X-Station meint Workstations auf PC-Basis. Diese Geräte mounten ihr Dateisystem von einem Fileserver und gestatten dem Benutzer das lokale Ausführen von Applikationen, sowie den Zugriff auf alle Laufwerke, installierte Erweiterungshardware (Audio, Video, SCSI, USB ...) und angeschlossene Perepheriegeräte. DHCP Dynamic Host Control Protocol. DHCP basiert auf UDP und benutzt für den Server-Kanal Port 67 und den Client-Kanal Port 68. Durchsatz oder Datendurchsatz bezeichnet die gemessene Leistung eines Kanals und wird in Bit pro Sekunde (bps) angegeben. ERP und EIRP machen Angaben zur abgestrahlten Leistung von Antennen. ERP (Effective Radiated Power) gibt die effektiv abgestrahlte Leistung in der Hauptstrahlungsrichtung der Antenne an. EIRP (Effective Isotropic Radiated Power) wird benutzt um Richtantennen zu charakterisieren. EIRP gibt an, wie stark eine ungerichtete Antenne (isotrop) senden müsste, um die gleiche Wirkung zu erzielen wie die Richtantenne in ihrer Hauptsenderichtung. FTP Das File Transfer Protocal ist eine der ältesten Möglichkeiten über TCP/IP Dateien zwischen Rechnern zu kopieren. Es verwendet das verbindungsorientierte TCP und verwendet Port 23. LAN Local Area Network. Meint Netzwerke einer geringen bis mittleren Ausbreitung, die sich üblicherweise der Ethernet-, ATM-, TokenRing- oder FDDI-Technologie bedienen. Latenz ist die Dauer, die eine Nachricht von einem Ende eines Netzwerks zum anderen braucht. Die Zeitspanne, eine Nachricht von einem Ende eines Netzwerks zum anderen und wieder zurück zu senden, wird als Round Trip Time (RTT) des Netzwerks bezeichnet, sie bewegt sich (in den meisten Netzen) meist im Millisekundenbereich. MIME Multipurpose Internet Mail Extension ist ein Kodierstandard, der die Struktur und den Aufbau von E-Mails und anderen Internetnachrichten festlegt. Modulation Unter Modulation versteht man die Veränderung von Merkmalen eines Signals, z.B. der Frequenz, Amplitude oder Phase, um Informationen zu kodieren. NFS Network File System. NFS ist ein UDP-basiertes Protokoll, das Dateisysteme über ein TCP/IP-Netzwerk zur Verfügung stellen kann. 4 KAPITEL 1. EINLEITUNG NETZWERK Nyquist-Theorem besagt, dass ein Signal mit der Bandbreite H durch 2H Abtastwerte pro Sekunde vollständig rekonstruiert werden kann. Anders ausgedrückt kann ein Signal der Frequenz f mit 2f Abtastwerten vollständig rekonstruiert werden. OSI-Schichtenmodell Dieses Modell der International Organization for Standardization (ISO) betrifft die Organisation von Datenfernübertragungen und veranschaulicht die ebenenorientierte Denkweise in der Informatik. Port Neben der IP-Adresse verfügt ein Rechner über jeweils 65.535 TCP bzw. UDPPorts. Damit wird es möglich viele verschiedene Dienste auf einem Rechner gleichzeitig anzubieten, bzw. viele gleichzeitige Verbindunge aufzubauen. Server Der Server ist ein Diensteanbieter im klassichen TCP/IP-Client-Server-Modell, d.h. er stellt, meistens zentral, bestimmte Funktionalitäten, wie Mail-, File- und Webdienste oder Applikationen zur Verfügung. Benutzer können sich an einem Server anmelden, werden aber nur in den seltensten Fällen physisch vor dem Gerät sitzen. Signal-Rausch-Abstand (englisch: Signal Noise Ratio (SNR) beschreibt das Verhältnis der Signalstärke S zur Rauschstärke N , also die Intensität des thermischen Rauschens in einem Übertragungskanal: S/N , und wird in Dezibel (dB) gemessen. Es ist ein Mass für die Reinheit eines Signals. SSH Secure Shell Verbindung. Diese ist dem Telnet auf jeden Fall vorzuziehen, da sie verschlüsselt erfolgt. Das Programm auf der Serverseite heisst üblicherweise sshd, die Clientapplikation ssh. Telnet Eines der ersten Protokolle der TCP/IP-Suite, um sich an entfernten Rechnern anmelden zu können. Telnet verwendet als Transportprotokoll TCP und arbeitet auf Port 21. Der Daemon, d.h. der Hintergrundprozess, der den Telnet-Dienst auf einem Rechner anbietet, heisst üblicherweise (in.)telnetd und wird meistens über den Internet-SuperDaemon (x)inetd gestartet. Die Clientapplikation heisst einfach telnet. Heutzutage aus Sicherheitsgründen kaum noch Telnet-Server, jedoch lassen sich mit Telnet einfache Tests auf TCP-basierte Dienste loslassen. TFTP Trivial File Transfer Protocol. TFTP stellt eine stark vereinfachte Version des FTP dar und arbeitet auf Basis von UDP Port 69. UDP User Datagram Protocol. UDP ist Teil von TCP/IP und stellt eine Implementation der Transportschicht dar. UDP arbeitet verbindungslos. User Agent oder Benutzeragent, -programm ist ein Client Programm in Netzwerkverbindungen. Es initiiert Anfragen, beispiel ein Browser an einen Web-Server. WAN Wide Area Network. Meint Netzwerke mit großer räumlicher Ausdehnung, die sich üblicherweise der ISDN oder ATM Technologie bedienen. (Lichtwellenleiter, Kupferkabel) 1.4. BEGRIFFSERKLÄRUNGEN - TELEFONIE 5 XDMCP Das X display message control protocol steuert die Grafikschnittstelle auf UnixSystemen. Diese Schnittstelle ist netzwerktransparent. Dabei erfolgt die Ausgabe des Grafikoberfläche des Servers lokal auf der Maschine. Die Bentutzereingaben durch Tastatur und Maus werden über XDMCP an den Server weitergereicht. 1.4 Begriffserklärungen - Telefonie Im folgenden werden einige Begriffe und Abkürzungen erläutert, die im Bereich digitaler Telefonnetze, Mobiltelefonie, Voice-over-IP, ISDN häufig verwendet werden. ACM Die Address Complete Message signalisiert im PSTN, dass das Routing eines Telefonanrufes erfolgt ist. Üblicherweise erhält der Anrufer in der Zwischenzeit das Rufzeichen, Ansagen wie ”The person you have called is temporarily not available”, ”This number is no longer in service” ... Ein PSTN-2-SIP Gateway muss eine solche Meldung geeignet weitergeben - durch ”early media” (definiert in RFC2543) und/oder durch 183 Session Progress. AIN Advanced Intelligent Network, siehe auch IN. ANM steht für Answer Message im PSTN. BSC Base Station Controller. BSS bezeichnet das Base Station System. Dieses besteht aus einem oder mehreren BSC. BTS Base Transceiver Station . CCI Der Call Charge Indicator ist ein ISUP Parameterfeld. CdPN Called Party Number ist ein Teil der ISUP Message. Dieses Feld enthält den NPI (Numbering Plan Indicator), beispielsweise ”E.164” und NOA (Nature of Address, z.B. ”national”). CgPN Calling Party Number ist ein weiterer Teil der ISUP Message. CPC Die Calling Party Category ist ein ISUP Parameterfeld. CSD Circuit Switched Data ist ein Begriff aus dem Bereich der GSM-Telefonnetze und bezeichnet den Standard zum Datenaustausch. Die Nutzdatenrate beschränkte sich auf maximal 9,6 kBit/s. In der GSM-Phase-2 wurde die Geschwindigkeit der Datenübertragung auf 14,4 kBit/s erhöht, in der GSM-Phase-2+ die Bündelung mehrerer Kanäle ermöglicht. DTAP Der Direct Transfer Application Part ist das Call Control Protocol zwischen MS und MSC. FCI Der Forward Call Indicator ist ein ISUP Parameterfeld. 6 KAPITEL 1. EINLEITUNG NETZWERK GPRS Der General Packet Radio Service benötigt keine eigene Infrastruktur, sondern ist lediglich eine Erweiterung der bestehenden GSM-Netze. GPRS-Mobiltelefone stellen für den schnellen Austausch der Datenpakete eine dauerhafte Verbindung zu einem Einwahlpunkt (APN = Acces Point Name) ins Netz her. Für die Datenkommunikation wird es Endgeräten erlaubt mehrere GSM-Kanäle zusammenzufassen und für die Kommunikation zu reservieren. Bandbreiten in Funknetzen haben immer ein Problem: Alle Nutzer einer Zelle teilen sich ein gemeinsames Medium. Wollen alle gemeinsam zugreifen, sinkt für jeden einzelnen die erreichbare Datenrate. n der Einführungsphase von GPRS wurde netzseitig eine Bandbreite von 53,6 kbit/s (4 Kanäle à 13,4 kbit/s) pro Funkzelle vorgesehen. Stehen alle acht Kanäle für GPRS zur Verfügung, würde die Bandbreite auf 107,2 kbit/s steigen. Weitere Steigerungen durch bessere Fehlerprotokoll erlaubten theoretische 171,2 kbit/s (acht Kanäle a 21,4 kbit/s). Mobiltelefone arbeiten momentan mit 13,4 kbit/s pro Kanal. Sie können je nach Gerät zwei bis drei Kanäle zusammenfassen. GMSC Gateway Mobile Switching Centre. GSM Global System of Mobile Telecommunication bezeichnet allgemein den weltweiten Generation 2 Standard digitalen Mobilfunks. HLR Home Location Register HSCSD High Speed Circuit Switched Data, der Nachfolger von CSD, erreicht eine maximale Datentransferrate von 57,6 kBit/s. Der Unterschied zwischen den beiden Systemen liegt in den verwendeten Protokollen und der Übertragungstechnik. Wie bei einer Telefonleitung steht bei HSCSD jedem User ein dedizierter Nutzkanal exklusiv zur Verfügung. Die Zahl der gleichzeitig aktiven Teilnehmern ist für die verfügbare Bandbreite nicht relevant und nur durch die maximale Zellkapazität (bezogen auf aktive Teilnehmer) beschränkt. IAM steht für Initial Address Message im PSTN und ist Bestandteil des ISUP. IAM entspricht der ISDN Message ”Setup” und der SIP Message INVITE. IMSI Die International Mobile Subscriber Identity ist auf der SIM-Karte hinterlegt. Sie besteht aus maximal 15 Ziffern, wobei die ersten drei Ziffern für die MCC und die folgenden zwei oder drei Ziffern für die MNC vorgesehen sind. Dabei bezeichnet MCC den Mobile Country Code und MNC (Mobile Network Code) den Betreiber des Mobilfunknetzes innerhalb eines Landes. Unterhalb des MCC ist der MNC immer einheitlich zwei oder drei Ziffern lang. Der Rest ist die MSIN, Mobile Subscriber Identification Number. Sie dient zur Identifikation eines Benutzers im PLMN. IN Intelligent Network meint in der Telco-Szene moderne digitale circuit-switched Telefonnetze, die noch großartigere Form wird mit AIN bezeichnet. Interface Anders als in paketorientierten IP-Netzwerken, wo die Einhaltung von (offenen) Protokollen und Standards eine wesentliche Voraussetzung ist, spielen im Bereich klassische Telefonie Interfaces eine große Rolle für die Signalisierung zwischen Komponenten des Netzwerks. So bezeichnet das A Interface die Verbindung zwischen MSC und BSC, Abis liegt zwischen BSC und BTS, D zwischen MSC und HLR und Um für die Funkverbindung zwischen MS und BTS. Im Bereich des ISDN bezeichnet S0 die Schnittstelle zwischen 1.4. BEGRIFFSERKLÄRUNGEN - TELEFONIE 7 NTBA und den Endgeräten, wie ISDN-Telefon oder AB-Wandler. Uk0 ist die ZweidrahtKupferschnittstelle zwischen NTBA und Vermittlungsstelle. ISDN Integrated Services Digital Network ist ein weltweiter Standard der leitungsvermittelten (circuit-switched) Telefonie. Endbenutzer haben mit dem sogenannten Basic Rate Interface (BRI) zu tun. Grosse Nebenstellenanlagen sind mittels Primary Rate Interfaces (PRI) mit dem öffentlichen Telefonnetz verbunden. ISUP Der ISDN User Part regelt die Inter-Circuit-Signalisierung von Anrufen und ist für deren Auf- und Abbau zuständig. Diese kann mittels SS7 oder alternativ mittels D-Kanal (Q.931) erfolgen. ISUP beinhaltet folgende Felder: IAM, CgPN, CdPN, USI, FCI, CPC, CCI. MSC Das Mobile Service Switching Centre ist die zentrale Schaltstelle im TelefonieNetzwerk. Es ist verbunden mit dem Radio Access Network (RAN), welches von den BTS und BSCs gebildet wird, welche wiederum das Public Land Mobile Network (PLMN) bilden. MISDN Die Mobile Station ISDN Number wird dazu verwendet Benutzer zu identifizieren, wenn Verbindungen aufgebaut werden. Sie besteht aus maximal 15 Ziffern,3 wobei die ersten eins, zwei oder drei Ziffern für den Country Code (CC) und anschliessende Ziffern für den National Destination Code (NDC) stehen. Letzterer bezeichnet üblicherweise die ”Vorwahlen” der diversen Mobilfunkanbieter. Der Rest ist dann die Subscriber Number (SN), welche den Benutzer innerhalb eines PLMN Nummernplans einsortiert. Die MISDN ist dabei nicht(!) auf der SIM gespeichert und ist nicht auf der MS feststellbar. Unabhängig davon kann sich jeder die Nummer natürlich irgendwo hin speichern, was aber für das Netz keine Auswirkungen hat. MS Die Mobile Station ist das Benutzerendgerät in Mobilfunknetzen, welches man in der Hand hält. Dieses besteht aus dem Mobiltelefon, dem Mobile Equipment (ME) und der SIM-Card. Jedes Mobiltelefon hat eine eindeutige Kennung (IMEI - International Mobile Equipment Identifier), die hardcodiert im Gerät hinterlegt ist. MSRN Die Mobile Station Roaming Number ist eine temporäre Nummer, die einer MS zugeordnet wird, wenn eine Verbindung aufgebaut wird. Dieses ist notwendig, da zwar die MISDN einen Benutzer identifiziert, aber nichts darüber aussagt, wo er sich gerade befindet. PBX Private Branch eXchange meint die Endbenutzer Vermittlungsstelle. PLMN Public Land Mobile Network. So sind GSM und UMTS Beispiele für PLMNs. GSM unterscheidet hier noch in Home PLMN (HPLMN), Visited PLMN (VPLMN) und Interrogating PLMN (IPLMN) 3 Im Gegensatz zu den bekannten IP-Adressen handelt es sich hier um aufeinanderfolgende Dezimalziffern. Das liegt an der langen Historie von Telefonnetzen, die traditionell Teilnehmern Ziffernfolgen des Dezimalsystems zuordnen. 8 KAPITEL 1. EINLEITUNG NETZWERK POTS Plain Old Telephony System bezeichnet oft die klassische ”Analog”-Teleonie über die 2-Draht-Kupferleitung. PSTN Das Public Switched Telephone Network meint das klassische System der (digitalen) Telefonie. Üblicherweise wird hierfür ISDN eingesetzt. REL ist eine ISUP Message (Release) und entspricht dem ”Release” des ISDN. RLC ist eine ISUP Message (Release complete) und entspricht dem ”Release Complete” des ISDN. SIM Subscriber Identification Module ist ein Chip (auf einem genormten Stück Plastik, das in das ME gesteckt wird), welcher den sogenannten Subscriber (Mobilfunkbenutzer) gegenüber dem GSM-Netz identifiziert. SIP Session Initiation Protocol ist ein Application Layer Protocol welches auf Basis von TCP oder UDP Session-Setup, In-Session-Info und Session-Close-Services für interaktive Dienste wie Telefonie, Video-Conferencing oder Multi-User-Games zur Verfügung stellen kann. SS7 Das Signalisierungs System (Signaling System) 7 ist ein Standard der Out-of-BandSignalisierung in digitalen Telefonnetzen. UTMS Hinter der Abkürzung Universal Mobile Telecommunications System steckt der 1998 von der ETSI (Abkürzung für European Telecommunications Standard Institute) vorgestellte Breitband-Mobilfunkstandard der 3. Generation (G3). Die Weiterentwicklung und Pflege des Standards unterliegt inzwischen dem 3GPP (3rd Generation Partnership Project). Zu den wesentlichen Leistungsmerkmale von UMTS zählt die Übertragung von Sprache und Audiodaten, die Übermittlung von multimedialen Inhalten sowie der schnelle Zugriff auf das Internet. UMTS ermöglicht Datenübertragungsraten von 364 kbit/s bis zu 2 Mbit/s, womit Streaming Video und Audio Übertragung, sowie Bildtelefonie ermöglicht werden sollen. Diese Übertragungsraten erreicht UMTS durch den asynchronen Transfermodus kurz ATM-Verfahren im sogenannten Codemultiplexverfahren. Als Funk-Technologie kommt Wideband CDMA (WCDMA) im Frequenzbereich um die 2 GHz zum Einsatz. VLR Visitor Location Register ist ein Begriff auf dem Bereich digitaler Mobilfunknetze der zweiten (GSM) und dritten Generation (UMTS). Kapitel 2 OSI-Schichtenmodell 2.1 Kategorisierungen Computernetze sind durchaus komplex aufgebaut. Nicht jede Applikation soll diese Komplexität jeweils nachvollziehen müssen. An dieser Stelle wird wiederum Abstraktion verlangt. Dies ist durchaus vergleichbar mit den Aufgaben von Betriebssystemen, welche die Hardware virtualisieren. Eine ”saubere” Trennung der Aufgaben (im Sinne der Programmierung von Schnittstellen) ist erforderlich. Sonst wären Applikationen schwer zu warten, schlecht erweiterbar und im Laufe ihrer Weiterentwicklung kaum überschaubar. Deshalb ist ein strukturierter Aufbau notwendig. Hierfür erfolgt die Vereinbarung von Protokollen und die Definition von Schnittstellen. Für die Modellierung von Netzwerken bietet das OSI-Schichtenmodell eine Orientierung. Dieses schafft eine hierarchische Aufteilung der Hardware und Programme in Module, die jedoch durchaus von sehr verschiedenen Lieferanten stammen können. 2.2 Protokollhierarchien Protokolle sind Regeln, die den Austausch von Nachrichten - oder allgemeiner das Verhalten - zwischen (Kommunikations-) Partnern regeln (”Protocols are formal rules of behaviour”). Die Verletzung eines vereinbarten Protokolls erschwert die Kommunikation oder macht sie sogar gänzlich unmöglich. Ein Beispiel für ein Protokoll ”aus dem täglichen Leben” ist z.B. der Sprechfunkverkehr: Die Kommunikationspartner bestätigen den Empfang einer Nachricht mit ”Roger” und leiten einen Wechsel der Sprechrichtung mit ”Over” ein. Beendet wird die Verbindung schließlich mit ”Over and out”. Ähnliche Protokolle werden auch beim Datenaustausch zwischen verschiedenen Computern benötigt - auch wenn hier die Komplexität der Anforderungen etwas höher ist. Aufgrund dieser höheren Komplexität werden viele Aufgabe nicht von einem einzigen Protokoll abgewickelt. In der Regel kommen eine ganze Reihe von Protokollen, mit verschiedenen Teilaufgaben, zum Einsatz. Diese Protokolle sind dann in Form von Protokollschichten mit jeweils unterschiedlichen Funktionen angeordnet. 2.2.1 Hierarchie Jede Schicht n enthält Instanzen für den Datenaustausch mit der Partnerinstanz der gleichen Schicht n in anderen Computern. Die Vereinbarungen, nach denen diese Kommunikation abgewickelt wird, nennt man das Protokoll der Schicht n. Praktisch kommunizieren die 9 10 KAPITEL 2. OSI-SCHICHTENMODELL Schichten nicht direkt miteinander, sondern jede Schicht gibt der darunterliegenden Schicht die Daten und Steuerinformationen. Man kann sich vorstellen, dass jede Schicht (bis auf die unterste Schicht, die nur für das Senden und Empfangen eines nicht formatierten Bitstroms zuständig ist) die erhaltenen Daten in einen Umschlag steckt, in dem zusätzlich Informationen für die korrespondierende Schicht auf der anderen Maschine stecken, die für die korrekte Wiederherstellung der Daten nötig sind. Auf der untersten Schicht (Schicht 1) findet die tatsächliche Kommunikation auf dem darunterliegenden Medium statt. Auf der anderen Maschine werden nun die Daten von der untersten Schicht in Empfang genommen und an die Schicht 2 übergeben. Diese öffnet den Umschlag und stellt mit den darin enthaltenen Informationen die korrekte Nachricht für Schicht 3 wieder her. Dies geschieht solange, bis die oberste Schicht erreicht ist. Diesen Satz von Schichten und Protokollen nennt man Protokollarchitektur. Das Schichtenmodell und die Protokollarchitektur, sowie die standardisierten Kommunikationsprotokolle bilden das OSI-Referenzmodell. 2.3 Motivation Der Name des Modells lautet “Open Systems Interconnection”. Dieses Referenzmodell ist als Vorschlag für die Standardisierung von Netzwerkprotokollen durch die ISO entstanden. Es wurde etwas später bzw. in gewissem Maße zeitgleich zu TCP/IP vorgeschlagen. Es sollte deshalb eher als theoretisches Konzept denn als technische Leitlinie der Entwicklung von Netzwerkschichten verstanden werden. Layer 7 Name of Unit Application Application ftp,http,smtp,pop3 6 Presentation Presentation A 5 Session 4 Transport 3 Network Session TCP, UDP, SPX, Appleshare Transport IP, IPX, Appletalk Network Packet Data link Frame Physical Bit N Ethernet-, ATM-Switch 2 Data link 1 Physical Ethernet, TokenRing, ISDN Host A Host B Real Connection Virtual Connection A User-Application N Network-Protocol Flow of Data from A to B Abbildung 2.1: OSI-Schichtenmodell Kaum ein Protokoll für Internets setzt alle Vorschläge des Schichtenmodells um. Trotzdem ist es hilfreich für die Strukturierung und Abgrenzung von Netzwerkprotokollen und zum Verständnis für die Funktion von Netzwerken. 2.3. MOTIVATION 11 Hardware (-nahe) Protokolle für LANs und WANs lassen sich mit OSI erklären und einordnen. Auch die Abbildung der Dienste der TCP/IP-Suite kann innerhalb des OSIModells erfolgen. Die Kommunikation zwischen verschiedenen Hosts läßt sich anhand von OSI gut veranschaulichen. Deshalb wird dieses durchaus immer noch erwähnt bzw. gelehrt. Die sieben Schichten entstammen folgenden Designprinzipen: • Eine Schicht sollte dort entstehen, wo ein neuer Abstraktionsgrad benötigt wird • Jede Schicht soll genau definierte Funktionen erfüllen • Bei der Funktionswahl sollte die Definition international genormter Protokolle berücksichtigt werden • Grenzen zwischen Schnittstellen so wählen, dass möglichst wenig Informationsfluß über Schnittstellen notwendig wird • Es sind so viele Schichten vorzusehen, dass keine Notwendigkeit besteht mehrere verschiedene Funktionen in einer Schicht zu implementieren Schichten von unten nach oben (d.h. ausgehend von der Hardware hoch zur Applikation) sind in der Tabelle dargestellt. # 7 Schicht Layer (engl.) Anwendungs- application - Orientiert Aufgabe Anwen-dungs- Verbindung zwischen Benutzern und deren Tätigkeiten Datenformat des Informationsaustausches Verbindung zwischen Prozessen auf verschiedenen Rechnern Zusammensetzung der Nachrichten Adressierung der Nachrichten zwischen Rechnern Beseitigung von Übertragunsfehlern durch Störungen Betrieb der Netzkarten 6 Darstellungs- presentation Anwendungs- 5 Kommunika- session tionssteuer- Anwendungs- 4 Transport- Transport- 3 Vermittlungs- network - Transport- 2 Sicherungs- data link - Transport- 1 Bitübertragungs- physical - Transport- transport - Prot. FTP TCP TCP IP Tabelle 2.1: Das OSI-Modell mit Beispiel FTP als TCP/IP-Protokoll 12 KAPITEL 2. OSI-SCHICHTENMODELL 2.4 Die einzelnen Schichten Im OSI-Modell sind die Schichten 1 - 4 transportorientiert; sie entsprechen den verschiedenen Netzwerkprotokollen, welche in der Netzwerkhardware oder im Betriebssystem implementiert sind. Die Schichten 5 - 7 arbeiten anwendungsorientiert; sie finden üblicherweise innerhalb einer Anwendung statt. Jede Schicht soll sich dabei nur der Dienste der darunterliegenden Schicht bedienen. Die Implementation ist dabei beliebig, d.h. liegt im Ermessen des Anwenders oder Netzwerkdesigners. Der Austausch von Schichten soll dabei möglich sein, wenn die neue Schicht die Funktionen der alten zur Verfügung stellt. Die Aufgaben der einzelnen Schichten lassen sich wie folgt beschreiben: 2.4.1 Bitübertragungsschicht regelt die Übertragung von ”rohen” Bits über den Kommunikationskanal. Dabei handelt es sich um einen unstrukturierten Bitstrom. Die Bitübertragungsschicht enthält die Definition, welcher elektrischer, physikalischer Zustand einer binären ”Null” bzw. einer ”Eins” entspricht. Dazu zählt beispielsweise, welche Länge ein bestimmter Zustand andauern muss oder mit wieviel Volt signalisiert wird. Weiterhin erfolgt die Festlegung, wie gross bestimmte Toleranzen sein dürfen, damit ein Signal noch interpretiert werden kann und welche Abstände zwischen verschiedenen Zuständen liegen, damit diese sauber interpretiert werden können. Weiterhin zählt dazu die Festlegung von Kabeltypen und -qualitäten (optisch bzw. elektrisch) oder die Definition von Funkstandards für drahtlose Übermittlung. Bestandteil ist weiterhin die Definition von Steckern und Buchsen, die Anzahl benötigter Adern und die full- oder halfduplex Datenkommunikation. 2.4.2 Sicherungsschicht übernimmt die Umwandlung des rohen Datenkanals der Bitübertragungsschicht in eine Leitung, welche virtuell frei von unerkannten Übertragungsfehlern ist. Dies geschieht durch die Aufteilung des Datenstroms in Frames1 . Dabei erfolgt das Setzen von Rahmengrenzen durch spezielle Kontrollbits. Weiterhin werden einfache Prüfmechanismen geschaffen z.B. durch die Einführung von CRC-Prüfsummen. Die Sicherungsschicht erlaubt weiterhin eine Datenverkehrskontrolle. Sie kann Meldungen von Überschwemmungen eines Empfängers generieren. Darüberhinaus regelt sie die Zugriffssteuerung in Broadcastnetzen. 2.4.3 Vermittlungsschicht sichert die Steuerung des Teilnetzbetriebes. Sie ist sozusagen verantwortlich für die Auswahl der Paketrouten auf dem Weg vom Ursprungs- zum Bestimmungsort. Die auftretenden Routen können statisch, d.h. fest verdrahtet sein oder dynamisch für jede Sitzung festgelegt werden. Es geht auch noch dynamischer: Für jedes Paket einer Sitzung wird eine Route generiert. Bei Überlastungen der Teilnetze mit zuvielen Paketen muss eine Engpass- bzw. Stausteuerung erfolgen. Darüberhinaus können Abrechnungsfunktionen2 in dieser Schicht implementiert sein. Die Vermittlungsschicht überwindet verschiedene Hardwareprotokolle. Sie kann Pakete in die angepaßte Größe für jedes Teilnetz umbauen. 1 anderer Name für Paket, um die Daten”häppchen” der verschiedenen Schichten unterscheiden zu können z.B. für die Paketdurchleitung; da kaum ein Anbieter jede End-zu-Endverbindung im eigenen Netz realisieren kann 2 2.5. KONZEPTE 2.4.4 13 Transportschicht ist für die Entgegennahme der Daten aus der Sitzungsschicht verantwortlich. Die Transportschicht regelt gegebenenfalls die geeignete Zerstückelung des eintreffenden Datenstromes. Diese Daten werden an die Vermittlungsschicht weitergegeben. Die Transportschicht bietet eine End-zu-End-Kontrolle der Korrektheit der Pakete und deren Reihenfolge. Dadurch erhält der Anwender einen fehlerfreien Punkt-zu-Punkt-Datenkanal. Die Transportschicht ist echte End-zu-End-Schicht, d.h. sie stellt die Ebene dar, auf der Programme Informationen miteinander austauschen können. Weiterhin erlaubt sie das Multiplexen mehrerer Datenströme, da ein Host durchaus mehrere Verbindungen unterhalten kann. 2.4.5 Sitzungsschicht soll den Benutzern an verschiedenen Maschinen erlauben, Sitzungen miteinander aufzubauen, d.h. einerseits einen gewöhnlichen Datentransport zu realisieren, aber auch zusätzliche Dienste anzubieten. Dialogsteuerungen und Tokenmanagement einiger Anwendungen könnten in der Sitzungsschicht verortet werden. Weitere mögliche Aufgaben wären die Synchronisation z.B. Recovery eines Datenstransfers nach einem längerem Ausfall. Die genannten Beschreibungen deuten bereits an, dass diese Schicht sich schwer abgrenzen läßt. 2.4.6 Darstellungsschicht realisiert Funktionen, die sich mit Syntax und Semantik der übertragenen Informationen beschäftigen. Hierzu zählt die Kodierung der Daten auf vereinbarte Weise3 . In der Darstellungsschicht erfolgt die Umwandlung spezieller Daten- und Objektstrukturen eines Rechners in die für die Netzübertragung geeignete Form. 2.4.7 Verarbeitungsschicht wird in einigen Darstellungen auch Anwendungsschicht genannt. Sie bezieht sich auf die letztendlich auf einem Host ablaufenden Netzwerk-Applikationen. Diese können z.B. eine einheitliche Terminalemulation4 umfassen, die eine Vielzahl sehr unterschiedlicher Terminaltypen darstellen kann. Damit wird anderen Programmen (und deren Programmierern) die Ausgaben von Text und die Entgegennahme von Tastatureingaben erleichtert. Weiterhin könnte die Verarbeitungsschicht den Dateitransfer über verschiedene Standards von Dateisystemen und Namenskonventionen hinweg organisieren. Diese Erörterungen lassen sich ebenso auf Email-, Webdienste etc. anwenden. 2.5 Konzepte Für den Zusammenschluss verschiedener Netze sind spezielle Hardwarekomponenten notwendig. Diese regeln die Übergänge zwischen verschiedenen Teilnetzen und Netzwerktechnologien, die sich sowohl im Medientyp, den Adressierungsschemata und den Frameformaten unterscheiden können. 3 little- oder bigendian, ASCII oder Unicode, Kodierung negativer Ganzzahlen als Einer- oder Zweierkomplement, ... 4 Mit ”Terminals” sind im heutigen Sprachgebrauch die virtuellen Nachbildungen der meist seriellen Datensichtgeräte an Workstations oder Mainframes gemeint. 14 KAPITEL 2. OSI-SCHICHTENMODELL Diese Hardwarekomponenten können wie Hosts mit mindestens zwei Interfaces aufgefaßt werden. Sie sollen sich wie ein Host5 im jeweiligen Teil-Netz verhalten, wobei die Zahl von Übergängen zwischen verschiedenen Netzwerken möglichst nicht begrenzt sein sollte. Hierfür dient der Einsatz sogenannter ”Router”. Weiterhin: • Schaffung eines Adressierungsschemas, welches hardwareunabhängig (z.B. von der Ethernetadressierung) ist • Schaffung eines virtuellen Netzes; die Netzstuktur dieses ”Super”-Netzes muss von Topologie und Ausdehnung der darunterliegenden Netze unabhängig sein • abstraktes Kommunikationssystem, .h. Soft- und Hardwarelösungen bilden eine Illusion eines gemeinsamen übergreifenden Netzes 2.5.1 Protokolle ”Protokoll” dient als gemeinsame Vereinbarung (Standard) über die Kommunikationsparameter. Es wurden verschiedene Protokolle für den genannten Aufgabenbereich geschaffen: • TCP/IP als bekanntester Vertreter dieser Gruppe, da das weltweite Internet dieses verwendet • IPX/SPX als Netzwerkprotokoll von Novell • Appletalk: Netzwerkdienst der Apple-Macintosh-Architektur • DECnet: Vernetzung von Unix-Workstations • X25: ITU-Standard für WAN-Technologien, Angebot von Telefongesellschaften Diese Protokolle besitzen Routingfähigkeit, d.h. verschiedene Netze können über spezielle Rechner (Router) miteinander gekoppelt werden. Sie bieten einen einheitlichen bzw. ”globalen” Adressraum und sind für verschiedene Netzwerkhardware verfügbar. Andere Protokolle, z.B. NetBIOS von Microsoft, sind nur im LAN einsetzbar, weil sie über kein globales Adressschema verfügen, nicht routingfähig sind und nur auf bestimmte Netzwerkhardware anwendbar sind. Mit der Ausdehnung der Firmennetze, dem Ausbruch des Rechners aus dem Rechenzentrum, der Popularisierung von Computern spielen Netzwerke eine immer größere Rolle. Deshalb wurde ein allgemein standardisiertes, nichtproprietäres Netzwerkprotokoll gesucht, welches gleichzeitig die Unabhängigkeit von bestimmten Herstellern besitzt. Betriebserfahrungen und Robustheit im Einsatz waren weitere Argumente. Die TCP/IP-Suite hat sich umfassend durchgesetzt; andere Protokolle sind nur mehr Randerscheinungen. 2.6 Einordnungen Nach dem Aufbau eines Theoriegerüstes in Form des OSI-Modells, läßt sich nun eine Einordnung der im Folgenden vorgestellten Netzwerkprotokolle in einem kurzen Ausblick vornehmen. Dabei wird sichtbar, welche Protokolle jeweils für die Umsetzung bestimmter Aufgaben benötigt werden. 5 einfaches Mitglied in einem Netzwerk 2.7. AUFGABEN 15 Ethernet, TokenRing, ADSL, ISDN oder Modem definieren in erster Linie verschiedene Typen von Bitübertragungsschichten. Sie stellen die Übertragungsstandards, was Kabel und elektrische bzw. optische Signalisierung, Verbindungslängen etc. betrifft, sicher. Sie bestimmen außerdem die Datenraten und Half- oder Fullduplex-Betrieb, sowie die Kodierung der Daten für beste Erkennung und höchste Datenraten. Weiterhin implementieren Ethernet- und TokenRing jeweils die Medienzugriffsverfahren, wie CSMA/CD oder CA6 , die der Sicherungsschicht zuzuordnen sind. MAC-Adressierung ist ebenfalls ein Konzept der Sicherungsschicht. Ethernetswitches arbeiten auf dieser und schalten virtuelle Punkt-zu-Punkt-Verbindungen auf dieser Ebene. Ethernet implementiert weiterhin Verfahren zur Congestioncontrol. Auch Korrekturverfahren, wie sie bei Modemkommunikation definiert werden, sind der Sicherungsschicht zuzuordnen. Das Internet-Protokoll läßt sich der Vermittlungsschicht zuordnen. Es übernimmt die Paketadressierung der End-zu-End-Zustellung und implementiert die Routingfunktionalitäten. IP kann dabei auf austauschbare Bitübertragungs- bzw. Sicherungsschichten zurückgreifen. Es kann über Ethernet, GPRS, ADSL, ISDN oder Modem ohne Änderungen im Protokoll arbeiten. Dabei nimmt es evtl. Paketgrößenanpassungen vor. Dies geschieht durch die Steuerung der Paketfragmentierung auf dem Weg und durch den Zusammenbau im Zielhost. Der Weg eines Paketes von Rechner A zu Rechner B durch ein Netzwerk liesse sich im OSI-Modell wie folgt veranschaulichen. Weg eines Datenpaketes von Host A zu B über einen Router Schicht 7 6 5 4 3 2 1 Host A Eth-HUB Router Switch Host B Abbildung 2.2: Weg eines Paketes durch OSI-Schichten 2.7 2.7.1 Aufgaben OSI 1. Worin unterscheiden sich das OSI- und TCP-Schichtenmodell? 6 Carrier Sense Multiple Access with Collision Detection bzw. Collision Avoidance 16 KAPITEL 2. OSI-SCHICHTENMODELL 2. Warum kann es passieren, dass einzelne Schichten vielfach nochmal unterteilt wurden? 3. Was sind Gründe um geschichtete Protokolle zu verwenden? 4. Ein System verwendet eine n-Layer Protokollhierarchie. Eine Applikation generiert eine Nachricht von der Länge N Bytes. Auf jeder Schicht wird ein H Byte langer Header angefügt. Welcher Anteil der Netzwerkbandbreite wird allein durch die Headerinformation belegt? 5. Welche OSI-Schicht handelt die folgenden Aufgaben ab: a) Aufteilung des zu übertragenden Datenstroms in Frames und b) festzustellen, welche Route durch das Netzwerk benutzt werden soll? 2.7.2 Netzwerke 1. Was sind die wesentlichen Unterschiedungen von packet-switching und circuit-switched Networks? 2. Wodurch kommen Ende-zu-Ende-Verzögerungen zustande? Woraus setzt sich die Gesamtverzögerung zusammen? Annahme: Pakete bewegen sich entlang einer festgelegten Route. Kapitel 3 LAN Hardware 3.1 Ethernet Die in LANs am weitesten verbreitete Hardware ist im allgemeinen unter dem Namen Ethernet bekannt. Es umfaßt die Schichten 1 und 2 des ISO/OSI-Modells. Ethernets sind in der Installation relativ günstig, was, zusammen mit Übertragungsraten von bis zu 1000 Megabit pro Sekunde, zu seiner starken Popularität gesorgt hat. ISO/OSI IEEE 802.3 reference model Application Presentation Session Upper-layer protocols Transport Network MAC-Client Data Link Media Access (MAC) Physical Physical (PHY) IEEE 802-spcific IEEE 802.3-spcific Media-specific Abbildung 3.1: Ethernet im OSI-Schichtenmodell Ein Nachteil der Ethernet-Technologie ist die begrenzte Länge der Kabel, was die Verwendung auf LAN’s (Local Area Network) beschränkt. Allerdings kann man aber mehrere Ethernet-Segmente miteinander verbinden, indem man sogenannte Repeater, Bridges oder Router verwendet. Repeater kopieren einfach die Signale zwischen zwei oder mehreren Segmenten, was bedeutet, dass alle Segmente zusammenarbeiten, als wäre es ein einzelnes Ethernet. Aufgrund der Timing-Anforderungen dürfen zwischen zwei Hosts im Netzwerk nicht mehr als vier Repeater verwendet werden. Bridges und Router sind da schon etwas aufwendiger. Sie analysieren die eingehenden Daten und leiten sie nur dann weiter, wenn sich der empfangende Host nicht im lokalen Ethernet befindet. Ethernet arbeitet wie ein Bus-System, bei dem ein Host die Pakete (oder Frames) mit einer Größe von bis zu 1500 Byte an einen anderen Host in demselben Ethernet übertragen kann. Ein Host wird dabei über eine sechs Byte lange Adresse (MAC) angesprochen, die in die Firmware der Ethernet-Karte fest eingetragen ist. Diese Adressen werden von der FCC in den USA zugeteilt. Die Sequenz von zweistelligen Hexadezimalzahlen, die jeweils durch Doppelpunkte voneinander getrennt werden, kennt inzwischen fast jeder, der mit 17 18 KAPITEL 3. LAN HARDWARE Transmission order: left-to-right, bit serial FCS error detection coverage FCS generation span PRE SFD DA SA 7 1 6 6 Field length in bytes Length/Type 4 Data 46 Pad - 1500 FCS 4 Abbildung 3.2: Aufbau des Ethernet-Headers Netzwerken zu tun hat. Ein Ethernet-Header beginnt mit einer 64 bit (8 octets) langen Sequenz aus Nullen und Einsen um ein Paket einzuleiten. Dieses ist zur Synchronisation der angeschlossenen Geräte und zur Collision Detection erforderlich. Die ersten sieben Bytes besitzen jeweils einen Wert von 10101010 während das letzte Byte mit dem Wert 10101011 das Ende der Präambel ankündigt. Es folgen die Ziel und Quelladresse (jeweils 6 octets lang) und die Art des darüberliegenden Protokolls (kodiert in 2 octets). Nach den minimal 46 und maximal 1500 Byte Daten schliesst sich eine Prüfsumme (4 octets lang). Unterschreitet eine Datagrammgröße 46 Bytes, so muss mit Zusatz-Bits erweitert werden. Die Vermittlungsschicht verwendet das Längen-Feld im Header, um die Füllbits zu erkennen. Durch das CRC-Feld wird überprüft, ob irgendwelche Bits im Rahmen durch äußere Einflüsse (z.B. Dämpfung der Signalstärke, elektromagnetische Umgebungsstörungen, usw.) gekippt (komplementiert) wurden. Der Client berechnet den Wert des CRC-Feldes aus den übrigen Bits im Rahmen einschließlich der Präambelbits. Der Server wendet auf die empfangenden Bits im Rahmen dieselbe Berechnung an (CRC-Prüfung) und überprüft damit den vom Client eingetragenen Wert. Ethernet arbeitet nach dem CSMA/CD-Verfahren, was ”Carrier Sense Multiple Access/Collision Detection” bedeutet. Bevor eine Datenübertragung beginnt, wird der Zustand des Netzes von der sendewilligen Station überprüft. Jede Station darf immer dann senden, wenn in diesem Moment keine andere Station Daten überträgt. Deshalb kann jede Station simultan horchen und senden. Ein von einem Rechner ausgesandter Frame wird von allen vorhandenen Rechnern registriert, aber nur der Ziel-Host liest das Paket und verarbeitet es. Hierin liegt ein Sicherheitsproblem von Ethernet, weil ein Rechner einfach alle im Netz kursierenden Frames untersuchen kann. Eine sendende Station überprüft - zur Sicherstellung, dass sie alleine sendete - ob das gesendete Signal gleich dem empfangenden ist. Sollte dies nicht der Fall sein, so verschickt die Station ein Störsignal (Jam-Sequence), um allen anderen Stationen zu signalisieren, dass eine Kollision stattfand. Anschliessend stellt sie das Senden ein. Die andere gleichzeitig sendende Station registriert dieses Signal und stellt ebenfalls das Senden ein. Der nächste Sendeversuch erfolgt zeitversetzt um einen Zufallsfaktor, damit ein weiteres Zusammentreffen von Paketen vermieden wird. Befindet sich jedoch eine sehr hohe Last auf dem Netzwerk, so wird - aufgrund dieses Verfahrens zu Kollisionsbehebung - der Datendurchsatz dieser Netzwerktechnologie stark eingeschränkt. Moderne Netzwerkkomponenten wie Switches reduzieren das Sicherheitsund Kollisionsproblem, in dem sie zum einen die Datenpakete nur noch an dem Port zur Verfügung stellen, an dem eine bestimmte MAC anliegt (hierzu haben diese Geräte übli- 3.1. ETHERNET 19 cherweise einen Speicher von 1000 - 8000 MAC-Adressen) und zum anderen wird per Store&Forward das Zusammentreffen von Paketen vermeiden. 3.1.1 Ethernet-Adapter Die Protokolle sind in einen sogenannten Adapter, welcher auch als Netzwerkschnittstellenkarte bekannt ist und der mit einem ROM sowie mit einem DSP-Chip versehen ist, implementiert. Ein Adapter ist eine halbautonome Einheit. Er besitzt eine eigene feste Adresse, MAC-Adresse (Media Access Controll), welche bei der Herstellung in das ROM des Adapters fest eingebrannt wird. Diese Adresse ist sechs Bytes lang und wird normalerweise in hexa-dezimaler Notation ausgedrückt. Somit leitet die Vermittlungsschicht des sendenden Clients Datagramme an den Adapter der Sicherungsschicht weiter, während dieser dann die Erweiterung des Ethernet-Headers übernimmt und den so entstandenen Rahmen auf der Kommunikationsleitung überträgt. Der Adapter des empfangenden Servers extrahiert dann die Datagramme aus den Rahmen und leitet sie nach der Überprüfung auf Fehler gegebenenfalls an die Vermittlungsschicht weiter. Der Adapter besitzt die Freiheit einen Rahmen zu verwerfen, falls er feststellt, dass dieser fehlerhaft ist, ohne die oberen Schichten informieren zu müssen. Ein wesentlicher Grund dafür, warum man auf der Sicherungsschicht MAC-Adressen und keine gewöhnliche IP-Adressen verwendet, ist, dass dann die Adapter kaum andere Protokolle der Vermittlungsschicht (z.B. IPX, DECNet) unterstützten könnten und somit ihre Flexibilität verlieren würden. Adressauflösungsprotokolle wie ARP, dienen den Sende-Adaptern, aus den Ziel-IPAdressen die MAC-Adressen der entsprechenden Empfangs-Adapter zu ermitteln. Es ist zu erwähnen, dass ARP nur die IP-Adressen in MAC-Adressen auflöst, deren Hosts sich im gleichen LAN befinden. 3.1.2 Koaxialkabelbasierte Netze für 10 MBit max. 30 Stationen pro Segment PC 1 TERM CHEAPER-NET 50Ohm 2,5m 10Base2 max. 100 Stationen pro Segment TERM 50Ohm PC 2 WS 1 WS 2 MAUI YELLOW-CABLE max. 4 Repeater 185m WS 3 TERM 50Ohm T-Connector Repeater TERM 50Ohm 10Base5 500m Abbildung 3.3: Regeln in BNC-Netzen Thin Ethernet, Cheaper Net oder auch BNC bezeichnet die inzwischen veraltetete Vernetzung mittels 50 Ohm abgeschirmten Koaxialkabel (wie beim Rundfunk; Verbindungsstücke und -kupplungen sind in BNC-Technik ausgeführt. Die Enden müssen mit Endwiderständen ”terminiert”, d.h. abgeschlossen werden.). Diese Topologie ist preiswert und recht einfach; neue Knoten sind mit geringem Aufwand einzufügen. Die Nachteile liegen jedoch in der primitiven Technik und seiner Empfindlichkeit. Die Unterbrechung des Kabels an einer Stelle führt zum Ausfall des ganzen Netzwerk(-segment)es. Bezeichnet wird dieser Standard mit 10Base2. Mittels Cheapernet können bis zu 185 m überbrückt werden. Der ursrpüngliche Standard 10Base5 basiert auf dickerem Koaxialkabel, wobei die Anschlüsse 20 KAPITEL 3. LAN HARDWARE der Endgeräte mittels Transceiver erfolgte. Hiermit sind bis zu 500 m Gesamtlänge erreichbar. 3.1.3 Twisted-Pair-basierte Verkabelungen 10/100 Mbit Twisted Pair Kabel mit 10/100 Mbit verwendet vier Kupferadern, die paarweise verdrillt sind. Die maximale Segmentlänge liegt hier bei 100 m. Bei mehr als zwei Rechnern ist nun üblicherweise zusätzliche Hardware notwendig, die als ”Hub” bezeichnet ist. Die Verkabelung erfolgt sternförmig zum HUB und erlaubt die einzelne Segmentierung (Abschaltung) eines Rechners, falls es zu Fehlern auf dem Kabel kommt. Im 8-adrigen Kabel bzw. auf der 8-poligen Anschlussdose werden üblicherweise die Kabelpaare 1,2 und 3,6 verwendet. Möchte man zwei Rechner direkt mittels TP-Kabel verbinden, muss dieses gekreuzt sein, damit Empfangs- und Sendeanschlüsse entsprechend miteinander verbunden werden. Diese Aufgabe wird üblicherweise von einem Hub bzw. Switch übernommen. Eine andere Möglichkeit ist die beiden Rechner mit einem “CrossConnenct-Kabel” zu verbinden. Damit Endgeräte und Netzwerkkomponenten mit unterschiedlichen Übertragungsraten in einem Netz betrieben werden können, sind Komponenten, die 100 Mbit transferieren können, mit einem Media Independent Interface (MII) ausgestattet. Dieses handelt beim Aufbau der Verbindung die Übertragungsrate, sowie den Verbindungsmodus (Voll- oder Halbduplexbetrieb) aus. 3.1.4 1000 Mbit Für Ethernetverbindungen mit 1000 Mbit (Gigabit) benötigt man vier verdrillte Kupferadernpaare. Das hat zur Folge, dass ältere Kabel aufgrund ihrer Beschaltung und elektrischen Eigenschaften nicht mehr genutzt werden können. Gigabitnetzwerkkomponenten verfügen analog zu 100 Mbit Geräten über ein Gigabit Media Independent Interface (GMII), welches die Aushandlung der Verbindungsart vornimmt. Auf diese Weise können ältere Geräte weiterhin in einem solchen Netz betrieben werden. Das GMII ist in der Lage automatisch zwischen gekreuzten und ungekreuzten Kabelverbindungen zu unterscheiden und die Verbindung entsprechend zu schalten. 416 byte for 1000Base-X 520 byte for 1000Base-T PRE SFD DA SA Length/Type 7 1 6 6 Field length in bytes 4 Data 46 Pad - 1500 FCS Extension 4 Abbildung 3.4: Erweiterungen des Ethernet-Standards für Gigabit 3.1.5 Ethernet unter Linux Die durchschnittliche vernetzte Linux-Maschine hängt an einem Ethernet. Für mobile Endgeräte wie Laptops oder Tablet-PC gilt, dass dieses noch nicht einmal die ganze Zeit der Fall sein muss. Wenn auch Ethernets zu den fehlerfreiesten Netzwerken zählen, so müssen trotzdem nicht immer alle Komponenten problemlos miteinander kooperieren. Klappt die Aushandlung der Verbindungsgeschwindigkeit beispielsweise zwischen älterer Switch und billigem Netzwerkadapter nicht, kommt kein Datenaustausch zustande. 3.1. ETHERNET 21 Weniger dramatisch ist eine Netzwerkkarte im Fullduplex-Mode an einem Hub. Hier leidet die Verbindungsqualität unter Umständen heftig, wegen der ausgeschalteten Kollisionserkennung der Netzwerkkarte. Als Ergebnis beobachtet man Datenraten durchaus weit unter der nominellen Schnittstellengeschwindigkeit. An dieser Stelle setzen Programme wie ethtool, mii-diag oder die Toolsuite ”nictools” an. Man als Systemadministrator ethtool eth0 aufruft, erhält man einen umfassenden Überblick zum Ethernet-Interface eth0. Hierzu gehören die unterstützten InterfaceGeschwindigkeiten, die aktuell benutzte Geschwindigkeit, der Duplex-Status, welche Art des Mediums angeschlossen ist, ob ein Link besteht und weiteres. Wenn es Probleme mit der automatischen Aushandlung der Parameter gibt, lässt sich diese ausschalten: s02:~ # ethtool -s eth0 autoneg off s02:~ # ethtool -s eth0 speed 10 s02:~ # ethtool -s eth0 duplex half Anschliessend kann die Geschwindkeit und die Art des Links manuell eingestellt werden. Das Ergebnis der letzten beiden Kommandos sorgt für eine Netzwerkverbindung in der Qualität des alten BNC-Ethernets - 10 Mbits half duplex. Unterstützt die Netzwerkkomponente Hub oder Switch die Anzeige der Geschwindigkeit, kann man die Änderung der Parameter dort nachvollziehen. Nach der Wiedereinschaltung der ”Autonegotiation” reicht ein kurzes Ziehen und Wiedereinstecken des Kabels, um wieder die alten Parameter vor dem Experiment zu erhalten. Die Einstellungen kann ein Admin natürlich auch Schritt-für-Schritt in der Kommandozeile vornehmen, indem er die eben gezeigten Befehle umkehrt. Ein gezogenes Kabel quittiert ethtool mit der Meldung ”Link detected: no”. Ähnliche Informationen liefert auch mii-diag. hermes:~ # mii-diag eth0 Basic registers of MII PHY #1: 1000 796d 0020 6162 05e1 41e1 0005 2001. The autonegotiated capability is 01e0. The autonegotiated media type is 100baseTx-FD. Basic mode control register 0x1000: Auto-negotiation enabled. You have link beat, and everything is working OK. Your link partner advertised 41e1: 100baseTx-FD 100baseTx 10baseT-FD 10baseT. End of basic transceiver information. ethtool kann bei einer Reihe von Netzwerkkarten, beispielsweise einigen Onboard ViaRhine, dazu verwendet werden, Wake-on-LAN einzuschalten. Dieses erreicht man durch ethtool -s eth0 wol g. Der Parameter ”g” steht für ”Wake on MagicPacket”. Einen solchen Weckruf kann das Programm ether-wake erschallen lassen. ether-wake 00:10:20:30:40:50 schickt ein geeignet formatiertes Ethernet-Frame an die angegebene MAC-Adresse. Es gibt eine ganze Reihe weiterer Programme, die solche Pakete schicken können, auch über Router hinweg. Möchte man permanent den Link-Status überwachen, weil man beispielsweise nicht zum Ablesen der LEDs an der Karte auf die Rechnerrückseite krabbeln will, können hier die Nic-Tools weiterhelfen. So überwacht beispielsweise für eine SMC Epic100-Karte (83c170) ”epic-diag -mm” permanent ob ein Kabel angeschlossen ist oder ein Link zu einer anderen Netzwerkkomponente besteht. Die Diag-Tools - der Name beginnt immer mit der Netzwerkkarte oder dem Chip - können weitere Informationen, beispielsweise über den Inhalt des Konfigurations-EEPROMs oder Device-Register ausgeben: via-diag -e oder rtl8139-diag -a. 22 KAPITEL 3. LAN HARDWARE 3.2 Funk-Netze Drahtlose lokale Kommunikationssysteme, sogenannte Wireless LANs, finden bei zunehmender Produktvielfalt eine immer grössere Verbreitung. Sie basieren üblicherweise auf Funk als Übertragungsweg. Lokale Funknetze können eine effiziente Alternative zu aufwendigem Verlegen von Kabeln darstellen. Eine Ad-hoc-Vernetzung per Funk erlaubt den spontanen und mobilen Datenaustausch. Kabellose Eingabegeräte erhöhen den Bedienkomfort von Computern. Mit heute verfügbarer drahtloser Technik sind eine ganze Reihe von Mobilitätsansprüche der Nutzer von IT-Technik realisierbar. Die wichtigsten technischen Systeme hierzu sind z.Z. WLAN (IEEE 802.11) und Bluetooth-Module (IEEE 802.15). Funknetze sind komplexer im Zugriff als drahtgebundene LANs. Die begrenzte Reichweite der einzelnen Teilnehmer und Stationen verhindern, dass ein übergreifendes Signalerkennen möglich ist oder stark erschwert wird. Zusätzlich soll eine Bewegung zwischen verschiedenen Zellen ermöglicht werden. Diese Fähigkeit von Netzen wird als Roaming bezeichnet. Um die beschriebenen Probleme in den Griff zu bekommen, wird ein MAC-SublayerProtokoll implementiert. Damit wird ein einheitliches Netz über verschiedene Sender möglich. Ein naiver Ansatz wäre Verwendung des CSMA/CD-Verfahrens, wie es beim drahtgebundenen Ethernet geschieht. Jedoch hört 3 nichts bei einem Transfer zwischen 1 & 2 und könnte zu 2 übertragen wollen. Die Leitung scheint frei zu sein, obwohl gesendet wird. Diese Situation wird als ”Hidden Station Problem” bezeichnet. Es tritt weiterhin folgende Schwierigkeit auf: Bei einem Datentransfer von 2 zu 1 denkt 3, dass Zelle blockiert ist und unterläßt einen gleichzeitigen Transferversuch zu 4, obwohl dadurch keine gegenseitige Störung auftreten würde. Auf diese Weise wird Bandbreite verschenkt: ”Exposed Station Problem”. Deshalb wird ein neues Zugriffsverfahren eingeführt. MACA(W) bezeichnet Multiple Access with Collision Avoidance. Bei diesem Verfahren wird vor dem eigentlichen Datentransfer ein kurzes Testsignal mit der Bezeichnung RTS (Ready To Send) gesendet. Mit diesem Signal erfolgt die Ankündigung des großen Datenblocks. Die Zielstation antwortet mit einem CTS (Clear To Send). Reichweite von 1 3 1 RTS 2 4 3 1 5 CTS 2 4 5 Reichweite von 2 MACA (W) Zugriffsverfahren für WLAN Abbildung 3.5: Sichtbarkeitsproblem Alle Stationen, die ein RTS-Signal hören, müssen in der Zwischenzeit ”schweigen”. Es gibt eine Optimierung des Protokolls, die mit MACAW bezeichnet wird. Folgende wichtige Standards regeln die Implementierung drahtloser Netzwerke: • 802.11a bis 54 Mbit/s im 5 GHz Band • 802.11b derzeitige Implementation bis 11 Mbit/s 3.2. FUNK-NETZE 23 • 802.11g bis 54M bit/s jedoch im 2,4 GHz Band Mit dem derzeitig verfügbaren Standard sind bei 11 Mbit/s nominaler Übertragungsrate aufgrund von Protokolloverheads real ca. 6 Mbit/s erreichbar. Verwendet wird das für Forschung, Medizin und private Zwecke freigegebene Frequenzband bei 2,4 GHz. Die Leistung der verwendeten Geräte, Access-Points, Netzwerkkarten oder Repeater darf maximal 100 mW betragen. Die Reichweiten liegen indoor je nach Gebäudebeschaffenheit bei 30 bis 100 m. Im Freien sind bei Sichtkontakt 300 bis 500 m und mit Antenne verstärkt bis zu mehreren Kilometern überbrückbar. Ein Funknetz kann in verschiedenen Modi aufgebaut werden: AdHoc, Managed, Master, AccessPoint. Hiervon hängt ab, ob die Netzwerkkarten auf eine feste Frequenz eingestellt werden müssen oder sie nach einem gemeinsamen Kanal suchen. Beim AccessPoint-Modus übernimmt der AccessPoint die Steuerung der Verbindung. Der 802.11g Standard versucht bis zu 54 Mbit/s noch im 2,4 GHz Band zu realisieren, weiterhin gibt es herstellereigene Zwischenstandards bis 22 Mbits/s, die derzeitig auf dem Markt auftauchen und meistens nicht untereinander kompatibel sind. Die WiFi-Zertifizierung kennzeichnet Geräte, die nach den gegebenen Standards interoperabel sind. Erreicht werden die höheren Bandbreiten durch Kanalbündelung, womit insgesamt weniger Kanäle für verschiedene Netze zur Auswahl stehen. Die Aufteilung des zur Verfügung stehenden Frequenzspektrums erfolgt auf bis zu 13 Kanäle1 Bei einem engmaschigem Netz von AccessPoints ist eine geschickte Kanalaufteilung notwendig, um Signalstörung oder Auslöschung zu vermeiden. Mehrere AccessPoints können in einem Bereich betrieben werden, wenn ihre Kanäle weit genug auseinanderliegen. Alle Bandbreitenangaben beziehen sich auf ein ”Shared Medium”, d.h. bei steigender Teilnehmerzahl steht dem einzelnen eine niedrigere Datenrate, vergleichbar mit Ethernet über Koaxialkabel, zur Verfügung. Die nutzbare Bandbreite hängt also von den Teilnehmern pro Funkzelle ab. Es ist jedoch möglich mehrere Zellen parallel zu betreiben. Die Kennung erfolgt über die sechsstellige MAC, mit dieser erfolgt auch die Anmeldung an den AccessPoints. 2,4000GHz 2,4835GHz 1 2 3 4 5 6 7 8 9 10 11 12 13 Kanalbelegung und evtl. Überschneidung beim WLAN (802.11b) Abbildung 3.6: Kanalaufteilung 1 Die Verteilung ist in verschiedenen Ländern unterschiedlich, so dass nicht immer alle Kanäle genutzt werden dürfen. 24 KAPITEL 3. LAN HARDWARE Ein wesentliches Problem haben WLANs gegenüber ihren drahtgebundenen Pendents; sie sind sehr offen. Deshalb muss eine ganz andere Absicherung als bei drahtgebundenen Netzen erfolgen. Zur Sicherung der Verbindung wurde WEP (WiredEquivalentPrivacy) eingeführt. Es arbeitet mit 64 bzw. 128 Bit Schlüsseln. Diese sind jedoch nicht unproblematisch: Sie besitzen einen Klartext-Initialisierungsvektor (24 bit), der jeder Nachricht voransteht. Damit ist der WEP-Key nur noch 40 bzw. 104 Bit lang. Die Einfachheit der Konfiguration von WLANs bringt weitere Probleme mit sich: Die AccessPoints arbeiten meistens sofort und ohne voreingestellte Absicherung. Zusätzlich werden meistens DHCP-Server für sich anmeldende Geräte betrieben, die meist so konfiguriert sind, dass jeder Host eine Adresse erhält. Deshalb gibt es inzwischen eine Art Volkssport: WarDriving (oder WarChalking - Suchen nach offenen WLAN-Netzen). 3.3 TokenRing TokenRing wurde von IBM entwickelt und ist heutzutage nur noch in alten Netzen im Einsatz. Im Gegensatz zu Ethernet kreist zur Zuteilung der Sendeerlaubnis ein ”Token”, welches dem Netzadapter - der im Besitz dieses Tokens ist - erlaubt Pakete zu verschicken. So kommt es nicht zu Kollisionen und die Bandbreite des Netzes (üblicherweise 4 oder 16 Mbit) kann auch mit einer grösseren Zahl von Maschinen besser ausgenutzt werden, als im ungeswitchten Ethernet. Die Verzögerungszeiten in einem TokenRing liegen üblicherweise unter 250 ms. In der Regel berechtigt der Besitz des Tokens nur zur Sendung eines Blocks (non exhaustive). Im anderen Extremfall könnte auch definiert werden, dass die Station soviele Datenblöcke senden kann, wie sie möchte (exhaustive). Damit könnte aber eine Station, die den Token besitzt, alle anderen dominieren. Normalerweise wird deshalb nur ein Block gesendet. Außerdem wird die Dauer der Sendeberechtigung befristet (Token Holding Time, z.B. 10 ms). Solange das Netz fehlerfrei funktioniert, stellt Token-Ring ein sehr einfach zu bedienendes Verfahren dar. Komplexer sind die Aufgaben beim Initieren des Netzes und bein Ein- oder Auskoppeln von Stationen. TokenRing ist das einzige Netz mit aktiven Stationen, die aus Eingabe- und Ausgabeeinheit bestehen. Grundsätzlich sind alle Stationen gleichberechtigt, jedoch übernimmt eine von ihnen als ”aktiver Monitor” besondere Überwachungsaufgaben im Netz. Eine andere Station überwacht als ”passiver Monitor” den aktiven Monitor und kann gegebenenfalls dessen Aufgaben übernehmen. Die Aufgaben des aktiven Monitors sind: • Erzeugen des Ringtaktes • Überwachen des Tokens (Neuen Token erzeugen, falls er verloren geht; Verhindern mehrerer Tokens) • Unterbinden permanent kreisender Blöcke oder Tokens erhöhter Priorität. (Generell: Ring säubern durch Senden eines “Purge Ring Frame” an alle Stationen und Erzeugen eines neuen Frei-Tokens). • Verhindern, dass mehrere Monitore aktiv sind. • Verzögerung des Token-Rahmens um 24 Bit-Zeiten (die Länge des Token-Rahmens beträgt 24 Bit). Auch bei extrem kleinem Ring wird so sichergestellt, dass eine Station den Token-Rahmen vollständig senden kann, bevor sie ihn wieder empfängt. In regelmäßigen Abständen sendet der aktive Monitor einen “Active Monitor Present Frame” an alle Stationen im Ring. Gleichzeitig wird dadurch eine Prozedur in Gang gesetzt, 3.3. TOKENRING 25 die allen Stationen die Adresse des jeweiligen Vorgängers im Ring liefert (NAUN = Nearest Active Upstream Neighbour) - eine Information, die nur im Fehlerfall wichtig ist. Ein Fehler auf Empfangsseite bedeutet, dass der eigene Empfänger oder der Sender des NAUN defekt ist. Die Auswahl des aktiven Monitors geschieht per “Claim-Token Process” durch: • den derzeit aktiven Monitor, wenn dieser Probleme bei der Durchführung seiner Aufgaben hat, • einen passiven Monitor, wenn der aktive Monitor nicht korrekt arbeitet (z.B. Timeout auftritt). • eine neu eingegliederte Station, wenn diese das Fehlen des aktiven Monitors feststellt. Token-Ring-Netze werden normalerweise als Stern-Ring-Verbindungen mit passiven Ringleitungsverteilern aufgebaut. In den Ringleitungsverteilern befinden sich Relais (die von den Stationen gesteuert werden); sie dienen der Eingliederung von Stationen und der Schaltung von Ersatzringen bei Defekten. Die Eingliederung einer Station erfolgt in fünf Schritten: 1. Ist ein Adapter vom Ring getrennt, sind gleichzeitig Eingangs- und Ausgangsleitung kurzgeschlossen. Es erfolgt zunächst ein Adaptertest. Nach dem Test versorgt der Adapter die Relais mit Strom und wird in den Ring eingegliedert. 2. Die Station hört nun den Ring ab. Wenn sie innerhalb einer festgelegten Zeit keine Aktivität des aktiven Monitors wahrnimmt, startet sie den Prozeß zur Auswahl des aktiven Monitors. 3. Durch Aussenden eines ”Duplicate Address Test Frame” prüft die Station die Eindeutigkeit ihrer Adresse. Ist sie nicht eindeutig, koppelt sich die Station wieder ab. 4. Durch den NAUN-Prozeß erfährt die Station die Adresse ihres Vorgängers und ist nun ins Netz eingegliedert. 5. Von den Voreinstellungen abweichende Parameter können nun bei einer Server-Station abgefragt werden, sofern dies nötig ist. Die Funktionen von Monitor und von den eingegliederten Stationen müssen nicht nur einmalig initiiert, sondern auch ständig überwacht werden. In vielen Fällen sind dies zahlreiche Aktionen, die auch viele Blöcke auf dem Netz zur Folge haben und in deren Verlauf auch Fehler- und Ausnahmebedingungen auftreten können. Der Nachteil von Token-Ring liegt darin, dass beim Ausfall einer Station oder bei Kabeldefekten das Netz unterbrochen wird. Wird die defekte Station hingegen abgeschaltet, so schalten die Relais im Ringleitungsverteiler die Leitung durch. Token Ring ist genormt nach IEEE 802.5. Jede Station empfängt, liest und sendet die auf dem Ring zirkulierenden Daten. Dabei gibt sie im allgemeinen nach dem Lesen die jeweilige Nachricht an die Nachbarstation weiter. Jedes Paket enthält die Adresse des Senders (SA) und die Zieladresse (DA). Wenn die Zieladresse mit der eigenen Adresse übereinstimmt, wird die Nachricht in den lokalen Speicher kopiert. Dies wird der lokalen LLC-Komponenete (Logical Link Control) gemeldet, und es wird ein Quittierungsfeld- oder Fehlerfeld entsprechend verändert. Anschließend wird diese Nachricht an die Nachbarstation weiter gesendet. Die sendende Station entfernt die von ihr gesendete Nachricht und interpretiert die Quittierungsfelder. Um Senderecht zu erhalten, muß jede Station das Token erhalten. Dies kann von jeder Station mit einer entsprechenden Priorität vorab reserviert werden: 26 KAPITEL 3. LAN HARDWARE Priorität 0 1-3 4 5,6 7 Anwendung frei verfügbar, von den meisten Anwendungen verwendet frei verfügbar von Bridges verwendet reserviert, jedoch nicht verwendet für die Administration des Ringes verwendet Tabelle 3.1: Prioritätslevel bei TokenRing Nur die Station mit der höchsten reservierten Priorität erhält somit das Senderecht. Diese Prioritäten, zusammen mit der festgelegten maximalen Umlaufzeit eines Paketes, ermöglichen eine garantierte Datenübertragung kontinuierlicher Medientypen. 3.4 Netzwerk-Interfaces von Linux Auf irgendeine Weise müssen Netzwerkdatenpakete in eine Linuxmaschine hineinkommen oder diese verlassen können. Dies geschieht über sogenannte Netzwerk-Interfaces. Durch den Namen des Interfaces wird meistens die Art der Verbindung oder der verwendeten Netzwerkhardware spezifiziert. Anders als bei anderen Unixes verwendet Linux für alle Ethernet-Interfaces die Bezeichnung ethN. Das ”N” ist eine natürliche Zahl zwischen ”0” für das erste Interface und ”n-1” für die letzte Netzwerkkarte, die in eine Maschine eingebaut ist. Ein Rechner kann durchaus über etliche Interfaces auch von verschiedenen Typen verfügen. Die Verfügbarkeit eines bestimmten Interfaces hängt meistens von einem Kerneltreiber ab. Mit dem Laden des entsprechenden Moduls für einen TokenRing, Ethernet oder ähnliche Adapter steht sodann das entsprechende Interface zur Verfügung. Dabei hängt die Reihenfolge der Nummerierung von der Reihenfolge des Modul-Ladens oder der automatischen Erkennung des Linux-Kernels ab. TokenRing-Adapter stellen nach dem Laden der entsprechenden Kernelmodule ein Netzwerkinterface vom Typ tr0 und folgende für weitere Adapter dieser Art bereit. Ähnliches geschieht bei den entsprechenden Modulen für ATM, FDDI und andere Netzwerkhardware. Eine Besonderheit ist das Loopback-Interface, welches mit dem Einschalten der TCP/IP Unterstützung, im Kernel automatisch zur Verfügung steht. Es wird mit lo bezeichnet und existiert nur in einfacher Ausführung. Weiterhin gibt es eine Reihe von Software-Interfaces, wie ppp0 für PPP-Verbindungen verschiedener Art, slip0 für Serial-Line-IP, dummy0 für Testzwecke, ipsec0 für IPsec-Verbindungen und weitere. dirk@linux:~/kurs> /sbin/ifconfig cipcb0 Link encap:IPIP Tunnel HWaddr inet addr:192.168.2.2 P-t-P:192.168.2.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MTU:1442 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) eth0 Link encap:Ethernet HWaddr 00:02:B3:87:53:43 inet addr:132.230.9.124 Bcast:132.230.9.255 Mask:255.255.255.0 inet6 addr: fe80::202:b3ff:fe87:5343/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5323418 errors:0 dropped:0 overruns:0 frame:0 TX packets:6567650 errors:0 dropped:0 overruns:1 carrier:0 collisions:0 txqueuelen:100 3.5. AUFGABEN 27 RX bytes:795523375 (758.6 Mb) TX bytes:2554637681 (2436.2 Mb) Interrupt:10 Base address:0xec00 Memory:dffff000-dffff038 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:8401120 errors:0 dropped:0 overruns:0 frame:0 TX packets:8401120 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:802796349 (765.6 Mb) TX bytes:802796349 (765.6 Mb) vmnet8 Link encap:Ethernet HWaddr 00:50:56:C0:00:08 inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fec0:8/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:4297 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Mit dem Kommando ifconfig erhält man z.B. obige Ausgabe, welche ein Interface für CIPE (cipcb0 ), ein klassisches Ethernet-Interface (eth0 ), das Loopback-Interface (lo) und ein virtuelles Ethernet-Interface für die Software VMware (vmnet8) als konfiguriert anzeigt. Die angezeigten Zusatzinformationen variieren in Abhängigkeit vom Interface-Typ. Die Maximum Transfer Unit (MTU) hängt von der darunterliegenden Netzwerkhardware ab und liegt, z.B. im Ethernet bei 1500 Byte. Das Loopback-Interface, welches nur in Software auf der Maschine selbst stattfindet, kann in einer Einheit bis zu 16 kByte übertragen. Hardwaredaten, wie verwendeter Interrupt und Speicherbereiche findet man natürlich nur bei Interfaces, die direkt mit einer Hardware zu identifizieren sind. 3.5 Aufgaben 3.5.1 Ethernet 1. Welche Medien verwenden die Ethernet-Standards 10Base2, 100BaseTX und 10Base5? 2. Was versteht man unter ”promiscuous mode”? Was heisst dieses speziell in Ethernets? 28 KAPITEL 3. LAN HARDWARE Kapitel 4 WAN Hardware 4.1 Einleitung Der Begriff Internet hat heute einen festen Platz in fast jedermanns Wortschatz. Die Entdeckung des Internets beeinflusst das Leben aller Generationen. Kommunikation (Chatt, E-Mail, ), Einkaufen, Überweisungen (Online-Banking), Recherchieren - um nur einige zu nennen - sind Bereiche, in die das Internet auf selbstverständliche Art und Weise Einzug gehalten hat. Das Internet ist heutzutage aus fast keinem Lebensbereich mehr wegzudenken. Das Internet Protokoll selbst definiert jedoch keine Hardware, die zur Bitübertragung eingesetzt werden kann. Die folgenden Abschnitte wollen deshalb versuchen, dem Leser einem Blick hinter die Kulissen der physikalischen Datenübertragung zu verschaffen. Dabei wird insbesondere auf die eingesetzten Technologien und Methoden der Datenübertragung eingegangen. Wie aus dem Namen bereits ersichtlich, bilden Computernetzwerke einen Verbund von mehreren Computern. Dabei können diese Computer sich alle in einem Raum befinden und über sogenannte Netzwerkkabel direkt miteinander verbunden sein oder sich in unterschiedlichen Teilen der Welt aufgestellt sein und über Netzwerkkabel und Funknetze miteinander kommunizieren. Sobald in irgendeiner Form mindestens zwei physikalisch getrennte Computer miteinander verbunden sind, spricht man von einem Computernetzwerk. Im Fachjargon bezeichnet man alle Computer, die im Netzwerk registriert sind, als Hosts oder Endsysteme. In diesen Unterlagen werden zumeist die Begriffe Host oder Netzwerkrechner verwendet werden. In der heutigen Zeit existieren unzählige Computernetzwerke (kurz: Netzwerke). Ein Netzwerk liegt bereits vor, wenn in einem kleinen Haushalt die Computer aller Familienmitglieder über ein lokales Netz (LAN) miteinander verbunden sind. Umfangreichre Netzwerke sind beispielsweise Unternehmensnetzwerke, Firmennetzwerke oder Universitätsnetzwerke. Das berühmteste Netzwerk ist aber sicherlich das öffentliche Internet, welches Millionen von Computern miteinander verbindet und so als ein Zusammenschluss von verschiedenen Netzwerken interpretiert werden kann. Da - wie oben bereits erwähnt - die Hosts sich in den verschiedensten Teilen der Welt befinden können und in jedem Land unter Umständen andere Standards bezüglich der eingesetzten Computertechnologien existieren, beschäftigte man sich schon in den früheren Jahren der Netzwerkeinführung mit der Frage des reibungslosen Ablaufes der Kommunikationen zwischen den verschiedenen Hosts. 29 30 4.2 4.2.1 KAPITEL 4. WAN HARDWARE Leistung und Kosten der einzelnen Technologien Leistung / Datendurchsatz In Tabelle 3.1. sind die häufig verwendeten Verbindungsprotokolle aufgeführt. ATM, ISDN und Modem werden eher dem WAN-Bereich, der Rest dem LAN zugeordnet. Aus der Tabelle geht die max. Reichweite, die Anzahl der Knoten und der Datendurchsatz hervor. 4.2.2 Kosten Die Kosten für die verschiedenen Netzwerktypen sind in Tabelle 3.2. aufgelistet. Sie lassen sich hier natürlich nur grob angeben. Bei Festinstallationen wird man noch die Aufwendungen für Anschlussdosen (10 - 20 EUR/Stück), die Unterverteiler (Patchpanel (100 300 EUR), Datenschränke (200 - 600 EUR), Patchkabel (TP 2.5 EUR/m, LWL 12 EUR/m ...) mit einplanen müssen. Wenn Lichtwellenleiter zum Einsatz kommt, sind die Aufwendungen noch etwas höher anzusetzen, da für den Anschluss (das Spleissen) in den meisten Fällen eine Firma beauftragt werden muss. Bei einer Funkvernetzung entfallen die Kosten für eine Festinstallation, jedoch sind die weitaus höheren Aufwendungen für die Netzwerkkarten und die Access-Points zu berücksichtigen. Medium Funk-LAN ADSL ATM Ethernet (TP) Ethernet (BNC) ISDN loopback Modem GPRS/HSCSD UMTS Serieller Port Tokenring Reichweite einige 100m mehrere km mehrere km 100 m 185 m 0 mehrere km mehrere km 30 m 100 m Knoten ca. 20 - 50 ???? 2 - ... ca. 35 1 2 2 8 Durchsatz 2 - 11 Mbits 0.5 - 7.6 Mbit 2 - 622 Mbits 10 - 1000 Mbits 10 Mbits ¿ 64 Kbits ¿ 100 Mbits 0.3 - 56 Kbits 0.3 - 56 KBit 128 - 386 KBit 300 - 112000 Bits 4, 16 Mbits Tabelle 4.1: Leistung und Datendurchsatz einiger Netzwerke Einige Netzwerk-Technologien wird man nur noch in bestehenden Installationen oder Computer-Flohmärkten antreffen. Hierzu gehören sicherlich BNC-Ethernet, TokenRing oder auch Parallelport-Verbinder. 4.3 Telefonnetze Telefonnetze gehören zu den ältesten Weitverkehrsnetzen überhaupt. Die ersten ZweidrahtKupfer-Telefonnetze wurden bereits Ende des 19. Jahrhunderts eingerichtet. Die Versorgung mit Telefonanschlüssen liegt in Deutschland inzwischen bei nahe 100 Prozent. Datennetze kamen deutlich später. Deshalb wurden die ersten Datenleitungen über Telefonnetze geschaltet. Die meisten Internet-Benutzer verwenden in irgendeiner Form Telefonleitungen für die Verbindung. Dabei geht der Trend jedoch eindeutig weg von den alten ”analogen” Telefonanschlüssen über ISDN hin zu DSL. Jedoch bleibt der Anbieter der Zweidraht-Leitung 4.3. TELEFONNETZE Medium ATM Parallelport Ethernet (TP 1000) Ethernet (TP 100) Ethernet (TP 10) Ethernet (BNC 10) Funk-LAN (2/11 Mbit) ISDN Modem GPRS HSCSD UMTS Serieller Port TokenRing 31 Adapter 300 - 600 EUR 5 - 10 15 - 100 EUR 4 - 40 EUR – – 100 - 200 EUR 100 80 - 200 40 - 300 EUR 40 - 200 EUR 80 - 300 EUR – – Kabel 4/m (LWL) 10 0.70/m 0.70/m 0.70/m 0.20/m 500/AccessPoint 5 0.70/m Gebühren (ca. EUR) Grosskunde Telefongebühren Telefongebühren saftige Volumengebühr saftige Zeitgebühr saftige Volumengebühr 0 - Tabelle 4.2: Kosten einiger Netzwerke in den meisten Fällen identisch. Die Zeit der analogen Telefonnetze in Deutschland ist Mitte der 90er Jahre abgelaufen. Wenn auch die meisten Endgeräte in den Haushalten nach den Prinzipien der Telefone von vor 70 Jahren arbeiten, so findet die Gesprächsvermittlung und Übertragung im Hintergrund meistens nur noch digital statt. 4.3.1 Das klassische Telefonnetz Das klassische Telefonnetz nutzt eine Kupfer-Zweidraht-Leitung von der Vermittlungsstelle bis in die Haushalte. Diese Art Telefonsystem wird von Netzwerkern oft als ”plain old telephone system” - POTS bezeichnet. Übertragungsmethoden Analoge Modems IDSN Symmetrisches DSL ADSL (DMT) ADSL (CAP) VDSL Kabelmodems Datenrate Upstream 33.6 kbps 128 kbps 2048 kbps 768 kbps 64 kbps 640 kbps 640 kbps 1,6 bis 2,3 Mbps 768 kbps Datenrate Downstream 56 kbps 128 kbps 2048 kbps 8 Mbps 1,54 Mbps 6,14 Mbps 13 Mbps 52 Mbps 30 Mbps Reichweite in Meter etliche km etliche km 4000 6000 6000 4000 1500 300 je nach Kabel Verfügbarkeit in Deutschland verfügbar verfügbar verfügbar verfügbar verfügbar Testphase Testphase Testphase Testphase Tabelle 4.3: Protokolle auf 2-draht Kupferleitungen im Überblick 4.3.2 Digitale Telefonnetze - ISDN Meistens wird ISDN für einen Zugang zum Internet verwendet; es ist für interne Vernetzungen fast nur im Bereich der WAN’s (Wide Area Networks) anzutreffen. ISDN wird üblicherweise von Telefongesellschaften zur Sprachkommunikation angeboten und findet sich auch 32 KAPITEL 4. WAN HARDWARE im Umfeld grösserer Firmentelefonanlagen. Die Primärbandbreite beträgt 64 kbit, welches von der digitalen Sprachvermittlung herrührt. Verwendet wird PCM (Pulse Code Modulation), welche 8000 Samples von 8 bit Grösse pro Sekunde erzeugt. Oft findet man passive ISDN-Karten im Computer, die nur einen einfachen Wandler des digitalen Datenstroms der ISDN-Verbindung zum Rechnerbus vornehmen. Für den jeweiligen Adapter muss eine Treiberunterstützung im Linux-Kernel vorhanden sein, damit er benutzt werden kann. Zur Ansprache als Netzwerk-Interface stehen bei erfolgreicher Konfiguration die Point-to-Point (PPP) Interfaces ippp0 und folgende zur Verfügung. Diese können sodann mit den klassischen Netzwerktools eingerichtet und gesteuert werden. 4.3.3 Mobilfunknetze nach dem GSM-Standard GSM - der Global Standard for Mobile Communication definiert ein digitales Mobilfunknetz, was in der überwiegenden Zahl der Länder weltweit eingesetzt wird. Über dieses Telefonnetz ist es ebenfalls möglich Daten zu übertragen. Dabei gibt es zwei Ausprägungen: CSD benutzt direkt GSM-Technik und benötigt keine zusätzliche Infrastruktur. GPRS ist eine Erweiterung des GSM Standards und benötigt zusätzliche Komponenten. Inzwischen sind jedoch die meisten GSM-Netze auch GPRS-fähig. 4.3.4 GPRS Der General Packet Radio Service (GPRS) benötigt keine eigene Infrastruktur, sondern ist lediglich eine Erweiterung der bestehenden GSM-Netze. GPRS-Handys stellen für den schnellen Austausch der Datenpakete eine dauerhafte Verbindung zu einem Einwahlpunkt1 ins Netz her. Für die Datenkommunikation wird es Endgeräten erlaubt mehrere GSMKanäle zusammenzufassen und für die Kommunikation zu reservieren. Bandbreiten in Funknetzen haben immer ein Problem: Alle Nutzer einer Zelle teilen sich ein gemeinsames Medium. Wollen alle gemeinsam zugreifen, sinkt für jeden einzelnen die erreichbare Datenrate. Üblicherweise haben Sprachverbindungen Vorrang, so dass die verfügbare Bandbreite je nach Auslastung einer GSM-Zelle unterschiedlich ausfällt. Auch können verschiedene GPRS-Geräte, wie PCMCIA, Cardbus-Adapter oder Mobiltelefone mit entsprechender Erweiterung unterschiedlich viele Kanäle gleichzeitig nutzen. In der Einführungsphase von GPRS wurde netzseitig eine Bandbreite von 53,6 kbit/s (4 Kanäle à 13,4 kbit/s) pro Funkzelle vorgesehen. Stehen alle acht Kanäle für GPRS zur Verfügung, würde die Bandbreite auf 107,2 kbit/s steigen. Weitere Steigerungen durch bessere Fehlerprotokolle erlaubten theoretische 171,2 kbit/s (8 Kanäle a 21,4 kbit/s). Handys arbeiten momentan mit 13,4 kbit/s pro Kanal. Sie können je nach Gerät zwei bis drei Kanäle zusammenfassen. Aktuelle Geräte unterstützen auch vier Kanäle und können damit auf eine Bandbreite von 53,6 kbit/s kommen. Die Angaben beziehen sich jedoch meistens nur auf den DownloadKanal. Im Upload können Mobiltelefone oft nur einen oder zwei Kanäle benutzen. Oft findet man eine Klassifizierung: So bedeutet Class 10, dass das Gerät vier Down- und zwei Upstreamkanäle nutzen kann. Class 8 deutet auf vier Down- aber nur einen Upstream hin. GPRS selbst arbeitet schon mit starker Datenkompression. Deshalb kann der Endanwender auf eine Kompression auf höheren Protokollschichten verzichten. GPRS verwendet zur Paketvermittlung gleich das Internet-Protokoll. Üblicherweise stellen die Mobilfunkanbieter ihren Datenkunden dabei eine private Netzwerkadresse zur Verfügung. Die Aushandlung der IP-Parameter übernimmt das von anderen Diensten wohlbekannte Point-to-Point-Protokoll 1 APN = Acces Point Name 4.3. TELEFONNETZE 33 (PPP). Jedes Datenpaket besitzt somit eine eindeutige Empfängeradresse im Funknetz, um zu dem Endgerät zu gelangen. Hierfür ist es unerheblich, über welchen der Funkkanäle es übertragen wird. Wie beim GSM auch halten alle eingebuchten GPRS-Teilnehmer permanent über Signalisierungskanäle Kontakt mit dem Netz. Der Teilnehmer ist über den Zeitraum der Einbuchung immer online. Hierfür müssen die Kanäle nicht aufgebaut sein. Die notwendigen Kanäle werden erst zugeschaltet, wenn tatsächlich Daten abgerufen werden. Die Einführung von GPRS erfolgte in Deutschland schrittweise ab dem Jahr 2000. GPRS wurde dabei technisch gesehen über das bestehende GSM-Netz gelegt. Wesentliche Teile der GSM-Infrastruktur kommen auch für das GPRS-Netz zum Einsatz. 4.3.5 HSCSD CSD (Circuit Switched Data) existiert seit Beginn der GSM-Netze. Die Nutzdatenrate beschränkte sich auf maximal 9,6 kBit/s. In der GSM-Phase-2 wurde die Geschwindigkeit der Datenübertragung auf 14,4 kBit/s erhöht, in der GSM-Phase-2+ die Bündelung mehrerer Kanäle ermöglicht. GPRS war nicht der einzige Ansatz zur Erhöhung der möglichen Datenrate. HSCSD (High Speed Circuit Switched Data), der Nachfolger von CSD, erreicht eine maximale Datentransferrate von 57,6 kbit/s. Der Unterschied zwischen den beiden Systemen liegt in den verwendeten Protokollen und der Übertragungstechnik. Wie bei einer Telefonleitung steht bei HSCSD jedem User ein dedizierter Nutzkanal exklusiv zur Verfügung. Das macht sich im Abrechnungsmodell bemerkbar: HSCSD-Anbieter offerieren dem Teilnehmer einen zeitabhängigen Tarif, der unabhängig vom Datenvolumen ist. Die Zahl der gleichzeitig aktiven Teilnehmern ist nicht relevant und durch die maximale Zellkapazität beschränkt. E-Plus und Vodafone bieten in Deutschland HSCSD an. Die Preisgestaltung legt jedoch die Nutzung von GPRS für die gewohnte Internet-Nutzung nahe. HSCSD lohnt sich nur bei permanenten gleichmäßig hohen Datenraten. 4.3.6 Mobilfunknetze der dritten Generation - UMTS Hinter der Abkürzung UTMS (Universal Mobile Telecommunications System) steckt der 1998 von der ETSI (Abkürzung für European Telecommunications Standard Institute) vorgestellte Breitband-Mobilfunkstandard der dritten Generation (G3). Die Weiterentwicklung und Pflege des Standards unterliegt inzwischen dem 3GPP (3rd Generation Partnership Project). Zu den wesentlichen Leistungsmerkmale von UMTS zählt die Übertragung von Sprache und Audiodaten, die Übermittlung von multimedialen Inhalten sowie der schnelle Zugriff auf das Internet. UMTS ermöglicht Datenübertragungsraten von 364 kbit/s bis zu 2 Mbit/s, womit Streaming Video und Audio Übertragung, sowie Bildtelefonie ermöglicht werden sollen. Diese Übertragungsraten erreicht UMTS durch den asynchronen Transfermodus kurz ATM-Verfahren im sogenannten Codemultiplexverfahren. Als Funk-Technologie kommt Wideband CDMA (WCDMA) im Frequenzbereich um die 2 GHz zum Einsatz. UMTS-Hotspots existieren bereits in Ballungszentren und Großstädten. Ob eine flächendeckende Einführung stattfindet, muss abgewartet werden. Nicht mehr alle Bieter um die Lizenzen im Jahr 2000 sind am Start und die Aktivitäten der verbliebenen sind von Zurückhaltung gekennzeichnet. 34 4.4 KAPITEL 4. WAN HARDWARE ISDN Meistens wird ISDN für einen Zugang zum Internet verwendet; es ist für interne Vernetzungen fast nur im Bereich der WAN’s (Wide Area Networks) anzutreffen. ISDN wird üblicherweise von Telefongesellschaften zur Sprachkommunikation angeboten und findet sich auch im Umfeld grösserer Firmentelefonanlagen. Die Primärbandbreite beträgt 64 kbit, welches von der digitalen Sprachvermittlung herrührt. Verwendet wird PCM (Pulse Code Modulation), welche 8000 Samples von 8 bit Grösse pro Sekunde erzeugt. Oft findet man passive ISDN-Karten im Computer, die nur einen einfachen Wandler des digitalen Datenstroms der ISDN-Verbindung zum Rechnerbus vornehmen. Für den jeweiligen Adapter muss eine Treiberunterstützung im Linux-Kernel vorhanden sein, damit er benutzt werden kann. Zur Ansprache als Netzwerk-Interface stehen bei erfolgreicher Konfiguration die Point-to-Point (PPP) Interfaces ippp0 und folgende zur Verfügung. Diese können sodann mit den klassischen Netzwerktools eingerichtet und gesteuert werden. 4.5 Modem Ein ”Modem” empfängt Daten von der seriellen Schnittstelle und verschickt sie über die Telefonleitung oder Zweidraht-Standleitung. Externe Modems werden zwischen serielleroder USB-Schnittstelle und Telefon geschaltet. Interne Modems (PC-Einschubkarte) besitzen eigene serielle Schnittstellen. Die Datenrate ist durch die Eigenschaften der analogen Telefonleitung beschränkt und liegt zur Zeit höchstens bei 56 kbit. Modems waren sehr lange Zeit traditionell über die serielle Schnittstelle an Computer oder entsprechende Geräte angeschlossen. Unter Linux erfolgt der Zugriff auf diese Schnittstellen über Device-Dateien vom Type Character-Device im Verzeichnis /dev. Die Schnittstellen werden dabei durchnummeriert mit ttyS0 bis ttySn. Das Netzwerkinterface ist dabei nicht mit der Device-Datei gleichzusetzen, sondern hängt von der Art der Verbindung ab: Bei PPP-Verbindungen handelt es sich dann um ein Interface mit der Bezeichnung ppp0 oder folgende, welches mit den Standardwerkzeugen für Netzwerkinterfaces aufgesetzt und ausgelesen werden kann. Handelt es sich um ein USB-Modem, wird es nicht mehr über eine Device-Datei vom Typ ttySn, sondern über eine entsprechende USB-Device-Datei angesprochen. Auch hier sieht man den typischen schichtenweisen Aufbau von Protokollen: Die Geräte auf unterster Ebene können sich unterscheiden, das Netzwerk-Interface bleibt weiterhin identisch: ppp0 und entsprechende. 4.6 ADSL Die Grenzen der Übertragungskapazität der analogen Telefonleitungen sind durch das Nyquistund das Shannon-Theorem beschrieben. Das Nyquist-Theorem besagt, dass die Schrittgeschwindigkeit bei der verzerrungsfreien Übertragung von Impulsen maximal doppelt so groß sein darf wie die Bandbreite des benutzten Übertragungskanals. Das Shannon-Theorem zeigt Zusammenhänge zwischen der verfügbaren Bandbreite - dem Verhältnis zwischen Signal- und Rauschpegel - und der maximal möglichen Anzahl übertragbarer Bits pro Sekunde. Beim derzeitigen analogen Telefonnetz ist die Bandbreite auf 4 kHz beschränkt und das Signal-/Rauschverhältnis liegt bei 30 bis 35 dB. Daraus resultiert eine Übertragungsrate von maximal 35 kBit/s (für Modems!) 4.6. ADSL 4.6.1 35 Designüberlegungen Allerdings ist das Erreichen der maximalen Übertragungsgeschwindigkeit von verschiedenen Faktoren abhängig: Insbesondere die Länge und der Querschnitt des Kupferkabels, sowie die Dämpfung begrenzen die theoretisch möglichen Transferraten. In der Praxis bedeutet das für Anwender, deren Hausanschluß weit von der nächsten Vermittlungsstelle entfernt liegt, Tranferraten im unteren Bereich. ADSL basiert technisch auf der Trennung des nutzbaren Frequenzspektrums in drei Kanäle. Hierbei finden zwei unterschiedliche Verfahren Verwendung: Frequency Division Multiplexing oder Echo Cancellation (EC). EC spielt jedoch eine eher untergeordnete Rolle. Grund dafür ist, dass im Gegensatz zu FDM die Kanäle für Up- und Downstream nicht komplett getrennt, sondern überlagert werden. Dies erhöht den technischen Aufwand zur Signaltrennung wesentlich und verteuert die Endgeräte. FDM hingegen erzeugt einen schmalbandigen Frequenzbereich, der direkt oberhalb der Sprachfrequenzen angesiedelt ist. Der breitbandige Downstream-Bereich schließt direkt an den Upstream-Bereich an. Frequency Division Multiplexing beziehungsweise Echo Cancellation sorgen lediglich für die Trennung des Frequenzspektrums in entsprechende Kanäle, schaffen also nur die Grundlage für den eigentlichen Datentransfer. Dieser kann wiederum durch verschiedene Übertragungsmethoden realisiert werden. Auch hier läßt die ADSLSpezifikation - die in Händen von ANSI (American National Standards Institute) und ETSI (European Telecommunications Standards Institute) liegt - verschiedene Methoden zu. Daher kommen derzeit in der Praxis drei Modulationsverfahren zum Einsatz, die zueinander inkompatibel sind. Ähnlich wie anfangs bei der 56 k-Technik kann es also dem Anwender passieren, dass eine Kommunikation trotz gleicher Basistechnologie scheitert. Im folgeden Kapitel werden verschiedene Übertragungsverfahren beschrieben. 4.6.2 4.6.2.1 Übertragungsmethoden QAM Quadrature Amplitude Modulation versetzt die Signale einfach in einen höheren Frequenzbereich versetzt. Dies wird durch Modulation eines Basisbandsignals mit einem Trägersignal erreicht, wobei die Amplitude moduliert wird. QAM ist ein sogenanntes Einträger-Bandpaßübertragungsverfahren, das ein Trägersignal mit einem Symbolstrom moduliert. Bei diesem Verfahren wird der Datenstrom in zwei einzelne Ströme mit halber Übertragungsrate aufgespaltet und anschließend mit einem Trägerpaar aufmoduliert. Bei den orthogonalen Trägern handelt es sich um eine Sinusund eine Kosinusfunktion. Der Sender beinhaltet einen Scrambler (Chiffrierer), einen Leitungskodierer, einen Sendefilter, einen Modulator und einen D/A- Wandler. Das Signal wird in einem Demultiplexer in zwei Teilsignale aufgeteilt. Diese Teilsignale durchlaufen anschließend die Leitungscodierer, die eine Bit-nach-Symbol-Kodierung ähnlich wie bei der 56 kbit-Technologie vornehmen. Anschließend werden die kodierten Signale im Modulator mit einer definierten Frequenz (f0) multipliziert. Das eine Signal wird mit einem Kosinus, das andere mit einem Sinus moduliert. Anschließend erfolgt die Addition sowie eine D/A-Wandlung. Ein Sendefilter schließlich bringt das Signal auf die Leitung. Auf der Empfängerseite passiert ähnliches: Das Signal wird zunächst in einem Empfangsfilter bandbegrenzt und nach einer A/D-Wandlung mit einem Kosinus- beziehungsweise Sinusträger gleicher Frequenz wie beim Sender multipliziert. Ein nachfolgender Entzerrer macht eventuell bei der Übertragung aufgetretene Verzerrungen des Leiterpaares 36 KAPITEL 4. WAN HARDWARE rückgängig und filtert die Frequenzanteile (f0) heraus. Danach liegt wieder das ursprüngliche Basisbandsignal vor. Dieses wird für das jeweilige Signal getrennt dekodiert, um die Teilsignale schließlich in einem Multiplexer (zur Serialisierung der Signale) zusammenzufassen. 4.6.2.2 CAP (Carrierless Amplitude/Phase Modulation) Grundlage von CAP ist eine trägerlose Amplituden/ Phasenmodulation. Ein einziges Trägersignal dient als Transportmittel, das selbst weder übertragen wird, noch eigene Informationen beinhaltet. Auch CAP zählt zu den Einträger-Bandpaßübertragungsverfahren. Schon die Bezeichnung des Modulationsverfahren deutet seine Besonderheit an: Es wird eine trägerlose Amplituden/ Phasenmodulation durchgeführt, wobei ein technischer Kniff die Übertragung der Trägerfrequenz verhindert. Zusätzlicher Unterschied zu QAM: Modulation und Demodulation erfolgen beim Sender und Empfänger über digitale Filter. Die Grafik verdeutlicht die Arbeitsweise der CAP. An die Stelle der orthogonalen Trägerfunktionen von QAM treten digitale Filter, um die Teilströme zu modulieren. Das zu übertragende Signal wird einfach durch Addition der beiden Filterausgaben gebildet. Nachdem das Signal eine D/A-Wandlung erfahren hat und den Sendefilter passiert hat, wird es auf die Leitung gelegt. 4.6.2.3 DTM (Discrete Multi-Tone Modulation) beschreibt ein Verfahren, bei dem mehrere Trägersignale für die Übermittlung eingesetzt werden. Die übermittelten Daten verteilen sich also auf eine Vielzahl von Trägern, die alle eine Form der Quadrature Amplitude Modulation (QAM) einsetzen. DMT basiert auf der Discrete-Fast-Fourier-Transformation, die aus der digitalen Technik stammt. Im Unterschied zu CAP und QAM zählt Discrete-Multi-Tone-Modulation zu den sogenannten Mehrträger-Bandpaßübertragungsverfahren. Dieses Verfahren findet bei den Herstellern derzeit breite Unterstützung. Zur Umsetzung wird der gesamte Übertragungskanal in mehrere Teilkanäle unterteilt, die - theoretisch - die gleiche Bandbreite aufweisen. Im einfachsten Fall findet bei jedem dieser Teilkanäle das gleiche Modulationsschema Verwendung. Die Übertragungsrate ist daher identisch. Allerdings hat dies einen entscheidenden Nachteil gegenüber den zuvor beschriebenen Modulationsmethoden: Wenn Teilkanäle in hohen Frequenzbereichen liegen, so schlagen sich die schlechten Übertragungseigenschaften von Kupfer auf den Datentransfer nieder. Daher legen die Hersteller die Bitrate des jeweiligen Teilkanals entsprechend seiner Störanfälligkeit fest. Nur so ist eine optimale Nutzung des Übertragungsmediums Kupfer möglich. DMT läßt sich im Prinzip als eine Reihe von parallel arbeitenden QAM-Systemen verstehen. Dabei verwendet jedes QAM-System die zu einem DMT-Teilkanal korrespondierende Trägerfrequenz. Der Transmitter moduliert Daten, indem er Töne bestimmter Frequenzen erzeugt, diese zusammenfaßt und schließlich über die Leitung schickt. 4.6.3 Vorteile der neuen Technik Bei hinreichend kleiner Teilkanalbandbreite ist die Dämpfung für jeden einzelnen Teilkanal nahezu konstant. Ein weiterer Vorzug dieser Technik: Beim Empfänger entfällt der Entzerrer. Es reicht ein einfacher Kanalverstärker, da der Einfluß der nichtlinearen Phase des 4.7. ATM 37 Kabels auf das übertragene Signal in einem Teilkanal vernachlässigbar ist. Damit ist die Herstellung derartiger ADSL-Modems relativ preiswert. Allerdings setzt ein Mehrträger-Modulationsverfahren Orthogonalität zwischen den verschiedenen Teilkanälen voraus. Dies kann man beispielsweise durch die Verwendung von Fast-Fourier-Transformation-Methoden erreichen. Der Aufbau eines DMT-ADSL-Transceivers entspricht im wesentlichen dem eines CAP-ADSL-Gerätes. Wie bereits erwähnt, kann die Anzahl der Bits, die über einen Teilkanal gesendet werden, bei DMT variieren. Daraus ergibt sich eine verbesserte Performance, da störanfällige Frequenzen außen vor bleiben. Die mögliche Übertragungsrate beim Upstream-Kanal erhöht sich dabei auf 256 kBit/s. 4.6.4 Benutzung unter Linux Klassischerweise verfügen ADSL-Geräte beim Endnutzer über Ethernet- oder ATM-Schnittstellen, wobei üblicherweise nur erstere benutzt werden (können). ADSL stellt die Grundlage für das Tunneln von Ethernetframes bereit. Damit eine benutzerbasierte Authentifizierung erfolgen kann - die Ethernet selbst nicht bereitstellt - wird ein spezielles Protokoll, das PPPoE2 , eingesetzt. Linux kommuniziert auf dem unteren, dem Ethernet-Layer, klassischerweise über die eingebaute Ethernet-Netzwerkkarte. Diese sollte vom Kernel treiberseitig unterstützt sein, womit ein Netzwerk-Interface vom Typ eth0 und folgende (für weitere Netzwerkkarten) zur Verfügung steht. Darüberhinaus wird ein Software-Treiber benötigt, der das PPPoEProtokoll zur Verfügung stellt. Als Netzwerk-Interface steht anschließend eines vom Typ ppp0 (und weitere) zur Verfügung. Damit wird über das broadcastfähige Medium “Ethernet” eine Punkt-zu-Punkt-Verbindung zwischen zwei Rechnern aufgebaut. 4.7 ATM Unter der Zielsetzung, die Grundlagen für eine weltweit einheitliche Netz-Architektur zu schaffen, veröffentlichte die ITU 1984 die erste Empfehlung zum Schmalband-ISDN, kurz ISDN. Nachdem als Implementierungsversuch des Breitband-ISDN (B-ISDN) zu dieser Zeit auch STM in Erwägung gezogen wurde, entschied sich die ITU 1987 für den Asynchronous Transfer Mode (ATM). Die ersten Empfehlungen hierzu wurden in den Jahren 1990/91 veröffentlicht. Neben der ITU kam es im September 1991 zur Gründung eines weiteren Gremiums, welches sich ausschließlich mit der Standardisierung von ATM befaßt, dem ATM-Forum. Gegründet von CISCO-Systems, NET/adaptive, Northern Telekom und US-Sprint, gehören dem ATM-Forum inzwischen mehrere hundert Mitglieder an. Ziel des ATM-Forums ist ein zügiges Voranbringen des Standards ATM in enger Zusammenarbeit mit der ITU und der Industrie. Bei der Normierung früherer Standards war es aufgrund des langwierigen Normierungsprozesses oft zu einem Auseinanderdriften von ITU-Norm und von der Industrie entwickelten Quasistandards gekommen. Wie auch andere Übertragungsverfahren basiert ATM grundsätzlich auf einer Paketübertragungstechnik. Hierbei sind jedoch folgende wesentliche Änderungen bzw. Ergänzungen zu bisherigen Paketvermittlungsverfahren festzuhalten: 2 PPP über Ethernet: PPP-Pakete werden als Ethernetframes geschickt, welche selbst wiederum über den ADSL-Layer laufen. Damit erfolgt in den beiden unteren Schichten des OSI-Modells nochmals eine Untergliederung. 38 KAPITEL 4. WAN HARDWARE • Feste Paketlänge: ATM nutzt zur Übertragung ausschließlich Pakete mit einer festen Länge von 53 Bytes. Diese kleinste unteilbare Übertragungseinheit wird daher ATMZelle genannt. • Qualitätsparameter der Verbindung: ATM unterstützt QoS. Die hierzu notwendigen Parameter und Betriebsmittel werden beim Aufbau einer Verbindung festgelegt bzw. zugewiesen. • Verbindungsorientierte Betriebsweise: ATM agiert grundsätzlich verbindungsorientiert. Die Umsetzung verbindungsloser Dienste höherer Schichten ist vorgesehen. • Verzicht auf eine abschnittsweise Fehlersicherung: Die sehr geringen Bitfehlerwahrscheinlichkeiten heutiger Lichtwellenleiter ermöglichen den Verzicht auf eine abschnittsweise Fehlersicherung zugunsten einer höheren Übertragungsrate. • Verzicht auf eine abschnittsweise Flußsteuerung: Aufgrund der hohen Übertragungsund Verarbeitungsgeschwindigkeiten ist eine abschnittsweise Flußsteuerung nicht möglich. • Außenband-Signalisierung: Wie im Schmalband-ISDN wird die Signalisierung durch Nutzung separater Signalisierungskanäle vom Nutzdatenstrom entkoppelt. 4.7.1 Die ATM-Zelle Die ATM-Zelle ist eine starre Einheit von 53 Bytes. Sie besteht aus einen 5 Bytes langen Header sowie 48 Bytes Nutzinformation (Payload). Es wird zwischen zwei Arten von ATM-Zellen unterschieden, die sich in der Belegung der Bits 5-8 des ersten Headerbytes unterscheiden: 0 1 2 3 Flow Control (GFC) 4 5 6 7 8 Bit Channel Identifier Channel Identifier (VCI) Path Identifier (VPI) Path Identifier PT CLP HEADER CHECKSUM (CRC) Header einer User Network Interface Zelle Abbildung 4.1: User-Network-Interface Zelle UNI-Zellen Die User-Network-Interface-Zellen dienen zur Kommunikation zwischen Nutzer- und Benutzer-Netzwerk-Schnittstelle (User-Network-Interface, UNI). Der Header der UNI-Zelle unterteilt sich in sechs Elemente, die in der Abbildung dargestellt sind. Das Feld GFC (Generic Flow Control) dient der direkten Zugriffssteuerung auf ein Übertragungsmedium. Es ist daher nur im Bereich lokaler ATM-Netze von Relevanz und wird von ATMVermittlungsstellen und Cross-Connects am NNI-Interface überschrieben. Eine Standardisierung zur Nutzung des GFC Feldes steht bislang aus. 4.7. ATM 39 Zur Adressierung stehen die Felder VPI (Virtual Path Identifier) und VCI (Virtual Channel Identifier) zur Verfügung. Sie werden im Abschnitt weiter betrachtet. Anhand des Feldes PT (Payload Type) wird zwischen Benutzerzellen und OAM-Zellen (Operation and Maintenance) unterschieden. Der Standardwert ist 000. Die Funktion der OAM-Zellen liegt in der Überwachung des Systems. Sie ermöglichen die Aufdeckung und Behebung von Fehlfunktionen auf allen ATM-Ebenen. PT-Feld 000 001 010 011 100 101 110 111 Bedeutung Benutzerzelle, keine Überlast festgestellt, SDU-Type=0 Benutzerzelle, keine Überlast festgestellt, SDU-Type=1 Benutzerzelle, Überlast festgestellt, SDU-Type=0 Benutzerzelle, Überlast festgestellt, SDU-Type=1 Segment-OAM-F5-Zelle End-to-End-OAM-F5-Zelle Reserviert für zukünftiges Lastmanagement Reserviert für zukünftigen Gebrauch Tabelle 4.4: Mögliche Nutzlasttypen von ATM Das Feld CLP (Cell Loss Priority) definiert die Priorität einer Zelle. Bei auftretender Überlast an Netzwerkschnittstellen werden Zellen mit niedriger Priorität (CLP=1) zuerst verworfen. Eine Priorisierung bzw. Markierung von Zellen erfolgt, wenn die sie erzeugende Anwendung Resourcen in höherem Maße belegt, als ihr zugeordnet wurde. Verworfen werden also erst die Zellen, die außerhalb ihrer QoS-Parameter generiert wurden, bzw. Zellen deren Priorität bereits bei ihrer Generierung auf 1 gesetzt wurde. Die letzten 8 Bits werden durch das Feld CRC (Cyclic Redundancy Checksum) belegt. Bei der Bildung der Prüfsumme werden dabei nur die 32 Bits des Zellheaders (ohne CRCFeld) berücksichtigt. Die Bildung einer Headerprüfsumme ist sinnvoll, da sich die Informationen des Headers an jedem NNI, den die Zelle passiert, ändern kann, die Nutzinformation jedoch erhalten bleibt. NNI-Zellen Die Network-Node-Interface-Zellen werden entsprechend zur Kommunikation zwischen den einzelnen Knoten des ATM-Netzwerks genutzt (Network-Node-Interface, NNI). 0 1 2 3 4 5 6 7 8 Bit Channel Identifier (VCI) Channel Identifier Path Identifier Path Identifier (VPI) Path Identifier PT CLP HEADER CHECKSUM (CRC) Header einer Network Node Interface Zelle Abbildung 4.2: Network-Node-Interface Zelle 40 KAPITEL 4. WAN HARDWARE Im Vergleich mit dem UNI-Header ist das VPI-Feld des NNI-Headers um 4 Bit verlängert. Dies trägt der pfadorientierten Wegelenkung (Routing) in ATM-Weitverkehrsnetzen Rechnung, sowie der Tatsache, daß hier eine direkte Zugriffskontrolle auf das Übertragungsmedium nicht benötigt wird. 4.8 FDDI Für Backboneverbindungen in grossen LAN’s kam bis zum Ende der 90er Jahre üblicherweise FDDI (Fiber Distributed Data Interface) zum Einsatz. FDDI erlaubt maximale Kabellängen von bis zu 200km, die maximale Geschwindigkeit von 100 Mbit ist jedoch der Grund, weshalb FDDI nicht mehr eingesetzt wird. FDDI verwendet einen anderen Ansatz bei der Datenübertragung, bei dem eine Reihe sogenannter Tokens ausgesandt werden. Eine Station darf nur dann ein Paket übertragen, wenn sie eines dieser Tokens auffangen konnte. Somit entfällt wie bei TokenRing das Problem der Paketkollisionen. 4.9 Mobilfunknetze Das Interesse an “Internet überall” hat mit der Vielzahl mobiler Endgeräte deutlich zugenommen. Laptops und PDAs sind keine Seltenheit mehr, sondern inzwischen die Grundausstattung der verschiedenen Datennomaden. Die Nahfunktechniken nach dem 802.11 Standard beherrschen dabei das Feld. Daher sind die meisten Geräte dafür schon werksseitig mit einem entsprechenden Netzwerkadapter ausgestattet. Diese schöne neue Welt dieser Netze weist jedoch noch gravierende Löcher in der Abdeckung auf, so dass schnell nicht mehr von einem wirklich mobilen Internetzugang gesprochen werden kann. Es gibt zwar eine wachsende Zahl von Hotspots, leider jedoch auch eine wachsende Anzahl durchaus unterschiedlicher Zugangsprocederes. Wenn auch an vielen Stellen noch offene WLANs zu finden sind, so ist die Benutzung eines solchen Zugangs ohne Einverständnis des Betreibers nicht unbedingt legal. Obwohl schon seit einigen Jahren am Start erhielten die Datendienste über die Mobilfunknetze erst mit der Einführung von UMTS wieder größere Aufmerksamkeit. Mobilfunknetze decken zu fast 100% das Land ab und erlauben damit fast überall und jederzeit online zu gehen. 4.9.1 GSM, HSCSD, GPRS und UMTS Es gibt inzwischen eine ganze Reihe von Methoden Daten in Mobilfunknetzen zu transportieren. GPRS (General Packet Radio Service ist sicherlich das inzwischen verbreiteste Verfahren und wird von allen Mobilfunkbetreibern fast überall angeboten. Es arbeitet mit zeitunabhängigen Volumentarifen. GPRS kommt nicht nur beim Internet-Zugriff via PC zum Einsatz, sondern versendet auch MMS (Multimedia Message und wird zum Transport von WAP-Inhalten eingesetzt. Darüberhinaus gibt es HSCSD. Dieses belegt für die Online-Zeit einen GSM-Mobilfunkkanal und wird daher zeitbezogen abgerechnet. HSCSD ist bei weitem nicht so verbreitet wie inzwischen GPRS. Die Zukunft liegt sicherlich erstmal in UMTS. Wenn auch die Anbieter immer noch nach einer ”Killerapplikation” suchen, um von den Kunden das Geld für die Lizenz wieder einzusammeln, so ist jetzt schon für den Internet-Zugriff eine ernstzunehmende Alternative. Die erreichbaren Geschwindigkeiten, so eine Zelle verfügbar und 4.10. NETZWERKADAPTER FÜR MOBILFUNKNETZE 41 nicht ausgelastet ist, liegen bei 384 kbit/s. Das ist deutlich mehr als die ca. 55 kbit/s mittels GPRS oder HSCSD. Da UMTS bei weitem nicht die Abdeckung von GSM erreicht, ist ein Fallback auf GPRS vorgesehen. Daraus resultieren oft identische Volumentarife für GPRS und UMTS. Die entsprechenden Netzwerkadapter für UMTS beherrschen daher beide Übertragungsverfahren. 4.10 Netzwerkadapter für Mobilfunknetze Wie für jedes andere Netzwerk auch, benötigt man einen passenden Netzwerkadapter. Der Adapter für Mobilfunknetze kommt üblicherweise als PCMCIA- oder Cardbus-Karte daher. Alle neueren Mobiltelefone bringen GPRS-Unterstützung mit und kommen ebenfalls als Zugangshardware in Frage. Vielfach wird dieser Adapter auch als ”Modem” bezeichnet, da es sich um einen Netzwerkzugang per Telefonnetz handelt. Das Mobilfunknetz arbeitet jedoch von sich aus schon digital. Deshalb ist eine (De)Modulation gar nicht mehr nötig. Trotzdem findet man einige Anleihen aus der Modem-Welt wieder. Die meisten Mobiltelefone unterstützen GPRS. Eine gewisse Schwierigkeit stellt die Verbindung zwischen Rechner und Handy dar. Hier gibt es je nach Ausstattung der Geräte drei Möglichkeiten. Die Verbindung mittels Bluetooth ist sicherlich die modernste Variante. Hierzu müssen selbstredend beide Seiten mit dieser Art des Drahtlosfunks ausgestattet sein. Das Fehlen an Laptop oder PC ist kein Problem, da man Bluetooth per USB-Dongle oder PCMCIA-Steckkarte nachrüsten kann. Die drahtlose Verbindung zwischen den Geräten hat den Vorteil, dass sich das Telefon für optimalen Empfang leicht positionieren lässt. Jedoch sorgt Bluetooth gerade auf der Seite des Mobiltelefons dafür, dass sich dessen Akkulaufzeit oft deutlich reduziert. Ebenfalls sollte man die Datensicherheit im Blick. Unter Umständen ist ein Mobiltelefon in einem weiten Umkreis sichtbar. Wenn dann auch noch die Firmware einige gravierende Sicherheitslücken aufweist, eröffnet man anderen vielleicht tiefere Einblicke in das Telefon als einem lieb ist. Unter Sicherheitsaspekten deutlich unproblematischer ist eine Verbindung mit optischem Drahtlos-Funk. Viele Mobiltelefone, eine große Zahl von tragbaren Computern und PDAs haben Infrarot eingebaut. Die Reichweite von IrDA ist mit üblicherweise einem halben Meter beschränkt. Ein weiterer Vorteil: Steckt das Mobiltelefon irgendwo in der Tasche, ist es für andere per IrDA nicht mehr sichtbar. Die Ausrichtung der beiden kommunizierenden Geräte zueinander ist nun entscheidend: Viel mehr als 30 Grad von der Hauptstrahlrichtung sollte der Winkel nicht betragen. Unter Energie- und Sicherheitsgesichtspunkten schneidet sicherlich die drahtgebundene Verbindung zwischen Mobiltelefon und Rechner ab. Ältere Mobiltelefone beherrschen nur die serielle, neuere Geräte auch USB-Verbindungen. Die entsprechenden PC-Gegenstücke sind eigentlich immer vorhanden. Leider gibt es jedoch kaum Telefone bei denen das Kabel schon beiliegt. 42 KAPITEL 4. WAN HARDWARE Kapitel 5 TCP-IP 5.1 Schaffung von ”Inter-Nets” In den bisherigen Abschnitten erfolgte die Einführung in das Thema Netzwerke, in die Konzepte der paketorientierten Datenübertragung, der Signalisierung und der Kodierung. Als Protokolle der Hardwareebene wurden Ethernet und sehr kurz aus historischen Gründen TokenRing besprochen. Diese Netzwerkhardware wird überlicherweise für Local Area Networks verwendet, da die überbrückbaren Entfernungen nur wenige einhundert Meter und mit optischen Medien nur wenige Kilometer betragen. Ethernet 10Base-T 803.11a #2 192.168.2.0/22 #1 Router 2 Ethernet 1000Base-X ATM over ADSL Internet ATM over ADSL #1 192.168.6.0/24 #3 Router 1 #2 Router n Ethernet 100Base-T #2 #1 FDDI Router 3 TokenRing 192.168.1.0/24 192.168.10.0/24 172.16.1.0/24 Abbildung 5.1: IP als Universalservice Für Weitverkehrsnetze greift man auf überall verbreitete Telefonnetze in ihrer analogen oder digitalen Ausprägung zurück. Dann kommt entweder ein Modem oder ein ISDNAdapter als Netzwerkanschluss zum Einsatz. Auf diese Weise lassen sich verschiedene Hardwareausprägungen für die Paketübertragung nutzen. Jedoch besteht dadurch auch ein Problem: Ethernet ist zwar für fast alle Medientypen implementiert1 aber z.B. nicht für ZweiDraht-Verbindungen für weite Entfernungen. Die WAN-Techniken, wie z.B. ISDN und analoges Modem eignen sich kaum für die Vernetzung vieler Maschinen bzw. Komponenten. ISDN und Modem können weite Entfernungen realisieren, bieten aber nur Punkt-zuPunkt-Verbindungen zwischen jeweils zwei dedizierten Interfaces2 . Verschiedene physikali1 Es existieren jeweils Standards für Koaxialkabel (10Base5 ThickEthernet/Yellow-Cable bzw. 10Base2 für Cheapternet), TwistedPair-Kabel (4 bzw. 8 adrig), Lichtwellenleiter, Funkwellen im 2.4 GHz-Bereich 2 In den typischen Einwahlsituationen von Internet-Providern handelt es sich dabei um spezielle Hardware, welche eine große Anzahl von Netzwerkinterfaces in einer Maschine vereint. 43 44 KAPITEL 5. TCP-IP sche Netze sind unumgänglich, da keine Technologie sich für alle Einsatzszenarios eignet. Weiterhin sind Trennungen an bestimmten ”Grenzen”, wie abgeschlossene Firmen- oder Abteilungsnetze durchaus gewünscht und aus Sicherheitsgründen notwendig. Deshalb wird ein ”Universaldienst” geschaffen, welcher Verbindungen zwischen beliebigen Rechnern erlaubt. Dabei soll die Kommunikation über unterschiedliche Entfernungen, durch unterschiedliche Netze (LAN oder WAN) und über verschiedene Medien realisierbar sein. Virtuell soll jede Verbindung für die kommunizierenden Maschinen ”gleich” aussehen, d.h. es sollen keine anderen Applikationen oder Protokolle in Abhängigkeit davon verwendet werden müssen, ob sich die Maschinen im gleichen LAN befinden oder über Kontinente hinweg Daten austauschen. Dabei soll keine Entscheidung für eine bestimmte Technologie3 getroffen werden, sondern ein Universalnetz über mehrere heterogene Netze hinweg geschaffen werden. Ein solcher Universaldienst wird als ”Inter-Net” bezeichnet. 5.2 Überblick über TCP/IP Im vorhergehenden Abschnitt wurde das OSI-Referenzmodell vorgestellt. In den nun folgenden Abschnitten soll nun das Referenzmodell für die TCP/IP-Architektur vorgestellt werden. Das TCP/IP-Referenzmodell - benannt nach den beiden primären Protokollen TCP und IP der Netzarchitektur beruht auf den Vorschlägen, die bei der Fortentwicklung des ARPANETs gemacht wurden. Das TCP/IP-Modell ist zeitlich vor dem OSIReferenzmodell entstanden, deshalb sind auch die Erfahrungen des TCP/IP-Modells mit in die OSI-Standardisierung eingeflossen. Als Ziele der Architektur wurden bei der Entwicklung definiert: • Unabhängigkeit von der Architektur der Hostrechner. • Universelle Verbindungsmöglichkeiten im gesamten Netzwerk. • Ende-zu-Ende-Quittungen. • Standardisierte Anwendungsprotokolle. • Unabhängigkeit von der verwendeten Netzwerk-Technologie. Das TCP/IP-Referenzmodell besteht im Gegensatz zum OSI-Modell aus nur vier Schichten: Application Layer, Transport Layer, Internet Layer, Network Layer. Applikationssschicht (application layer): Die Applikationsschicht (auch Verarbeitungsschicht genannt) umfaßt alle höherschichtigen Protokolle des TCP/IP-Modells. Zu den ersten Protokollen der Verarbeitungsschicht zählen SSH (für virtuelle Terminals), FTP (Dateitransfer), SMTP (zur Übertragung von E-Mail), DNS (Domain Name Service), HTTP (Hypertext Transfer Protocol) etc. Transportschicht (transport layer): Wie im OSI-Modell ermöglicht die Transportschicht die Kommunikation zwischen den Quell- und Zielhosts. Im TCP/IP-Referenzmodell wurden auf dieser Schicht zwei Ende-zu-Ende-Protokolle definiert: das Transmission Control Protocol (TCP) und das User Datagram Protocol (UDP). TCP ist ein zuverlässiges verbindungsorientiertes Protokoll, durch das ein Bytestrom fehlerfrei zu einem anderen Rechner im 3 Netzwerkhardware mit bestimmten darauf laufenden hardwarenahen Protokollen 5.2. ÜBERBLICK ÜBER TCP/IP 45 Internet übermittelt werden kann. UDP ist ein unzuverlässiges verbindungsloses Protokoll, das vorwiegend für Abfragen und Anwendungen in Client/Server- Umgebungen verwendet wird, in denen es in erster Linie nicht um eine sehr genaue, sondern schnelle Datenübermittlung geht (z.B. Übertragung von Sprache und Bildsignalen). Diese Protokolle werden gleich noch ausführlicher behandelt. Internetschicht (internet layer): Die Internetschicht im TCP/IP-Modell definiert nur ein Protokoll namens IP (Internet Protocol), das alle am Netzwerk beteiligten Rechner verstehen können. Die Internetschicht hat die Aufgabe IP-Pakete richtig zuzustellen. Dabei spielt das Routing der Pakete eine wichtige Rolle. Das Internet Control Message Protocol (ICMP) ist fester Bestandteil jeder IP-Implementierung und dient zur Übertragung von Diagnose- und Fehlerinformationen für das Internet Protocol. Netzwerkschicht (network layer): Unterhalb der Internetschicht befindet sich im TCP/IP-Modell eine große Definitionslücke. Das Referenzmodell sagt auf dieser Ebene nicht viel darüber aus, was hier passieren soll. Festgelegt ist lediglich, daß zur Übermittlung von IP-Paketen ein Host über ein bestimmtes Protokoll an ein Netz angeschlossen werden muß. Dieses Protokoll ist im TCP/IP-Modell nicht weiter definiert und weicht von Netz zu Netz und Host zu Host ab. Das TCP/IP-Modell macht an dieser Stelle vielmehr Gebrauch von bereits vorhandenen Protokollen, wie z.B. Ethernet (IEEE 802.3), PPP, etc. SSH FTP HTTP Transmission Control P. (TCP) DNS DHCP User Datagram Protocol (UDP) Internet Protocol (IP) ICMP / ARP Ethernet ATM FDDI Modem Application Layer Transport Layer Internet Layer ISDN Network Layer Abbildung 5.2: Der TCP/IP-Protokoll-Stapel Um Datenpakete im großen Umfang und möglichst schnell an verschiedenste Empfänger schicken zu können, muß das Format der Adressen besonders gut von Computern oder speziellen elektronischen Schaltkreisen zu verarbeiten sein. Daher steckt das Konzept zur Verarbeitung der IP-Adressen im Binärformat (denn Host- und Domänennamen zu analysieren kostete zuviel Zeit!) Maschinen-intern entsprechen dem üblichen, dezimalen Format der IPAdressen (a.b.c.d) pro Zahl 8-bits. IP-Adressen sind also insgesamt 32-bit lang, wobei die Unterteilung in 8 bit Blöcke nur der Lesbarkeit halber eingeführt wurde. Dieses Format wird auch Dotted Quad Notation genannt: 192.168.22.3 entspricht 11000000.10101000.00010110.00000011 In dieser simplen Form kann die Adresse von sehr primitiven und enorm schnellen LogikBausteinen analysiert werden und sehr schnell mit Netzmasken und Broadcastadressen zum Routing berechnet werden. 46 KAPITEL 5. TCP-IP 5.3 Design Für das Verständnis und die Behandlung des Internet-Protokolls sind einige Vereinbarungen sinnvoll: Ein Host(-rechner): Meint ein beliebiges Computersystem, das an ein Internet angeschlossen ist und auf dem Anwendungen laufen. Dabei spielt die Rechnerhardware, Typ und Geschwindigkeit des Netzwerkes keine Rolle. Alle Hosts können ungeachtet der Hardwareunterschiede (und Betriebssysteme) miteinander kommunizieren. Ein Router ist ein Host mit mehrern Interfaces. Eine (global) einheitliche Adressierung eines Hosts muss sichergestellt sein, damit ein übergreifendes Inter-Net sinnvoll funktionieren kann. Das Internet-Protokoll (IP) ist Abstraktion der Konzepte seiner Entwickler. Es ist unabhängig von einer speziellen physikalischen Hardware angelegt. Die Implementierung findet ausschliesslich in Software statt. Damit kann es Bestandteil des Betriebssystems eines Rechners werden oder als eigenständige Applikation, die unter einem Betriebssystem ausgeführt wird, laufen. Das Adressierungsschema bildet dabei die zentrale Komponente der Abstraktion. Zum einen können die physikalischen Adressen nicht ausreichen,4 zum anderen können sie sehr unterschiedliche Schemata5 verwenden. Die Zustellung von IP-Paketen erfolgt analog zur Zustellung von Frames auf Hardwareebene. Die Adressierung der virtuellen Ebene läßt sich gut mit der physikalischen Adressierung vergleichen. Der Host trägt die Zieladresse in den Header6 des zu verschickenden Datenpaketes ein und vermerkt seine eigene Adresse als Absenderkennung. Das Zielsystem, welches durchaus ein Zwischenziel in Form eines Routers auf dem Weg eines Datenpaketes sein kann, überprüft die Adresse auf Übereinstimmung mit der eigenen. Anhand dieser wird das Paket behandelt: Im Falle eines Routers erfolgt die Weiterleitung in ein angeschlossenes Netz, soweit ein geeignetes vorhanden ist. Erreicht das Paket den adressierten Host, kann dieser die Absendeadresse als Ziel für das Verschicken einer Antwort verwenden. An jeder Stelle auf dem Weg eines Paketes ist die entsprechende Protokollsoftware mit der Zustellung beschäftigt. 5.4 Internet Protocol (IP) Netzwerke sollen unabhängig von der verwendeten Hardware ein einheitliches Adressschema verwenden. Die Beschränkung auf Ethernet verbietet sich allein schon wegen der begrenzten Kabellängen im LAN. Der Hauptvorteil von IP besteht also darin, daß es physikalisch verschiedene Netzwerke zu einem scheinbar homogenen Netzwerk zusammenfaßt. Die Zusammenarbeit verschiedener Netze wird als ”Internetworking” bezeichnet, die Kommunikation verläuft über das Internet-Protokoll (IP). Es gibt nicht DAS Internet, sondern das Internet ist eine Sammlung von Teilnetzen, die miteinander verbunden sind. Es gibt keine echte Struktur des Netzes, sondern mehrere größere Backbones, die quasi das Rückgrat (wie der Name Backbone ja schon sagt) des Internet bilden. Die Backbones werden aus Leitungen mit sehr hoher Bandbreite und schnellen Routern gebildet. An die Backbones sind wiederum größere regionale Netze an4 Obwohl das MAC-Adressierungsschema des Ethernets z.B. mit 248 mehr Adressen umfaßt als das Internet-Protokoll der Version 4. Hier besteht jedoch die Schwierigkeit, dass die Adressen fest mit einem Netzwerkadapter verknüpft sind, d.h. eine beliebige Abstraktion nicht möglich ist. 5 Die Zuordnung von Modem- oder ISDN-Leitungen könnte z.B. anhand der Telefonnummer erfolgen, TokenRing und Ethernet verwenden MAC-Adressen. 6 speziell gekennzeichneter Kopf eines Datenpaketes, welcher keine Nutzdaten enhält, sondern Zustellvermerke speichert 5.4. INTERNET PROTOCOL (IP) 47 geschlossen, die LANs von Universitäten, Behörden, Unternehmen und Service-Providern verbinden. IP stellt die Basisdienste für die Übermittlung von Daten in TCP/IP-Netzen bereit. Hauptaufgaben des Internet Protokolls sind die Adressierung von Hosts und das Fragmentieren von Paketen. Diese Pakete werden von IP nach bestem Bemühen (”best effort”) von der Quelle zum Ziel befördert, unabhängig davon, ob sich die Hosts im gleichen Netz befinden oder andere Netze dazwischen liegen. Garantiert ist die Zustellung allerdings nicht. Das Internet Protokoll enthält keine Funktionen für die Ende-zu-Ende-Sicherung oder für die Flußkontrolle. Das Internet-Protokoll muss eine Reihe von Aufgaben erfüllen, um eine End-zu-EndZustellung von Datenpaketen zu gewährleisten. Dazu zählt die Definition von Datagrammen, welche die Basiseinheiten zur Datenübermittlung in Internets bilden. Weiterhin wird das bereits angesprochene Adressierungsschema benötigt. Eine weitere Aufgabe besteht in der Übermittlung der Daten von der Transportschicht zur Netzwerkschicht.7 Die Datagramme müssen geeignet durch das Netz geschleust werden, dieser Vorgang wird als ”Routing” bezeichnet. Da auf diesem Wege durchaus unterschiedliche Arten von Netzwerkhardware passiert werden kann, muss die optimale Framegröße nicht unbedingt auf allen Teilstrecken identisch sein. Da die Framegröße nur anhand der Daten des ersten Teilnetzes, in dem der sendende Host Mitglied ist, bestimmt wird, müssen Mechanismen zur Verfügung stehen, mit eventuell kleiner werdenden Frame-Größen umzugehen. Daher erlaubt das IP die Fragmentierung der Datagramme auf ihrem Weg durch das Netz und das Zusammensetzen von diesen auf der Zielmaschine. Die Funktionen von IP umfassen: • Die Definition von Datagrammen, welche die Basiseinheiten für die Übermittlung von Daten im Internet bilden. • Definition des Adressierungsschemas. • Übermittlung der Daten von der Transportebene zur Netzwerkschicht. • Routing von Datagrammen durch das Netz. • Fagmentierung und Zusammensetzen von Datagrammen. IP benötigt deshalb ein hardwareunabhängiges Adressierungsschema; jedem Host (teilnehmender Rechner im ”Internet” wird eine eindeutige 32-Bit-Zahl zugewiesen, die sogenannte IP-Adresse. Die Dargestellung von IP-Adressen erfolgt üblicherweise durch vier Dezimalzahlen, eine für jeden 8-Bit-Anteil, die durch Punkte voneinander getrennt sind. IP ist ein verbindungsloses Protokoll, d.h. zur Datenübertragung wird keine Ende-zuEnde-Verbindung der Kommunikationspartner etabliert. Ferner ist IP ein unzuverlässiges Protokoll, da es über keine Mechanismen zur Fehlererkennung und -behebung verfügt. Unzuverlässig bedeutet aber keinesfalls, daß man sich auf das IP Protokoll nicht verlassen kann. Unzuverlässig bedeutet in diesem Zusammenhang lediglich, daß IP die Zustellung der Daten nicht garantieren kann. Sind die Daten aber beim Zielhost angelangt, sind diese Daten auch korrekt. 7 Das zugehörige OSI-Schichtenmodell ist Thema eines eigenen Kapitels 48 KAPITEL 5. TCP-IP 5.5 Spezifikation 5.5.1 IPv4-Standard Mit den erfolgten Designüberlegungen und definierten Aufgaben des Internet-Protokolls sind die wesentlichen Grundlagen gelegt. Nun kann die Spezifikation, d.h. die Festlegung einzuhaltender Standards, des Protokolls erfolgen. Wie schon mehrfach implizit erwähnt wurde, ist IP ein paketorientiertes Protokoll. Die IP-Adresse ist eine 32 bit große Binärzahl, die jedem Host in einem Internet zugewiesen wird und für die gesamte Kommunikation mit jedem anderen Host in diesem Internet verwendet wird. Dabei wird die Adresse virtuell in zwei Teile aufgespalten in ein Präfix und ein Suffix, wobei die Aufteilung nicht statisch ist. Das Präfix einer IP-Adresse identifiziert das Netz, in welchem sich der jeweilige Host mit seiner Adresse befindet. Das Adress-Suffix identifiziert den Host in dem durch das Präfix bestimmten Netz. Jedes Netz verfügt damit über eine eindeutige Kennung, die Netznummer. Jede Netznummer bzw. Network Number tritt nur einmal auf. Suffixes können in jedem Netz, dh. mehrfach, verwendet werden. Durch diese Festlegung soll das Routing effizient gestaltet werden können. Durch diese Festlegungen wird das wesentliches Designprinzip beschrieben: Jeder Host erhält eine einheitliche Adresse, diese Adresse kann jeweils nur von einer Maschine verwendet werden. Es erfolgt eine globale Koordination bei der Zuteilung von Netznummern, jedoch eine lokale Verteilung der Suffixes in den jeweiligen Teilnetzen. Es wird eine Delegationshierarchie geschaffen, die eine leichte Einordnung von Computern ermöglicht: Verschiedene Präfixes bedeutet verschiedene Netze; Gleiches Präfix heisst gleiches Netz. Das erzwingt dann verschiedene Suffixes. Das Internet Control Message Protocol (ICMP) ist eine Erweiterung des IP und wird dazu verwendet, um Fehlermeldungen und ähnliches an andere Hosts weiterzugeben bzw. die Erreichbarkeit von Hosts zu überprüfen. Neben der Erreichbarkeit von Rechnern gibt es eine weitere Funktion für die Weitergabe bestimmter Routinginformationen, die Redirect Messages. Diese wird vom Routing-Modul erzeugt, wenn es erkennt, daß es von einem anderen Host als Gateway verwendet wird, obwohl es einen wesentlich kürzeren Weg gibt. Weil dieses aber stark in die Funktionen des Hosts eingreift, ist das Ganze mit Vorsicht zu geniessen. In einigen Fällen wird ICMP komplett abgeschaltet. Ein weiteres Hilfprotokoll stellt das Address Resolution Protocol dar. Es dient der Zuordnung von Hardwareadressen zu IP-Nummern. Beide Protokolle werden später in eigenen Abschnitten behandelt. 5.5.2 Notation Für die Protokollsoftware ist die Binärdarstellung entscheidend, nur in dieser kann eine effiziente Analyse der Adressen erfolgen. Jedoch besitzt diese auch Nachteile: Für Menschen, die diese Adressen in ihren Applikationen verwenden, ist die Binärnotation schwer lesbar und Verwechselungen leicht möglich. Deshalb führt man die sogenannte Dotted-Quad-Notation ein. Die IP-Adresse wird in vier Byte-Blöcke aufgeteilt, z.B. 11000000.10101000.00011001.11111110. Die PunktDezimal-Notierung liefert dann eine für das menschliche Auge leicht erfassbare, Darstellung. Im Beispiel bleibend schreibt sich die genannte IP-Adresse nun: 192.168.25.254. Jeder Block besteht dabei aus einem vorzeichenlosen Ganzzahlwert im Bereich 0 - 255. 5.5. SPEZIFIKATION 5.5.3 49 Adressbereiche Der gesamte IP-Adressbereich erstreckt sich damit von Adresse 0.0.0.0 bis 255.255.255.255. In der Binärdarstellung bedeutet dieses die Spannbreite von allen 32 Stellen ”Null” gesetzt bis zu allen Stellen ”Eins” gesetzt. Die zuteilende Stelle für IP-Adressen bzw. -Bereiche muss für jeden Adressanteil die Zahl der Bits festlegen, welche für das Präfix bzw. das Suffix reserviert werden. 8 bits 8 bits 8 bits 8 bits host host host network host host network network host D 11 10 multicast multicast multicast E 11 11 experi mental experi mental experi mental Class A 0 network B 10 C net work 11 0 net work Abbildung 5.3: Adressbereiche des IPv4 Die Zuordnung von einer größeren Zahl von Bits in einem Bereich bedeutet automatisch die Verfügbarkeit von weniger Bits im anderen Teil. D.h. die Verlängerung des Präfixes liefert mehr definierbare Netznummern, aber weniger Hosts im jeweiligen Netz. Die Vergrößerung der Zahl der Hosts pro Netz geht zulasten der definierbaren Anzahl von Netzen. Eine übergreifend einheitliche Festlegung ist jedoch kaum sinnvoll, da sehr unterschiedliche Netze und Anforderungen existieren. Das Internet-Protokoll ist aus Sicht der Computer- und Netzwerkevolution ein recht altes Protokoll, d.h. nicht alle Entwicklungen konnten vorausgesehen werden. Der ursprünglich festgelegte Adressraum erschien gross genug um alle damaligen Anforderungen abdecken zu können8 . Weiterhin sollten IP-Adressen selbstbezeichnend sein, d.h. ohne weitere Angaben sollte die Netzgröße, d.h. die Anzahl maximal enthaltener Hosts als Information bereits beinhaltet sein. Die frühe IP-Software interpretierte zur Ermittlung einer Adressklasse, die Einteilungsvorschrift des IP-Adressraumes, die ersten vier Bits. Diese wurden in einer Tabelle zur schnelleren Bearbeitung verwaltet. Mit dieser Festlegung wurde eine Aufteilung des gesamten Adressraumes getroffen: Die Aufteilung geschieht über die Internet Assigned Number Authority (IANA). 8 Es gab bei der Entwicklung von IP nur eine winzige Anzahl zu vernetzender Rechner und man schätzte die Weiterentwicklung bei weitem nicht so stürmisch ein, wie sie später erfolgen sollte. 50 KAPITEL 5. TCP-IP Bezeichnung Class A Class B Class C Präfix 7 bit 14 bit 21 bit Suffix 24 bit 16 bit 8 bit Netze 128 16.38 2.097.152 Hosts pro Netz 16.777.216 65.536 256 Tabelle 5.1: Aufteilung der IP-Adressklassen 5.5.4 Spezielle IP-Adressen Besondere Adressierungen sollen im gemeinsamen Adressraum abgebildet werden. Deshalb wurde eine Reihe von Spezialadressen definiert. Dazu zählen die Netzwerkadressen: Um den Netzen einen ”Namen” zu geben, d.h. um sie direkt ansprechen zu können, erhalten diese Adressen im Prefix die Netzwerk-Nummer und im Suffix Nullen. Für den direkter Broadcast, d.h. um alle Rechner in einem gemeinsamen physikalischen Netz eine Nachricht schicken zu können, wird das Netzwerkprefix verwendet und im Suffix binäre ”Einsen” eingetragen. Der limitierte Broadcast erlaubt es, allen Rechnern im physikalischen Netz (in dem sich die Maschine gerade befindet) eine Nachricht zu schicken. Im Netzwerkprefix und im Suffix werden ausschließlich ”Einsen” eingetragen. ”This Computer” stellt auch eine spezielle Anforderung dar: Wenn ein Rechner bootet und dynamisch eine IP-Adresse erhalten soll, benötigt er eine Adresse zur IP-Kommunikation: Im Präfix und Suffix ausschließlich Nullen. Diese Situation tritt z.B. bei festplattenlosen Maschinen auf, die keine Möglichkeit haben, die Adresse irgendwo abzulegen. Dieses gilt auch für mobile Maschinen, die zwischen verschiedenen Netzen wechseln. Die ”Loopback Address” bietet eine auf jeder Maschine einheitliche Adresse. Viele Programme verwenden zur Kommunikation TCP/IP, selbst wenn die Maschine nicht an ein Netzwerk angeschlossen ist. Zur schnellen IP-Kommunikation innerhalb der Maschine ist als höchstes das Class-A Netzwerk9 definiert. Dieses erscheint aus heutiger Sicht durchaus als Verschwendung, da in einem solchen Netz mehrere Millionen Rechner Platz finden. Router erhalten auch IP-Adressen obwohl sie selten Applikationen zur Host-zu-HostKommunikation ausführen. Sie haben Verbindung in verschiedene physikalische Netze und müssen in jedem dieser Netze adressierbar sein. Jede dieser IP-Adressen eines Routers bezeichnet mit ihrem Prefix das physikalische Netz. Dabei wird folgendes Prinzip angewandt: IP-Adressen bezeichnen nicht direkt den Host, sondern die Verbindung eines Rechners zu einem Netzwerk. Zur Abgrenzung von Routern bezeichnet man Rechner mit mehreren IP-Adressen ohne Routingfunktionalität als Multi-Homed-Hosts. Beim Routing spielen einige IP-Adressen mit besonderer Bedeutung eine Rolle, die im folgenden kurz vorgestellt: Netzwerkadresse ist definiert durch ein Präfix. Der Teil, welcher den einzelnen Host bezeichnet, wird mit Nullen am Ende aufgefüllt. So beschreibt die spezielle IP-Nummer, z.B. 192.168.20.0 ein Klasse-C-Netzwerk mit max. 254 Teilnehmern. Broadcastadresse für einen direkten Broadcast, d.h. ein Datenpaket an alle Teilnehmer eines Teilnetzes, besteht aus dem Präfix mit Einsen am Ende, die den Hostteil auffüllen. Im o.g. Beispiel wäre dieses die spezielle IP-Nummer 192.168.20.255. 9 127.0.0.0 5.5. SPEZIFIKATION 51 Defaultrouter heißt der Standardübergang zu anderen Netzen. Dieses ist eine Maschine, die den ”Weg” zum restlichen Internet kennt. Der Defaultrouter ist eine Konvention, damit nicht jeder Router im Netz alle Routen zu allen existierenden Netzwerken listen und verarbeiten muss. Diese Maschine muss aber zwingend Mitglied im jeweilgen Teilnetz sein. Im Beispielnetz könnte dieses z.B. die IP-Adresse 192.168.20.254 sein. Dieses ist im Gegensatz zu Netzwerkadresse und Broadcastadresse nicht standardisiert. Netzwerkmaske wird durch die spezielle IP-Adresse beschrieben, welche mit binären Einsen beginnt und mit binären Nullen endet. Der Übergang bezeichnet die Grenze zwischen Prä- und Suffix und sollte eindeutig sein. Für das Beispielnetz lautet diese 255.255.255.0 und ist damit Netzmaske eines Klasse C-Netzes. Binär lautet sie: 1111 1111.1111 1111.1111 1111.0000 0000 Eine Netzwerkmaske für Netze mit nur einem Rechner besteht ausschliesslich aus ”Einsen”, die Netzwerkmaske für das gesamte Internet nur aus ”Nullen”. 0.0.0.0 bezeichnet deshalb die Defaultroute. Weiterhin lautet die Netzwerkmaske z.B. für ein Klasse B Netz 255.255.0.0 und in der Binärschreibweise 1111 1111.1111 1111.0000 0000.0000 0000. Häufig wird jedoch die sehr lange und umständliche Darstellung mit der Angabe der Anzahl der ”Einsen” in ihrer jeweiligen Darstellung abgekürzt. Klasse Class A Class B Class C Beispiel 10.0.0.0 132.230.0.0 192.168.20.0 Anzahl der Einsen 8 16 24 Tabelle 5.2: Kurzdarstellung für Netze Wenn man classless Routing einführt, dann haben Netze wieder Netzmasken von 0 bis 32. Deshalb sollten als ”Endungen” von Netzmasken nur die dezimalen Zahlen 255, 254, 252, 248, 240, 224, 192, 128, 0 auftreten. Man könnte natürlich versucht sein, kompliziertere Muster von Netzmasken zu bauen und statt ein Klasse C-Netz in der Mitte zu teilen, entlang der geraden und ungeraden IP-Nummern spalten. Dieses trägt jedoch extrem dazu bei, Routingtabellen nicht mehr durchschauen zu können und sei daher nur dem erfahrenen Netzwerkadministrator als Option genannt. Weiterhin wird man sich nicht immer darauf verlassen können, dass jede TCP/IP-Implementation sauber mit dieser Art von Netzmasken umgehen kann. 5.5.5 Private IP-Adressen Der gesamte Adressbereich 127.b.c.d ist dem Loopback-Netz10 zugeordnet, dabei handelt es sich um ein per Software simuliertes Netz. Einzige Maschine auf diesem loopback-Netz ist die eigene; evtl. mit verschiedenen Namen. Die Adresse 127.0.0.1 bezieht sich stets auf die eigene Maschine; sie kann zu keinen anderen Zwecken gebracht werden, als zur Definition des ”das sind wir selbst”. Die Adresse a.b.c.0 ist für das lokale Netz (Netz”name”) reserviert. Die Adresse a.b.c.255 ist für Nachrichten ”an alle” (Broadcast) reserviert11 . Folgende Adreßbereiche sind zum Aufbau privater, nicht mit dem Internet verbundener Netzwerke freigegeben: • 10.0.0.0 - 10.255.255.255 10 siehe hierzu die Anmerkungen im vorherigen Abschnitt Das Beispiel bezieht sich auf ein Class-C Netzwerk, bei einem Class-B sähe die der Netzname wie a.b.0.0 und die Broadcastadresse wie a.b.255.255 aus. 11 52 KAPITEL 5. TCP-IP • 172.16.0.0 - 172.31.255.255 • 192.168.0.0 - 192.168.255.255 Diese Adressen werden im Internet nicht geroutet (d.h. die Pakete werden spätestens am Router des eigenen LAN zum Internet wegegeworfen). 5.6 Der IP-Header IP hat mehrere Aufgaben, dafür werden einige Informationen benötigt: Die Quell- und Zieladresse; Informationen zum Weiterreichen an die höhere Netzwerkschicht; Fragmentierung12 ; ”Verfallsdatum”13 ; Länge des Pakets und die Prüfsumme. 32 bit VERS. IPHL TYPE OF SERV. D M F F IDENTIFICATION TIME TO LIVE TOTAL LENGTH PROTOCOL FRAGMENT OFFSET HEADER CHECKSUM SOURCE ADDRESS DESTINATION ADDRESS OPTIONS (ZERO OR MORE WORDS) Abbildung 5.4: IP Paket-Header Die einzelnen Header-Bestandteile: • Version (4 bit) - Die Versionsnummer steht für die zu verwendende IP-Protokollversion. Derzeit üblicherweise verwendet wird IPv4. • H-Länge (4 bit): Die Header-Länge gibt an, wie viele 32 bit-Zeilen der gesamte IPHeader besitzt. Dadurch, dass das Optionen-Feld unterschiedlich lang werden kann, ist es sinnvoll zu wissen, ab wo das Protokoll der nächst höheren Schicht beginnt. • Service-Type (8 bit): Das TOS-Feld (Type of Service) bestimmt, um welche Art von Daten es sich bei diesem Datagramm handelt. Diese Information ist hauptsächlich zu Zeiten von überlastetem Netzwerkverkehr nützlich. Hier macht es Sinn die Anwendungsart (HTTP-Typ, FTP-Typ,...) der Daten zu wissen, um entsprechende Prioritäten beim Transport der Datagramme über eine Verbindungsleitung zu setzen. Wirklich verwendet wird dieses Feld jedoch nicht. • Länge (16 bit): Dieses Feld gibt an, wie viele Bytes das gesamte Datagramm überhaupt enthält. • Fragment-ID (16 bit): Gibt an um welches Paket es sich handelt. Das spielt eigentlich nur eine Rolle, wenn fragmentiert werden muss. Da jeder Sender eine ID in dieses Feld einträgt, ist es Dritten durchaus möglich verschiedene Maschinen hinter einem Masquerading-Router zu identifizieren. 12 13 nicht alle darunterliegenden physikalischen oder logischen Netze haben die gleichen Eigenschaften Unzustellbare Pakete müssen irgendwann das Netz wieder verlassen - also entsorgt werden 5.7. IP-ROUTING 53 • Flags (3 bit): Flags werden für die Fragmentierung benutzt, auf die im nächsten Abschnitt genauer eingegangen werden soll. • Fragment-Offset (13 bit): Gibt an, an welcher Stelle das Fragment eingefügt werden muss. • TTL (8-Bits): Das Time-To-Live gibt an, wie viele verschiedene Netze (Hops) das Datagramm auf seiner Reise noch benutzen darf. Somit wird verhindert, dass Datagramme endlos im Netzwerk herumirren. • Höheres Protokoll (8 bit): Hiermit wir angegeben, um welches Protokoll es sich in der nächsthöheren Schicht, also der Transportschicht, handelt. Ein Wert von 6 bedeutet, dass das TCP-Segment über den entsprechenden Port an das TCP weiter verabreicht werden soll. Ein Wert von 5 deutet hingegen auf das UDP in der Transportschicht hin. Die Protokollnummer wird im IP-Jargon als der ”Klebstoff” bezeichnet, welcher die Netzwerkschicht mit der Transportschicht verbindet. Die Zuordnungen von Protokollen und Nummern findet man in der Datei /etc/protocols. • Prüfsumme (16 bit): Dieses Feld besitzt dieselbe Funktion wie das Prüfsummen-Feld im TCP/UDP. Sie dient der Detektion von Bit-Fehlern in einem empfangenen Datagramm. Es stellt sich an dieser Stelle nun die Frage, warum sowohl auf der Transportschicht als auch auf der Vermittlungsschicht eine Prüfsumme berechnet wird. Ein offensichtlicher Grund dafür ist, dass sowohl auf der Vermittlungsschicht als auch auf der Transportschicht andere, wenn auch nicht häufig verwendete Protokolle existieren, die keine Prüfsummenberechnung durchführen, so dass es sinnvoll sein kann, die Überprüfung der Korrektheit mittels der Prüfsummenberechnung auf beiden Schichten durchzuführen. • Quell-IP-Adresse (32 bit): Gibt an, von welcher IP-Adresse das Datagramm ursprünglich kommt. • Ziel-IP-Adress (32 bit): Gibt an, zu welcher IP-Adresse das Datagramm verschickt werden soll. • Optionen (je 32 bit): Diese Felder dienen der Erweiterung des IP-Headers. 5.6.1 Fragmentierung Manche Teilstrecken im Netzwerk können nicht mit beliebigen Datagrammgrößen hantieren. Jedes Netzwerkteilstück besitzt deshalb eine maximale Datagrammgröße MTU (Maximal Transmission Unit). Die Router, die Datagramme zu diesen Routern senden, müssen also stets überprüfen, ob die Größe der zu sendenden Datagramme die MTU der empfangenden Router nicht übertreffen. Sollte dies der Fall sein, so werden die jeweiligen Datagramme fragmentiert. Wenn ein Datagramm fragmentiert wird, so werden mehrere kleinere Datagramme erstellt, die dieselbe ID haben, jedoch ein gesetztes Fragment-Flag enthalten. Durch das Fragment-Offset wird zudem angegeben, an welcher Stelle das Fragment in das Datagramm eingefügt werden muss. Beim letzten Fragment ist das Fragment-Flag gelöscht, um anzuzeigen, dass keine weiteren Fragmente mehr folgen. 5.7 IP-Routing Eine entscheidende Aufgabe des Internet-Protkolls ist die Verbindung verschiedener Teilnetze untereineinder. Hierzu muss es eine geeignete Paketweiterleitung implementieren. Diese 54 KAPITEL 5. TCP-IP wird als Routing bezeichnet. Zur Einordnung sei wiederholt, dass IP ein verbindungsloses paketorientiertes Protokoll ist, welches definiert wurde, um die exklusive Belegung eines Datenkanals zu verhindern. Erst auf darüberligenden Schichten kann der Nutzer entscheiden, ob er verbindungsorientierte oder -lose Kommunikation wünscht. TCP arbeitet verbindungsorientiert, UDP schafft einen einfachen Datagrammrahmen, der direkt auf IP aufsetzt. Die Weiterleitungsentscheidung erfolgt beim Internet-Protokoll für jedes einzelne Paket neu. Damit das Routing möglichst effizient erfolgen konnte, sollten IP-Adressen selbsterklärend sein, d.h. sie besitzen ein Präfix zur Netzwerkkennung. Mit dem Suffix wird der Host im Teilnetz identifiziert. Deshalb erfolgte ursprünglich eine Klasseneinteilung des gesamten IP-Adressraumes in Klassen. Die Klassen A bis C definierten dabei gültige Adressen mit fest vorgegebenen Prä- und Suffixlängen. Spezielle Adressen werden für die Netzwerkkennung eingeführt. So sind Netzwerke neben anderen IP-Spezialadressen innerhalb des Namesraumes zu kennzeichnen. Mit dieser Festlegung ist eine gewisse Hierarchisierung der Verteilung von IP-Adressen möglich. 5.7.1 Prinzip der IP-Netze Bei der Planung eines lokalen Netzes gibt es zwei Zielsetzungen: Direkter Datenverkehr zwischen allen lokalen Maschinen ohne Umweg über den Router (sonst unnötige Belastung und Verzögerung) Begrenzung der ”Reichweite” der Datenpakete auf das kleinst-mögliche Teil-Netz (aus Sicherheitsgründen und zum Schutz anderer Teil-Netze vor unnötiger Belastung) Die Einstellungen zum Umsetzen dieser Ziele sind: Bezeichnung networkaddress subnet-mask ip-address Beschreibung Adresse des eigenen Teil-Netzes, Vergleich mit IPAdresse gibt an, ob ein Datenpaket zum lokalen Netz gehört oder nicht Bitmaske zum Herausstanzen der Netzwerk- Adresse aus der IP-Adresse einer Maschine Eigene Adresse der Maschine Tabelle 5.3: Abgrenzung der ”Reichweite” des lokalen Netzes address 192.168.25.3 11000000.10101000.00011001.00000011 netmask 255.255.255.0 11111111.11111111.11111111.00000000 network 192.168.25.0 11000000.10101000.00011001.00000000 In diesem Beispiel bilden alle 254 Maschinen mit der Adresse 192.168.25.N ein gemeinsames Netzwerk. Darüberhinaus gibt es noch die ”broadcast-address”, die eine Adresse für Nachrichten ”an alle” in diesem Teil-Netz ist. Rechnet man die Netzadresse14 und die Broadcast-Adresse15 hinzu, kommt man für ein Class-C-Netz, wie hier dargestellt, auf 256 IP-Adressen (= 28 ). 14 15 die kleinste Adresse im Teilnetz, dieses ist eine nicht vergebbare IP! die grösste Adresse im Teilnetz, auch diese IP sollte nicht für Rechner vergeben werden! 5.7. IP-ROUTING 5.7.2 55 Routing (Die Wege im Netz) Der Datenverkehr findet zwischen den Netzwerkschnittstellen der Internet-Rechner statt. Ein Linux-PC kann mehrere Netzwerkschnittstellen besitzen und als Vermittlungsstelle zwischen verschiedenen Netzen (Router) dienen. Dann kann es jedoch notwendig sein, die Routing-(d.h. Paketforwarding-)Fähigkeit des Kernels einzuschalten. Dieses kann für jedes Interface einzeln definiert werden. Der Name einer Netzwerkschnittstelle hängt von der verwendeten Netzwerktechnik ab (nicht etwa vom Hersteller der Einsteckkarte, wie bei anderen Systemen). Der Befehl route zeigt an, wie der Betriebssystemkern Datenpakete an die verschiedenen Empfänger verschickt: shuttle:~/ > /sbin/route -n Kernel IP routing table Destination Gateway 10.1.1.11 10.2.13.254 10.8.4.0 0.0.0.0 10.2.13.0 0.0.0.0 127.0.0.0 127.0.0.1 0.0.0.0 0.0.0.0 Genmask 255.255.255.255 255.255.255.0 255.255.255.0 255.0.0.0 0.0.0.0 Flags UGH U U UG U Metric 0 0 0 0 0 Ref 0 0 0 0 0 Use 0 0 0 0 0 Iface wlan0 eth0 wlan0 lo tun0 Alle gerade aktuellen Routen im Einzelnen kann man sich mit route -C anzeigen lassen. Diese Liste wird aber in grösseren Netzen bzw. auf Gatewayrechnern sehr schnell sehr lang werden. Informationen zum Routing können auch mit den Kommandos ip route oder netstat -r erhalten werden. Jedes dieser Programme greift dabei auf das Kernel-ProcInterface zu. Eine klassische Konfiguration sieht wie angezeigt aus: Es ist das lokale Ethernet definiert, in dem alle teilnehmenden Systeme ohne Router/Gateway erreicht werden können. Alles was in diesem Bereich nicht zugestellt werden kann, wird dem Defaultrouter zur weiteren Zustellung überlassen. ”default” hat die IP 0.0.0.0 und meint das ganze Internet, also den verbleibenden Rest, wenn die erste Route nicht angewendet werden konnte. Der Defaultrouter (bzw. Defautlgateway) muss bereits in einem darüber definierten Routingeintrag bekannt gemacht worden sein (Mitglied im entsprechenden Subnetz sein), da es sonst nicht erreicht werden kann! So genügt es zum Transport von IP-Paketen, dass jeder Rechner im Internet entsprechend seines Horizontes Systeme kennt, die wieder die weiteren Wege im Netz kennen. Bei den Flags deutet ”G” an, dass es sich um eine Gatewayroute handelt, also die Pakete nicht im lokalen Subnetz zugestellt werden. ”H” deutet eine Hostroute an, dieses ist eine spezielle Form eines Sub-Netzes, da hier Point-to-Point- Verbindungen definiert werden. traceroute dient zur Verfolgung des kompletten Weges, den Datenpakete zu einem bestimmten Empfänger einschlagen, z.B. zu traceroute www.heise.de: shuttle:~ # traceroute www.heise.de traceroute to www.heise.de (193.99.144.85), 30 hops max, 40 byte packets 1 10.1.1.11 4.992 ms 4.318 ms 6.315 ms 2 132.230.120.142 8.262 ms 10.373 ms * 3 nsc-rz-gwn.fun.uni-freiburg.de (132.230.0.141) 7.938 ms 7.307 ms \ 7.639 ms 4 Freiburg1.Belwue.DE (129.143.15.141) 7.641 ms 9.846 ms 10.699 ms 5 Stuttgart1.BelWue.DE (129.143.1.7) 17.109 ms 17.503 ms 17.258 ms 6 Frankfurt1.belwue.de (129.143.1.26) 20.153 ms 20.314 ms 21.000 ms 7 de-cix.ffm.plusline.net (80.81.192.132) 20.998 ms 20.211 ms \ 20.627 ms 8 heise2.f.de.plusline.net (213.83.57.57) 14.674 ms * 13.516 ms 56 9 10 KAPITEL 5. TCP-IP * heise2.f.de.plusline.net (213.83.57.57) 13.433 ms 13.599 ms * * heise2.f.de.plusline.net (213.83.57.57)(N!) 13.537 ms Ein weiteres Tool, auch zur grafischen Visualisierung, ist mtr, ”My Traceroute”. ”Router” leiten Datenpakete an entfernte Maschinen und sorgen für den Datenaustausch zwischen Teilnetzen. U.U. müssen die Pakete bis zum Ziel über mehrere Router geleitet werden; darauf hat man aber keinen Einfluß. ”Router” oder ”Gateway” wird meist synonym verwendet, wobei ein ”Gateway” eigentlich grundverschiedene Netze (Protokolle) miteinander verbindet. Der Routingeintrag, der zu einem bestimmten Interface gehört (im obigen Beispiel der erste Eintrag) erfolgt ab dem Kernel Version 2.2 automatisch, wenn der Systemadministrator das Interface konfiguriert. Alle weiteren Routingeinträge müssen manuell über das Kommando route erfolgen, was für den obigen Fall (ungekürzt) so aussehen würde: shuttle:~/ # route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.156.1 Da man diesen Vorgang nicht jedesmal beim Neustart des Netzwerkes oder des ganzen Rechners wiederholen möchte, können die weiteren Routingeinträge ublicherweise in der Netzwerkkonfiguration hinterlegt werden.16 5.7.3 Einfaches Hostrouting Wie werden Pakete bei einfachen Hosts, d.h. Maschinen mit einer einzigen Netzwerkverbindung zugestellt? Jede Maschine benötigt eine eigene IP-Nummer, z.B. 192.168.20.2. Dieses ist eine gültige Adresse aus dem Bereich des genannten Beispielnetzes von 192.168.20.1 - 192.168.20.254. Insgesamt können also 254 IP-Nummern vergeben werden, da von den 256 Möglichkeiten die Netzwerknummer und die Broadcastadresse abzuziehen sind. Die Verwaltung des Netzwerkes erfolgt auf den Routern und durch geeignete IP-Vergabe an die Hosts. Alle Eintragungen erfolgen manuell. Jedoch sollte man beachten, dass IP nicht überprüft, ob bestimmte Adressen bereits vergeben wurden. Für die dynamische Zuweisung von IP-Adressen an Hosts hat sich das Dynamic Host Configuration Protocol als Standard herausgebildet. Dieses wird in einem weiteren Abschnitt näher beleuchtet. Jeder Host des Beispielnetzes enthält Routingtabelle. Diese fällt je nach Zahl der Interfaces und angeschlossenen Netzwerke unterschiedlich komplex aus. Netzwerk 192.168.20.0 127.0.0.1 0.0.0.0 Netzmaske 255.255.255.0 255.0.0.0 0.0.0.0 Router-IP 192.168.20.254 Interface Ethernet, TokenRing, ... Loopback-Interface Defaultroute Tabelle 5.4: Routingtabelle eines Hosts Die Defaultroute dient für alle anderen Adressen, die im eigenen Netz nicht zustellbar sind. Deshalb wurde die Bezeichnung Defaultroute gewählt. Damit Pakete weitergeleitet werden können, muss jedoch mindestens ein Router Mitglied des jeweiligen Teilnetzes sein. 5.7.4 Routingentscheidung Routingentscheidungen erfolgen meistens entlang komplexerer Tabellen, als den in Hosts verwendeten. Viele Pakete an Knotenroutern mit vielen Interfaces und hohen Bandbreiten legen eine hardwarenahe Implementierung nahe. Durch die Bildung eines “logischen UND” 16 Die Konzepte unterscheiden sich dabei von Distribution zu Distribution durchaus erheblich. 5.7. IP-ROUTING 57 aus Ziel-IP und Netzmaske wird durch den Vergleich mit den Netzadressen ermittelt, ob eine Route verwendet wird oder nicht. Z.B. für das Ziel: 192.168.20.5 & 255.255.255.0 ergibt 192.168.20.0. Dieses wird mit der Netzadresse verglichen. Wenn es passt, schicke auf diese. Andernfalls probiere nächste, z.B. bei 24.46.192.77 & 255.255.255.0 ergibt 24.46.192.0 ungleich, also nächster Versuch 24.46.192.77 & 0.0.0.0 errechnet sich zu 0.0.0.0 - passt immer auf die Defaultroute. Dabei startet man bei der kleinsten Netzmaske, also dem Netz mit den wenigsten Hosts. Dann arbeitet man sich sukzessive bis zur größten Netzmaske17 alle eingetragenen Routen ab. Die Defaultroute ist dabei eine Konvention zur Vereinfachung der Routingtabellen. Kein Router kennt alle die Wege zu allen Internet-Adressen direkt, da fast jeder Router nur einen Bruchteil des Adressbereiches verwaltet. Jeder dieser Router hat eine Route für alle restlichen Bereiche. Auch ein einfacher Host kann mehrere Routen für verschiedene Netze kennen, falls mehrere Router in seinem Teilnetz vorhanden sind. Eine Entscheidungstabelle eines Routers könnte wie im nachstehend gezeigten Beispiel aussehen. Die Netzmaske entscheidet über Reihenfolge der Einträge in der Routingtabelle. Im Extremfall kann es also passieren, dass ein Paket gegen jede Regel geprüft wird. Netz 192.168.20.128 192.168.20.0 10.10.2.0 10.10.0.0 10.4.0.0 10.0.0.0 0.0.0.0 Netzmaske 255.255.255.128 256.255.255.128 255.255.255.0 255.255.0.0 255.252.0.0 255.0.0.0 0.0.0.0 Gateway/Router 192.2.2.2 193.2.2.3 10.10.255.254 10.10.0.254 10.10.0.254 192.168.2.5 10.10.0.254 Interface #1 #1 #2 #3 #4 #1 #3 Tabelle 5.5: Beispiel einer möglichen Routingtabelle Eine Verwaltung von Routinginformationen in größeren Netzwerken wird sehr schnell recht aufwändig. Deshalb wurden Protkolle entwickelt, um einige Aspekte automatisieren zu können. Dynamisches Routing soll Ausfälle erkennen und Alternativrouten finden und eintragen. Hierzu sind verschiedene Strategien möglich: Hop-Count: Wieviele Router liegen auf dem Weg von A nach B (was ist jedoch, wenn der Weg über eine langsame ISDN-Leitung viel kürzer ist, als der ”Umweg” über ein viel schnelleres LAN) Open Shortest Path First: Routingmetrik nimmt weitere Kennzahlen einer Route auf BGP: Border-Gateway-Protokolle für Router an den Grenzen großer Netzwerke Obwohl Adressen zentral vergeben werden, erreicht man kaum eine nähere geografische Zuordnung18 als auf Länder oder Kontinentebene. Lokal nahe beieinander liegende Firmen oder Organisationen können durchaus netzwerktopologisch gewaltige Entfernungen besitzen, wenn sie über verschiedene Provider angeschlossen sind. IP-Netze sind eher daher eher als ”provider-based” zu bezeichnen. 17 0.0.0.0 das gesamte Internet Auch wenn es Firmen gibt, die zu jeder IP-Adresse eine ungefähre bis genaue geografische Koordinate liefern können. 18 58 KAPITEL 5. TCP-IP 5.7.5 Subnetting und Supernetting Frühe Router interpretierten zur Ermittlung der Adressklasse die ersten vier Bits und verwalteten diese in einer Tabelle zur schnelleren Bearbeitung. Dieses Konzept ist nicht mehr wirklich praktikabel, denn z.B. Uni-Freiburg hat mit Netzadresse 132.230.0.0 und Netzmaske 255.255.0.0 ein Klasse-B-Netz. Aber: Nicht alle Rechner können in einem Ethernet o.ä. zusammengefaßt werden, damit ist ein Routing wie im Beispiel kaum sinnvoll. Noch extremer: Besitzer von Klasse-A-Netzen können nicht mehrere Millionen Rechner direkt verwalten. In diesen Netzen wird üblicherweise ein Subnetting zur besseren Abtrennung verschiedener Netze untereinander betrieben. Damit reduziert sich die Broadcast-Domain und es wird eine Strukturierung des Netzes erreicht. Mit der Knappheit der IP-Adressen im Netzmaske 255.255.0.0 255.255.128.0 255.255.192.0 255.255.224.0 255.255.240.0 255.255.248.0 255.255.252.0 255.255.254.0 255.255.255.0 Bitmuster der Netzmaske 11111111.11111111.00000000.00000000 11111111.11111111.10000000.00000000 11111111.11111111.11000000.00000000 11111111.11111111.11100000.00000000 11111111.11111111.11110000.00000000 11111111.11111111.11111000.00000000 11111111.11111111.11111100.00000000 11111111.11111111.11111110.00000000 11111111.11111111.11111111.00000000 Teilnetze 1 2 4 8 16 32 64 128 256 Anzahl IP’s 65.536 32.768 16.384 8.192 4.096 2.048 1.024 512 256 Tabelle 5.6: Subnetting in ”Klasse-B-Netzwerken” derzeitigen IPv4-Adressraum von 232 (weniger etlicher Spezialadressen, siehe dazu bisherige Ausführungen) gab es eine Reihe von Ansätzen das ”Ende” von IPv4 herauszuzögern. Ein Ansatz ist das ”classless routing” und das ”subnetting”. Netze können nun im Bereich der Adressen 1.0.0.0 - 223.255.255.255 beliebig zusammengefasst und geteilt werden. Für die Routinginformationen wird nun jedoch immer die Subnetzmaske mit zu übermitteln sein, da sich diese nicht mehr aus der ersten Bitfolge der IP ergibt. Damit: Ein flexibleres Schema ist notwendig. Klassen dürfen beliebig in Subklassen aufgeteilt werden, z.B. kann das RZ der Uni-Freiburg einzelnen Bereichen sog. Subnetze zuweisen. Aus der Aufteilung der höheren Klassen entstehen aus einem Klasse B Netz mit 65.535 Rechnern werden dann 256 Klasse C Netze mit 254 Rechnern pro Netz. Trotzdem müssen sich Router weltweit weiterhin nur 132.230.0.0 als Netzadresse merken, da Netze mittels Supernetting zusammengefaßt werden können. Supernetting kann z.B. zwei Klasse C Netze, wie 192.168.2.0 und 192.168.3.0, zu einem Netz zusammenfassen und für dieses dann die Maske 255.255.254.0 verwenden. Supernetting kann damit ”Adressverschwendung” verhindern: Ausgabe eines Klasse B Netzes für eine Organisation mit 500 Rechnern. Dann: IP-Adresse ist nicht mehr wie ursprünglich selbsterklärend deklariert, denn nun muss die Netzmaske zwingend mit übermittelt werden. Die Netzmaske liefert aus ihrer Folge von ”1” und ”0” die Aufteilung zwischen Netzwerkteil der IP-Adresse und dem Hostteil. Diese Unterteilung bestimmt, welche Adressen in einem lokalen Netz vergeben werden können. Diese können in diesem Netz ohne Router miteinander direkt über ARP kommunizieren. Dabei sollten in der Folge nur ”1” gefolgt von nur ”0” stehen19 , z.B.: 19 Daraus folgt, dass nur die Zahlen 0, 128, 192, 224, 240, 248, 252, 254, 255 in der Netzmaske vorkommen können. Andere Muster wären möglich aber eventuell ordentlich verwirrend. Siehe Anmerkungen dazu weiter 5.7. IP-ROUTING netmask 255.255.255.0 netmask 255.255.252.0 netmask 255.255.0.0 59 11111111.11111111.11111111.00000000 11111111.11111111.11111100.00000000 11111111.11111111.00000000.00000000 Die erste Beispielmaske ist eine Class-C-Maske und die letzte, die eines Class-B-Netzes. Es spielt nun aber keine Rolle mehr, wie das erste Bitmuster der IP-Adresse aussieht. Geht man z.B. davon aus, dass ein Class-B-Netz aufgeteilt werden soll, dann geschieht das wie folgt: Das gezeigte Muster kann natürlich auch ausgehend von einem Class-A-Netz durchgeführt werden, wobei dann der letzte Tabellenwert mit 256 zu multiplizieren ist. Geht man von einem Class-C-Netz aus, muss der letzte Wert hingegen durch 256 geteilt werden. Wendet man dieses Beispiel nun auf ein konkretes Teilnetz an, z.B. auf das Class-BNetz 134.76.0.0, dann ergibt sich das Bild (Tabelle 5.7.5) bei gleichmässiger Aufteilung. Die Tabellen könnten natürlich noch weiter fortgesetzt werden, aber das Prinzip sollte klar Teilnetze 1 2 4 8 Netzadresse(n) 134.76.0.0 134.76.0.0 134.76.128.0 134.76.0.0 134.76.64.0 134.76.128.0 134.76.192.0 134.76.0.0 134.76.32.0 134.76.64.0 134.76.96.0 134.76.128.0 134.76.160.0 134.76.192.0 134.76.224.0 Netzmaske 255.255.0.0 255.255.128.0 255.255.128.0 255.255.192.0 255.255.192.0 255.255.192.0 255.255.192.0 255.255.224.0 255.255.224.0 255.255.224.0 255.255.224.0 255.255.224.0 255.255.224.0 255.255.224.0 255.255.224.0 Broadcastadresse(n) 134.76.255.255 134.76.127.255 134.76.255.255 134.76.63.255 134.76.127.255 134.76.191.255 134.76.255.255 134.76.31.255 134.76.63.255 134.76.127.255 134.76.159.255 134.76.191.255 134.76.191.255 134.76.223.255 134.76.255.255 Zahl der IP’s 65.536 32.768 32.768 16.384 16.384 16.384 16.384 8.192 8.192 8.192 8.192 8.192 8.192 8.192 4.096 Tabelle 5.7: Beispiele einer Aufteilung in bis zu acht Teilnetze geworden sein. Es ist jedoch nicht erforderlich ein Netz in gleiche Teile zu untergliedern, sondern es können auch unterschiedlich grosse Teilbereiche definiert werden, wobei sich jedoch jeder Teilbereich in die seinem Bitmuster passenden Blöcke einfügen muss20 . Das angegebene Beispiel könnte also auch so aussehen, wie in Tabelle ?? gezeigt. Subnetting und Supernetting haben wesentlich dazu beigetragen, dass IPv4 immer noch reicht. Dadurch wird Routing aufwändiger, da Router nicht mehr anhand der ersten vier Stellen der Adresse über deren Maske entscheiden können. Router benötigen mehr Speicher für die Kombination aus Netznamen und Netzmaske. Adressklassen sind nun von eher historischer Bedeutung. Problem: Wie werden ehemals ”reservierte” Adressen, wie Broadcast und Netznamen behandelt, die nun evtl. reguläre Adressen in zusammengefaßten Netzen sind? oben 20 Das bedeutet z.B. im Beispiel, dass eine Netzadresse wie 134.76.60.3.0 bei einer Netzmaske von 255.255.248 ungültig ist. Die Startadresse kann 134.76.[0,7,15,23,...].0 sein. 60 KAPITEL 5. TCP-IP Teilnetze 16 Netzadresse(n) 134.76.0.0 134.76.16.0 134.76.32.0 134.76.48.0 134.76.64.0 134.76.80.0 134.76.96.0 134.76.112.0 134.76.128.0 134.76.144.0 134.76.160.0 134.76.176.0 134.76.192.0 134.76.208.0 134.76.224.0 134.76.240.0 Netzmaske 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 255.255.240.0 Broadcastadresse(n) 134.76.15.255 134.76.31.255 134.76.47.255 134.76.63.255 134.76.79.255 134.76.95.255 134.76.111.255 134.76.127.255 134.76.143.255 134.76.159.255 134.76.175.255 134.76.191.255 134.76.207.255 134.76.223.255 134.76.239.255 134.76.255.255 Zahl der IP’s 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 4.096 ... Tabelle 5.8: Beispiele einer Netzaufteilung mit verschiedenen Subnetzmasken 5.7.6 QoS-Routing IP selbst und die meisten Netzwerktechnologien kennen kein oder nur sehr beschränktes Quality of Service (QoS). Paketorientierte Netzwerke sind zuallererst für gleichberechtigten Zugriff ohne Ressourcen-Monopolisierung ausgelegt. ATM unterstützt zwar QoS, jedoch keine einfache Verknüpfung mit IP über Schichtgrenzen hinweg. IP ist verbindungslos, mit dem Verlassen des Paketes der Maschine ist kein Einfluss mehr möglich. IP-Header enthält ein Optionenfeld für QoS-Flags (dieses wird jedoch nur selten ausgelesen): • Minimum Delay • Maximum Throughput • Maximum Reliability • Minimize Costs Kombinationen aus diesen Feldern sind möglich. Verschiedene Dienste können so unterschiedliche Merkmale realisieren (Sprache, FTP, SSH,...). Probleme: Verletzung des Schichtenmodells, da Applikation den IP-Header mitbestimmen muss; alle Router müssen Felder auswerten; Prioritäten können sich auf dem Weg ändern (z.B. Einschätzung des Kostenfaktors von Leitungen); Pakete können auf ihrem Weg umgeschrieben werden. Trotzdem kann QoS-Routing beim Anschluss von LANs an das Internet über schmale Uplinks (Bsp. WG-oder Firmen-Router an DSL) sinnvoll sein. Router sind bereits mit ”normalem” Routing stark belastet - zusätzliche Regeln können die Belastung nur erhöhen. Deshalb: Meistens ist es wieder ”einfacher” die Bandbreite zu erhöhen, als aufwändiges QoS-Routing einzusetzen. Im LAN-Bereich gibt es Überlegungen zu QoS bei Ethernet - IPv6 soll einiges mehr an QoS implementieren. 5.8. ADDRESS RESOLUTION PROTOCOL 5.8 61 Address Resolution Protocol Jede Ethernet-, Funk- TokenRing-Karte besitzt eine eindeutige Hardware-Adresse, die auch als MAC-Adresse bezeichnet wird. LAN-Karten bedienen sich dieser MAC-Adresse, die für die Aussendung und den Empfang von Datagrammen über das Netzwerk unerlässlich ist. Sie können nur auf Datagramme antworten, die im Empfänger-Feld eine Rundsende-Adresse, eine bekannte Verteilsende-Adresse oder eine auf die betreffende LAN-Karte hinweisende Individual-Adresse aufweisen. Die MAC-Adresse steht bereits beim Erwerb des Netzwerkgeräs fest. Sie ist fest einkodiert z.B. in einer Netzwerk-Karte. Sie ändert sich nicht und ist weltweit theoretisch 100 % eindeutig. Der flache Adressraum umfasst 48 bit und die Adressen werden traditionell hexadezimal dargestellt. Man werfe einfach mal einen Blick auf die Unterseite des eigenen Laptops oder den Aufdruck auf einer Netzwerkkarte und wird dort eine typische Darstellung der Form: 00:0a:e4:35:34:6a finden. Ethernet verwendet ein ganz eigenes Adressierungsschema, das nach komplett anderen Kriterien funktioniert, als beispielsweise vom Internet Protokoll gewohnt. Es gibt lediglich eine Aufteilung der Adresse in ein Hersteller-Prefix und ein eindeutiges Suffix für jede Karte eines Herstellers. 5.8.1 ARP - Hilfsprotokoll des IP Das Address Resolution Protocol wird als Bindeglied zwischen der eigentlichen NetzwerkHardware einerseits und dem Internet Protokoll (IP) anderseits benötigt. Anders als bei Punkt-zu-Punkt-Verbindungen, wie beispielsweise ISDN agieren in einem Ethernet viele Maschinen gleichberechtigt. Damit reicht es nicht, einfach das Paket an einem Ende der Leitung ”abzuliefern” und nach kurzer Verzögerung am anderen Ende zu erwarten. IP-Adressen kann man nicht einfach nehmen, da man ja beim Kauf einer Ethernet-Karte noch gar nicht wissen kann, in welchem Netz eine Maschine betrieben wird. Ebenso wollte sicherlich keiner einsehen, dass ein Laptop entweder nur zu Hause oder im Firmennetz an einer bestimmten Stelle angeklemmt werden kann,oder dass man sich einen neuen Netzwerkadapter kaufen muss, wenn sich die IP ändert. Deshalb verwendet man beim Ethernet einen eigenen Adressraum mit Eigenschaften, die sich zum IP-Adressraum stark unterscheiden. Die IP-Adresse ist, wie bereits oben erläutert, im OSI-Schichtenmodell der Vermittlungsschicht zugeordnet und von der individuellen MAC-Adresse unabhängig. Jede Kommunikation mittels TCP/ IP wird durch die IP-Adresse eingeleitet, wodurch für den Aufbau des Dialogs die MAC-Adresse als sekundär zurückgestuft wird. End-zu-End-Kommunikationen bedienen sich also der IP-Adresse, wohingegen bei den dazwischen liegenden Knotenpunkten (Hops) in den genannten Netzwerktypen die MAC-Adresse genutzt wird. Jedem Host im Netz wurde aber nun auch noch eine IP-Adresse zugeordnet und damit hat das darunterliegende broadcastfähige LAN ein Problem: Mit der IP-Adresse 172.16.23.1 weiß es nichts anzufangen, mit der MAC-Adresse 00:08:74:46:DC:9C allerdings schon. Ein Vermittlungsdienst muss her: Das Adress Resolution Protocol (ARP) übersetzt die IPAdressen in Ethernet-Adressen. So gesehen gehört es eigentlich auch nicht vollständig in den Link Layer, sondern ist irgendwo zwischen Link und Network Layer einzuordnen. In den ersten beiden 16 bit Feldern des ARP-Paketes stehen der Hardwaretyp und die benutzten Protokolladressen. Im Falle von IP auf der Basis von Ethernet steht im ersten Feld eine 1 für Ethernet und im zweiten Feld 0x0800 für das IP-Protokoll, wie es auch im EthernetRahmen markiert wird. Die beiden 8 bit Felder zu Beginn der nächsten Zeile bestimmen die Anzahl der Bytes für die Hardware- und Protokolladressen, in diesem Fall 6 Byte für die Ethernetadresse und 4 Byte für die IP-Nummer. Das sich anschließende ”Operation”-Feld 62 KAPITEL 5. TCP-IP 32 bit HARDWARE ADDRESS TYPE HADDR LENGHT PADDR LENGHT PROTOCOL ADDRESS TYPE OPERATION SENDER HARDWARE ADDRESS (first 4 Byte) SENDER HADDR (last 2 Byte) SENDER PROTOCOL ADDRESS (first 2 Byte) SENDER PROTOCOL ADDRESS (last 2 Byte) TARGET HADDR (first 2 Byte) TARGET HARDWARE ADDRESS (last 4 Byte) TARGET PROTOCOL ADDRESS (all 4 Byte) Abbildung 5.5: Aufbau eines ARP Pakets bestimmt, ob es sich um eine Anfrage (Wert 1) oder eine Antwort (Wert 2) handelt. ARP beinhaltet Felder für zwei Adressbindungen, wobei eine dem Sender und die andere dem Empfänger entspricht, die in den ”Target”-Feldern genannt wird. In den ersten TCP/IP-fähigen Rechnern wurde eine manuell erstellte Tabelle verwen21 det , die die Zuordnung zwischen MAC- und IP-Adresse indirekt automatisieren sollte. In den meisten broadcast-fähigen Netzen werden davon losgelöst zusätzlich oder ersetzend Routing-Informationen komplett automatisch mittels dem Adress Resolution Protocol ausgetauscht, welches in RFC 826 (An Ethernet Address Resolution Protocol) definiert wird. Jeder Host verwaltet dabei dynamisch den sogenannten ARP-Cache mit den relationalen IP-/MAC-Einträgen. 5.8.2 Funktionsweise ARP arbeitet dabei ziemlich geräuschlos im Hintergrund. Man muss nichts extra installieren, da diese Fähigkeit eigentlich in jeden Linuxkernel schon hineinkompiliert ist. Die Programme zur Konfiguration und Abfrage des ARP-Caches sind auf fast jedem LinuxRechner installiert: mobile:~ # ip neighbor show 10.8.4.1 dev eth0 lladdr 00:0a:e4:35:33:7a REACHABLE 10.8.4.2 dev eth0 lladdr 00:0c:6f:45:03:0d REACHABLE 10.8.4.254 dev eth0 lladdr 00:09:37:31:3a:13 REACHABLE In einem gegebenen Subnetz, hier 10.8.4.0/255.255.255.0, werden alle Pakete, die eine Maschine verlassen sollen über das lokale Ethernet ausgetauscht. Dieses trifft auf fast alle Maschinen mit Internet-Verbindung zu, welche nicht ausschliesslich an einer Modem- oder ISDN-Verbindung hängen. Maschinen in diesem Subnetz verfügen meist über genau eine Netzwerkkarte, ausser sie stellen Gateway-Funktionen in andere Netze bereit. Dann bezeichnet man sie üblicherweise als Router. So gibt es zwei Szenarien: 1. Die Maschine A will mit einer Maschine B im selben Subnetz kommunizieren. Die Pakete können ohne die Beteiligung weiterer Maschinen direkt über das Ethernet hin- und hergeschickt werden. 21 Diese Fähigkeit ist heute noch vorhanden: Mit dem Kommando arp können der Kernel-ARP-Tabelle statische Einträge hinzugefügt oder welche gelöscht werden. 5.8. ADDRESS RESOLUTION PROTOCOL 63 2. Die Maschine A will ein Paket an irgendeine Maschine ausserhalb des Subnetzes schicken. Da nur der Router R, der deshalb auch als Default-Gateway bezeichnet wird, den Weg in die weite Welt kennt, liefert A die Daten an R. R kümmert sich dann um die Weitersendung und leitet A eventuell zurückommende Antwortpakete oder Fehlermeldungen zu. Die Art der Daten, die ausgetauscht werden, spielt auf den unteren Netzwerkschichten unterhalb von IP keine Rolle. Jedes IP-Paket wird an den Data-Link Layer weitergereicht, um dort versendet zu werden. Mit der IP-Adresse von B, die als bekannt vorausgesetzt wird, kommt A hier nicht weiter und muss deshalb die MAC-Adresse von B in Erfahrung bringen. Der Ablauf einer ARP-Sitzung folgt normalerweise einem strikten Protokoll: 10.8.4.1 A 00:01:AA 10.8.4.2 B 00:01:BB ARP-Reply: "10.8.1.2 is at 00:01:BB..." Abbildung 5.6: Die Station mit der passenden IP-Adresse schickt ein ARP-Reply 1. Zu allererst schaut A in seinem ARP-Cache nach, ob es nicht vielleicht bereits dasgesuchte Adress-Paar bzw. die gesuchte MAC-Adressen kennt. In diesem Cache werden festgestellte Paarungen aus früheren Sitzungen für eine Weile vorgehalten, um nicht ständig wieder neu fragen zu müssen. Dieses würde unnötigen Netzwerk-Verkehr produzieren. 2. Falls kein Eintrag vorhanden ist, wird vom Initiator mit Hilfe von ARP die MACAdresse der fraglichen IP-Adresse zu ermitteln versucht. In der Hoffnung diese Frage wenigstens temporär aus der Welt zu schaffen, sendet A ein ARP-Datagramm inklusive der zu erfragenden IP-Adresse und einer sogenannte ARP-Anforderung an alle LAN-Karten mittels der bekannten MAC-Broadcast-Adresse (0xFFFF FFFF FFFF). ARP setzt in dieser verhältnismässig globalen Anforderung seinen eigenen EthernetTyp 0x08086 ein, damit der Schrei von allen vermeindlich betroffenen Knotenpunkten wahrgenommen wird. Dieses Rundschreiben ”Ich kenne die MAC-Adresse X, die IPAdresse A und ich suche die MAC-Adresse desjenigen, der die IP-Adresse B hat.” wird von allen aktiven Maschinen im Netzwerk bemerkt. Falls innerhalb eines definierten Timeouts im Sekundenbereich keine Antwort auf die Broadcast-Anfrage eingeht, so wird die Anforderung erneut gestellt. 3. Der Rechner B, und nur dieser, wird auf dieses Broadcast-Request antworten: ”Die IP-Adresse von B ist unter der MAC-Adresse Y zu erreichen”. In der ARP-Antwort sind dann alle Felder entsprechend gesetzt. 4. Für eine gewisse Zeit notiert sich A dieses Paar in seinem Cache. Da es den anderen Teilnehmern den Aufwand spart, später ebenfalls nach dieser Paarung fragen zu müssen, merkt sich die befragte Maschinen ebenfalls diese Paarung, solange der Cache nicht aufgrund potentieller Überfüllung überschrieben wird. Sie tut es auf ”Vorrat” für den Fall, dass sie später ebenfalls Pakete an B schicken will. Bei einer eventuell nachfolgenden Anforderung ist es daher auch nicht mehr nötig den ARP-Dialog 64 KAPITEL 5. TCP-IP in umgekehrter Richtung walten zu lassen, da die relevanten Daten beim Zielsystem bereits bekannt sind. 10.8.4.1 10.8.4.2 B A 00:01:AA 00:01:BB Ethernet-Kommunikation 00:01:AA <-> 00:01:BB IP-Kommunikation 10.8.4.1 <-> 10.8.4.2 Abbildung 5.7: Nach dem Austausch der MACs erfolgt die IP-Kommunikation ARP-Datagramme werden von Routern nicht weitergeleitet, da sie in der IP-Schicht operieren und auf MAC-Broadcasts grundsätzlich nicht reagieren können und dürfen. Router stellen daher verwertbare Puffer zwischen einzelnen Rundsende-Subnetzen dar. Mit ihrer Hilfe kann überflüssiger Traffic im gesamten Netzwerk eingedämmt und auf effektiv betroffene Subnetze minimiert werden. 5.8.3 ARP unter Linux Unter Linux erfährt man die MAC-Adresse mit: linux02:~ # ip link show 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:e0:81:55:06:01 brd ff:ff:ff:ff:ff:ff 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:e0:81:55:06:00 brd ff:ff:ff:ff:ff:ff 4: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0 Die beiden Ethernet-Interfaces haben eine gültige Adresse, Loopback (lo) und das TunnelInterface (sit0) benötigen keine. Zum Netzwerkgerät zugeordnete IP-Adressen haben das bekannte Format bestehend aus vier durch drei Punkte getrennte Blöcke von Dezimalzahlen 10.8.4.254. Zwar arbeiten die Rechner intern mit der Binärdarstellung, trotzdem sind die Unterschiede zwischen MAC- und IP-Adresse groß. ARP arbeitet beim Dolmetschen geräuschlos im Hintergrund. Man muss nichts extra installieren, da diese Fähigkeit im Linux-Kernel vorhanden ist. Die Programme arp und ip zur Konfiguration und Abfrage des ARP-Caches sind auf fast jedem Linux-Rechner installiert. mobile root # arp -n Address HWtype 10.8.4.222 ether 10.8.4.204 ether 10.8.4.254 ether mobile root # arp -d 10.8.4.204 mobile root # arp -n Address HWtype 10.8.4.222 ether 10.8.4.204 10.8.4.254 ether HWaddress 00:03:47:B9:DE:36 00:02:B3:C2:55:91 00:0C:6E:15:03:0E Flags Mask C C C Iface eth0 eth0 eth0 HWaddress 00:03:47:B9:DE:36 (incomplete) 00:0C:6E:15:03:0E Flags Mask C Iface eth0 eth0 eth0 C 5.8. ADDRESS RESOLUTION PROTOCOL mobile root # arp -n Address HWtype HWaddress 10.8.4.222 ether 00:03:47:B9:DE:36 10.8.4.204 ether 00:02:B3:C2:55:91 10.8.4.254 ether 00:0C:6E:15:03:0E mobile root # arp -s 10.8.4.204 00:11:22:33:44:55 mobile root # arp -n Address HWtype HWaddress 10.8.4.222 ether 00:03:47:B9:DE:36 10.8.4.204 ether 00:11:22:33:44:55 10.8.4.254 ether 00:0C:6E:15:03:0E mobile root # ping 10.8.4.204 PING 10.8.4.204 (10.8.4.204) 56(84) bytes of data. 65 Flags Mask C C C Iface eth0 eth0 eth0 Flags Mask C CM C Iface eth0 eth0 eth0 --- 10.8.4.204 ping statistics --1 packets transmitted, 0 received, 100% packet loss, time 0ms mobile root # arp -s 10.8.4.204 00:02:B3:C2:55:91 mobile root # ping 10.8.4.204 PING 10.8.4.204 (10.8.4.204) 56(84) bytes of data. 64 bytes from 10.8.4.204: icmp_seq=1 ttl=64 time=0.164 ms --- 10.8.4.204 ping statistics --1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.164/0.164/0.164/0.000 ms ARP verlässt sich auf die MAC-Adresse des Ethernet-Adapters, so wie sie vom Betriebssystem mitgeteilt wird. Wenn man die MAC-Adresse eines Interfaces ändern will, kann man als Administrator dazu das Kommando ip link set verwenden: linux:~ # ip link set eth0 down linux:~ # ip link set eth0 address 00:20:AA:20:AA:20 linux:~ # ip link show eth0 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:20:AA:20:AA:20 brd ff:ff:ff:ff:ff:ff Das Ganze geht auch mit ifconfig: linux:~ # ifconfig eth1 eth1 Protokoll:Ethernet Hardware Adresse 00:00:0E:7D:71:DF BROADCAST NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 Sendewarteschlangenlänge:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) linux:~ # ifconfig eth1 down linux:~ # ifconfig eth1hw ether 00:4F:0E:7D:71:DF linux:~ # ifconfig eth1 eth1 Protokoll:Ethernet Hardware Adresse 00:4F:0E:7D:71:DF inet6 Adresse: fe80::24f:eff:fe7d:71df/64 Gültigkeitsbereich:Verbindung UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:1 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 Sendewarteschlangenlänge:0 RX bytes:0 (0.0 b) TX bytes:70 (70.0 b) Das bedeutet schlicht und einfach, dass man sich nicht darauf verlassen kann, dass die im Netz sichtbare MAC-Adresse wirklich die auf dem Netzwerkadapter programmierte ist. Im 66 KAPITEL 5. TCP-IP WLAN lässt sich die MAC-Adresse scheinbar auch auf diese Weise ändern. Da sie jedoch von der Firmware der Karte noch in anderen Schichten benutzt wird, kommt nach dieser Art der Änderung keine Funkverbindung mehr zustande. Es gibt jedoch Programme, mit denen sich per Firmware die MAC-Adresse von WLAN-Karten ändern lässt. 5.8.4 Eingebaute Sicherheitslücken Normalerweise sind keine Kontrollmechanismen vorhanden, die eine MAC-Adresse im Namen mehrerer IP-Adressen kompetent verifizieren kann. Angreifer können sich diese Eigenheit von ARP zunutze machen. Die Schwäche von ARP liegt in seiner Vertrauensseligkeit. ARP stammt aus den frühen Zeiten der IP-Kommunikation, wo ein ”es geht” und möglichst schonender Umgang mit Netzwerkresourcen wichtiger waren, als eine sauber implementierte und unter umständen sehr aufwändige Authentifikation. Wenn ein Endsystem ein ARP-Reply aufschnappt, dann wird dieser im Cache abgelegtt, unabhängig davon, ob zuvor nach dieser Adresse gefragt wurde. Hierin verbirgt sich die grundlegende Sicherheitslücke. Aber auch ein scheinbar folgerichtiger Ansatz, eine Adresse nur dann zu speichern, wenn vorher genau nach dieser Adresse gefragt wurde, lässt sich leicht austricksen, indem ein potenzieller Angreifer einfach schneller antwortet, als der Inhaber der Adresse. So kann der Angreifer natürlich eine beliebige Antwort geben, wie beispielsweise seine eigene Adresse. Ausgangssituation für das 00:b0:11:11:11:11 00:b0:11:22:22:22 10.8.4.2 10.8.4.1 B A ARP-Reply: "10.8.1.1 is at 00:b0:11:33..." 10.8.4.50 ARP-Reply: "10.8.1.1 is at 00:b0:11:33..." P 00:b0:11:33:33:33 Abbildung 5.8: im folgenden beschriebene ARP-Spoofing sei die folgende: Die beiden Hosts A und B kommunizieren miteinander. A benutzt die IP-Adresse 10.8.4.1 und die MAC 00:b0:11:11:11:11, 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 dazugehörige MAC 00:b0:11:33:33:33. Er möchte ablauschen, was A und B miteinander zu schnacken haben. Host P startet seinen Angriff, indem er die ARP-Caches der Opfer A und B ”vergiftet”22 , d.h. er injiziert gefälschte ARP-Antworten in das lokale Subnetz. P schickt an A ein ARPReply, dass die Information enthält, dass der Rechner B mit der IP-Adresse 2 unter der MAC-Adresse 00:b0:11:33:33:33 zu erreichen ist. In Wirklichkeit bekomm nun aber P die Pakete von A für B zugeschickt. Ebenso erhält B gefälschte Pakete von P, dass beinhalten, dass A mit der IP-Adresse 1 unter der MAC-Adresse 00:b0:11:33:33:33 angesprochen wird. In Zukunft schickt also A seinen Verkehr für B statt direkt zu B in Wirklichkeit zu P. Bei B gestaltet es sich genauso, er schickt seinen Verkehr für A zu P. Der Angreifer P muss nun einfach die Pakete korrekt weiterreichen, indem im Kernel IP-Forwarding eingeschltet wird. Die korrekten IP-Adressen stehen ja in den Paket-Headern, P kennt auch die korrekten MAC-Adressen. Wenn P noch ein wenig cleverer ist, dann passt er noch den HOP-Count im IP-Header an, bevor das Paket sein Interface verlässt. Da jeder Router im IP-Header den Hop-Counter um eins reduziert, muss dieser wieder erhöht werden. Andernfalls würde auffallen, dass der Weg von A nach B plötzlich um 22 hiervon stammt der Ausdruck ”Poisioning” 5.8. ADDRESS RESOLUTION PROTOCOL 00:b0:11:11:11:11 10.8.4.1 67 00:b0:11:22:22:22 IP-Kommunikation 10.8.4.1 <-> 10.8.4.2 A 10.8.4.50 Ethernet-Kommunikation 00:b0:11:11... <-> 00:b0:11:33... P 10.8.4.2 B Ethernet-Kommunikation 00:b0:11:33:33:33 <-> 00:b0:11:22:22:22 00:b0:11:33:33:33 Abbildung 5.9: mindestens einen Router länger geworden ist. Im Zuge der Weiterleitung der Pakete können diese bequem mitgelesen werden. Dabei kann der Angreifer möglicherweise Passwörter und andere geheime Daten auslesen. Zudem können Pakete auch problemlos manipuliert werden, was die Attacke noch mächtiger macht. Da der Angreifer sozusagen direkt auf dem logischen Verbindungspfad zwischen den Opfern sitzt, wird diese Art eines Angriffs auch als ”ManIn-The-Middle” bezeichnet. 00:b0:11:11:11:11 00:b0:11:22:22:22 10.8.4.2 10.8.4.1 IP-Kommunikation 10.8.4.1 <-> 10.8.4.2 A B Paketlaufzeit2 Paketlaufzeit1 10.8.4.50 Hop-Count: TTL-1 P 00:b0:11:33:33:33 Abbildung 5.10: Wenn der Angriff wieder beendet wird, muss der ARP-Cache der Opfer wieder aufgeräumt werden, d.h. es müssen erneut gefälschte ARP-Replies an A und B geschickt werden, zur Abwechslung nun mit den korrekten Paarungen von MAC- und IP-Adressen. Passiert dies nicht und P entfernt sich aus dem Netz oder deaktiviert sein IP-Forwarding, dann schicken A und B weiterhin ihren Verkehr an P. Dieser leitet ihn aber nicht mehr weiter: Die ganze Sache fällt wegen der Netzwerkunterbrechung unter Umständen auf. Insgesamt kann man festhalten, dass man nur an der ARP-Reply allein keine Auffälligkeit feststellen kann. Die Sender MAC Address stimmt überein mit der Absender-Adresse des umgebenden Ethernet-Frames, so dass es sich bei diesem Paket auch durchaus um ein echtes ARP-Reply handeln könnte. Tatsächlich ist dieses Paket aber gefälscht und Teil einer ARP-Poison-Attacke. Beim Beenden der Attacke verrät sich der Angreifer. Denn er schickt von seiner MAC-Adresse aus eine ARP-Reply, die angibt, dass seine IP-Adresse jetzt unter einer anderen MAC-Adresse zu erreichen ist. D.h. die Sender MAC Address stimmt in diesem Fall nicht überein mit der Absender-Adresse des umschließenden Ethernet-Frames. Hier kann man den Angreifer entdecken und seine MAC-Adresse ablesen. Das ”Standardwerkzeug” für ein ARP-Angriff ist das Programm ettercap. Das kann inzwischen eine ganze Reihe von ”Man-in-the-Middle” Angriffe durchführen. Hier interessieren jedoch nur die ARP-Angriffe. Ettercap ist ein Projekt, welches auf Sourceforge gehostet ist. Ettercap kennt drei verschiedene Benutzerinterfaces, eine Kommandozeilenversion, die mit ”-T” aktiviert wird, eine ncurses-basierte Textoberfläche (”-C”) und eine grafische GTK-Version. Möchte man nun den Verkehr zwischen den beiden Maschinen 10.8.4.204 und 10.8.4.204 mitschneiden, dann erreicht man das über den Aufruf: ettercap -C -M arp 68 KAPITEL 5. TCP-IP Abbildung 5.11: Ettercap in der Ncurses-Ausführung /10.8.4.222/ /10.8.4.204/. Mit ettercap -T -M arp:remote /192.168.1.1/ /192.168.1.2-10/ kann man das ARP Poisoning für das Gateway und die Rechner im Ethernet zwischen 2 und 10 laufen lassen. Die Remote-Option wird benötigt, damit man den Traffic mitbekommt, der über das Gateway geroutet wird. Ettercap dient nicht nur als Cracker-Werkzeug, es kann ebenso Administratoren eingesetzt werden, um Schwachstellen im eigenen Netz aufzuspüren. Die Illusion, dass sich Programme wie ettercap oder dsniff fernhalten lassen, kann man getrost vergessen, wo sie schon im Standardumfang vieler Von-CD-Distributionen enthalten sind. 5.8.5 Gefahrenabwehr Wie man sieht, bemerkt man einen solchen ARP-Angriff, wenn er geschickt ausgeführt wird, also wenn der HOP-Count manipuliert wird, kaum bzw. höchstens, wenn er beendet wird. Es gibt Möglichkeiten, ARP-Angriffe zu entdecken, aber es gibt kein wirksames Mittel gegen einen solchen Angriff außer einer Verschlüsselung. Das ändert natürlich auch nichts an der Tatsache, dass P immer noch die IP-Pakete abfangen und mitlesen kann, die zwischen A und B hin- und hergeschickt werden, aber wenn sie gut verschlüsselt sind, kann P nicht mehr viel damit anfangen. Für den Fall, dass P den Inhalt manipulieren will, insofern das überhaupt Sinn macht, wenn er den Inhalt nicht lesen kann, wird das auch auffallen. Verschlüsselung ist die einzige wirksame Möglichkeit. In kleinen Netzwerken, mit seltenen Änderungen der angeschlossenen Maschine ist es sogar mit vertretbaren Aufwand möglich, ARP-Angriffe komplett auszuschliessen, indem man ARP gar nicht erst verwendet. Die einfachste Variante ist die manuelle und statische Zuweisung von IP-Adressen zu MAC-Adressen. Der Admin trägt in einer Tabelle die Paarungen ein und vergibt entsprechend dieser Tabelle freie IP-Adressen. Diese Informationen stehen allen Endsystemen zum Routing zur Verfügung und sie können, außer durch den Admin, durch niemanden geändert 5.8. ADDRESS RESOLUTION PROTOCOL 69 werden. Die Verwendung von ARP wird schlichtweg überflüssig und damit fällt auch die Sicherheitslücke komplett weg. Der große Nachteil dieser Methode ist allerdings, dass sie nur sehr schlecht skalierbar ist, d.h. sobald das Netzwerk eine gewisse Größe erreicht hat, ist es einfach nicht mehr praktikabel. Dann gibt es häufige Änderungen, die zum einen kommuniziert werden müssen, aber zum anderen vor allem überhaupt erstmal vorgenommen werden müssen. Angenommen der Admin ist gerade nicht da, dann kann man z.B. keine Netzwerk-Karte auswechseln, weil man für die neue Karte keine IP-Adresse hat. Deshalb wurde ARP ja erfunden. In großen Netzwerken fällt diese Ausweichmöglichkeit also weg, weil es zu umständlich und schlecht wartbar ist. Verwendet man dann doch wieder ARP, kann man aber wenigstens die Paarungen von MAC- und IP-Adressen im Auge behalten. Zum einen fällt es natürlich auf, wenn ständig ARP-Replies geschickt werden, zumal es für diese Replies nie ein Request gab. Die gefälschten Replies müssen ja auch ständig neu geschickt werden, denn der ARPCache wird nicht ewig vorgehalten, irgendwann fällt der Eintrag von alleine wieder heraus. Eine zur statische Festlegung der der ARP-Tabelle mindestens gleichwertige Alternative stellt der Einsatz von arpwatch von Craig Leres dar, welches nach Veränderungen der IP/Ethernet-Mappings Ausschau hält. Werden Änderungen bemerkt, findet eine Alarmierung per E-Mail statt. Zudem werden die Manipulationen für eine spätere Analyse protokolliert. 5.8.6 ARP und doppelte IP-Adressen Wird einem Client-Rechner aus Versehen die gleiche IP-Adresse wie dem zur Verbindung aufgeforderten Host-System zugeteilt, können diverse Benutzer für kurze Zeit nicht auf die Dienste des Hosts zugreifen. Die verschiedenen Komponente und Eigenheiten des spezifischen Netzwerks lassen dieses Problem polymorph erscheinen, denn die Architektur des Netzes, der Einsatz von Routern, Hubs oder Bridges und die verwendete Hard- und Software haben einen entscheidenden Einfluss auf die Reaktionszeiten von ARP und dadurch auf das ganze Szenario. In deiner zur letzten Darstellung ähnlichen Situation haben der Host B und der Rechner P die gleiche IP-Adresse. Versucht nun Host A eine Verbindung zu P herzustellen, welche eine ARP-Anforderung zur Folge hat, erhält er durch das Adress Resolution Protokoll die IP-Adresse von Host B, da sowohl der Host als auch Host B antworten. Host A kann die Verbindung kaum erfolgreich herstellen, da Host B kaum in der Lage ist, mit der korrekten Dienst-Software aufzutrumpfen. Beim zweiten Versuch erhält Host A vielleicht die korrekte Antwort des Hosts, kann jedoch noch immer keine Verbindung herstellen. Handelt es sich beim Host B um einen normalen Arbeitsplatzrechner, wird dieser sehr wahrscheinlich bei längerem Nichtgebrauch ausgeschaltet. In diesem Fall taucht das Problem nur gelegentlich, zum Beispiel während den Arbeitszeiten des Benutzers am Host B, auf. Dies kann für genervte Benutzer zwischenzeitlich zum Vorteil werden, behindert jedoch die Fehlersuche des Netzwerkadministrators erheblich. Das letzte Szenario beschreibt sich einfacherweise wie folgt: Zwei Host-Rechner bedienen sich einer identischen IP-Adresse. In diesem Fall werden die Client-Maschinen gelegentlich eine Verbindung zum falschen Host herstellen, was ein korrekter Ablauf der Kommunikation unterbindet. Dieser Machtkampf ist selten anzutreffen, da es zu den Hauptaufgaben eines kompetenten Administrators zählt, bei jeder Phase des Netzwerkdesigns auf individuelle IP-Adressen zu achten. Hierbei hilft beispielsweise die Verwendung von DHCP. 70 5.8.7 KAPITEL 5. TCP-IP Proxy-ARP Mit Proxy ARP wird eine von IP-Routern genutzte Technik betitelt, die mit der Entwicklung von TCP/IP spezifiziert wurde. Der Sinn der Methode liegt in der Beseitigung einiger Probleme des begrenzten IP-Adressraums von IPv4. Durch dieses Verfahren können Router unsichtbar gemacht werden und Teilnetze bequem auf andere Interfaces geroutet werden. Der Linuxkernel unterstützt Proxy-ARP, womit sich recht komplexe Router aufbauen lassen. Nicht nur aufgrund des Wachstums eines Netzwerkes kann relativ schnell und verhältnismässig unerwartet der Punkt der physikalischen Beschränkung einer Einführung zusätzlicher Host in das System erreicht werden. In diesem Falle kann das Netz nur durch ein zweites unabhängiges physikalisches Kabelsystem erweitert werden. In den Kinderjahren von TCP/IP, vor dem Erfinden von Netzmasken und Brücken, konnten zwei Kabelsysteme nur mit einem für zwei verschiedene IP-Ranges konfigurierten Router verbunden werden. Repeater waren aufgrund des Fehlens der Notwendigkeit von Filterungsfunktionen für diese Arbeit nicht geeignet. IP-Adressen wurden damals rigoros und verschwenderisch vergeben - man konnte es sich ja damals auch noch leisten. Wenden wir uns einem illustren Beispiel zu: Ein Unternehmen ergatterte sich die registrierte IP-Adresse der Klasse B 130.1.2.3. Die Firma benutzt die Ethernet-Technologie und möchte 2’048 Host-Rechner mit der Hilfe von TCP/IP untereinander agieren lassen. Mit der Adresse der Klasse B stehen dem Unternehmen 65’534 mögliche Hostadressen zur freien Verfügung. Da man jedoch Ethernet einsetzt, können maximal 1’024 Host in einem Segment eingebunden werden. Die Implementierung weiterer Systeme erfordert das Nutzen eines Routers oder einer Bridge. Um nun trotzdem die erste angestrebte Anzahl Host zu erreichen, muss ein zweites autonomes Kabelsystem angelegt werden, welches aufgrund des regen Datenverkehrs mittels Router an das erste angeschlossen wird. Konventionelle Router erfordern, dass den jeweiligen Schnittstellen differente IP-Adressen zugeteilt werden. Obwohl von den 65’534 Adressen der Klasse B nur 1’024 gebraucht wurden, können die restlichen 64’510 Adressen nicht verwendet werden; also offenbahrt sich eine Vergeudung in höchstem Maße. Damit der Router einwandfrei arbeiten kann, muss ihm eine zweite IPAdresse der Klasse B zugeteilt werden, und damit sind erneut ganze 65’510 IP-Adressen verschwendet. Dieses Vorgehen ist aus technischer Sicht in keinster Weise akzeptabel; abgesehen von privaten autonomen Netzwerksystemen ohne registrierte IP-Adressen. Das Internet Protokoll bedient sich ARP, um die MAC-Adresse einer Einheit zu ermitteln, sofern die Netznummer in der eigenen IP-Adresse der des Empfängerknotens entspricht. Andernfalls kommt ein routendes Element (Router oder Gateway) zum Einsatz. Damit möglichst wenige IP-Adressen verschleudert werden, ist es aus technischer Sicht wünschenswert den beiden Interfaces des routenden Systems die gleiche Netznummer zuzuteilen. Wird jedoch dieselbe Netznummer verwendet, muss man ein Verfahren finden, mit dem man die Richtung der Weiterleitung von Datagrammen eindeutig erkennen kann. Proxy ARP ist in diesem Fall einer der Schlüssel. Proxy ARP kann auf verschiedenste Weisen implementiert werden. Als die effizienteste Methode ist die Zuordnung von Bits in der IP-Adresse, anhand derer unterschiedliche Subnetze identifiziert werden können, anzusehen. Das Relais kann als eine Art Puffer die unnötigen ARP-Rundsende-nachrichten abblocken, da nur die an andere Subnetze adressierten Broadcasts weitergeroutet werden müssen. Damit kann der überschüssige Netzwerkverkehr eingedämmt und die Performance gewahrt werden. Die einzigen Hops, die die elementaren Bits zur Kennzeichnung der verschiedenen Subnetze erkennen können müssen, sind die Proxy ARP-Geräte. Natürlich erfordert das erreichen dieses Ziels eine durchdachte Zuweisung des richtigen Adressbereichs von seiten des Netzwerkadministrators. Beispiels- 5.8. ADDRESS RESOLUTION PROTOCOL 71 weise könnten die ersten vier Bits des Host-Anteils der IP-Adresse zur Identifizierung der verschiedenen Subnetze eingesetzt werden. Dabei wird jedoch nicht, wie von vielen vielleicht vermutet, mit Subnetz-Masken gearbeitet oder die Adressenstruktur des Endknotens bekannt. Es können nun also 14 Subnetze dadurch definiert werden (Die Subnetze 0 und 15 finden in diesem Beispiel aus Gründen der Einfachheit keine Verwendung!). Empfängt nun die Schnittstelle 1 eine ARP-Anforderung, überprüft die Proxy ARP-Vermittlungseinheit die Bits in der Hostadresse darauf, ob die Nachricht ein anderes Subnetz kennzeichnet. Wird der Gutfall erkannt, findet eine Weiterleitung an die Schnittstelle 2 statt. Dort wird dann die Absenderadresse durch jene der Proxy ARP-Schnittstelle 2 ersetzt und als üblicher ARP-Broadcast ins Neuland geblasen. Die jüngst von der ganzen Aktion betroffene Proxy ARP-Einheit speichert die in der ARP-Antwort vermerkte MAC-Adresse des Absenders, sowie des Empfängerknotens und vermerkt an welcher Schnittstelle sich diese befinden. Wird vom Absender nun nocheinmal ein Datagramm an die Schnittstelle 1 des Routers gesandt, enthält dieser bereits die Empfängeradresse der Proxy ARP-Einheit. Das Datagramm wird daher direkt von der Proxy ARP-Einheit angenommen. Die Proxy ARP-Einheit ersetzt nun wiederum die tatsächliche MAC-Adresse des Empfängerknotens und sendet das modifizierte Datagramm an die Schnittstelle 2. Diese Methode funktioniert nur, wenn die beiden Endknoten die Gültigkeit der MAC-Adressen in den jeweiligen ARP-Antworten nicht überprüfen. Es ist durch dieses ganze Prozedere möglich, mit einer beliebigen MACAdresse zu antworten, die als Ersatz eines anderen Hosts fungiert. Der ARP-Cache eines Endknotens, der sich in einem Proxy ARP-System befindet, enthält die MAC-Adresse der Proxy ARP-Einheit, die vielen IP-Adressen zugeordnet ist. Diverse Firewall-Systeme erlauben das Verwerfen von durch Proxy ARP modifizierten Datagrammen, um so entfernte Manipulationen am ARP-Cache zu unterbinden. 5.8.8 Probleme durch Proxy-ARP Viele Router verwenden per Default-Einstellung Proxy ARP, auch wenn keine SubnetzAdressierungs-schema zum Einsatz kommen. Das Router-Element greift insofern beim Empfang einer ARP-Anfor-derung für ein anderes Netz oder Subnetz manipulativ in das Geschehen ein, indem es seine eigene MAC-Adresse in der ARP-Antwort zurückschickt. Zur Übermittlung des Datagramms an den Empfänger werden die herkömmlichen RoutenwahlMechanismen eingsetzt. Dieser Fall kann jedoch nur eintreten, wenn ein verwirrter oder falsch konfigurierter Rechner das Gefühl des Sich-in-einem-anderen-Netz-Befinden hat und der Router sich an ein anderes Bild der Adressenstruktur klammert. Es läge also ein klassischer Adressierungs-Fehler vor, da zwei Geräteeinheiten die IP-Adresserungsschematas komplett anders interpretieren. Grund dafür kann die Wahl unterschiedlicher SubnetzMasken sein. Die beiden Geräte würden so mit einer Netzstruktur arbeiten, die für die Opposition nicht erkennbar und verständlich ist. Denial of Service durch ARP-Stürme Der Denial of Service-Angriff mittels ARPSturm hat die Überlastung einer Netzwerkkomponente oder eines Netz(abschnitt)es zur Folge, was unter Umständen einen weiteren weniger destruktiven Angriff erst ermöglicht (z.B. IP-Spoofing). Die Extremsituation tritt ein, wenn ARP-Broadcasts eine non-existente IP-Adresse in Erfahrung bringen versuchen. Alle an das Netzwerk angeschlossenen Gateways beginnen alsdann mit dem Weiterleiten der Anfrage an die Nachbarnetze. Ganz extrem wird dieser Angriff, wenn nach dem ersten Briadcast-Sturm synthetische ARP-Rückantworten der nicht existierenden Adresse versendet werden, die wiederum von den Gateways per Broadcast zur finalen Verstopfung des Netzes weiterverbreitet werden. Solche Broadcast- 72 KAPITEL 5. TCP-IP Stürme belegen rasch einen Grossteil der Netzwerkkapazität und lassen die Performance in den Keller sinken. Wichtig ist in sensiblen Umgebungen im Vorfeld das sogenannte MediaSpeed-Verhalten durch experimentell simulierte Extremsituationen in Erfahrung zu bringen. HAVOC für UNIX/Linux ist ein beliebtes Tool zum Erzwingen von ARP-Stürmen. Denial of Service durch ARP-Fehlimplenetierungen Auch auf Fehlimplementierungen der ARP-Funktionalität können Denial of Service-Attacken abzielen, wie im NetBSD Security Advisory 1999-010 (ARP table vulnerability) berichtet wird: obsd fun.c schickt übergrosse ARP-Pakete an eine OpenBSD 2.6-Maschine, und zwing sie so zur Kernel-Panik. Aber nicht nur UNIX-Derivate sind von solchen Schlampereien betroffen. Auch Microsot Windows, welches eine Menge Code von BSD direkt übernommen haben muss, kann mit den C-Scripts winarp.c und poink.c auf die Pelle gerückt werden. Diese Angriffs-Form wird im Thread von Joel Jacobson in Bugtraq erstmals vorgestellt. Ähnliche Diskussionen finden sich in den beiden Threads von Andrew Lancashire und Lisa Napier über DoS-Attacken auf Cisco-Systeme, und von Scott Blake über Cabletron-Router, durch das Überfluten der ARP-Tabelle. 5.9 ICMP - Internet Control Message Protocol Das ICMP dient zur Übermittlung von Fehler- und Statusinformationen. ICMP wird auch von IP selbst verwendet, um beispielsweise Fehler zu melden. ICMP ist daher zwingend in IP vorhanden; funktional gesehen ist es Teil von IP, technisch setzt es jedoch auf IP auf. ICMP kann aber auch direkt von Applikationen verwendet werden. ICMP Pakete werden verwendet, wenn beispielsweise der Zielrechner oder das Zielnetzwerk nicht erreichbar ist. In diesem Fall gibt ein TCP/IP Router beispielsweise ein ”host unreachable” bzw. ”network unreachable” Paket zurück. ICMP ist im Network Layer angesiedelt, ist aber eigentlich kein wirklich eigenständiges Protokoll, da die Übermittlung von ICMP-Nachrichten durch IP-Pakete erfolgt und dazu dient, die Übertragung von den eigentlichen Daten zu steuert. ICMP ist damit kein Datenfluss sondern ein Kontrollfluss, der den Datenfluss steuert. Durch seine Vielseitigkeit bietet ICMP aber auch leider die Möglichkeit versteckte Nachrichten zu übermitteln. Ein Stichwort ist hier das sogenannte ”ICMP-Tunneling”. Beim ICMP-Tunneling wird das Datenfeld eines ICMP-Paketes genutzt, um Informationen zwischen Rechnern auszutauschen. ICMP-Tunneling ist aber keine Technik, die es eventuellen Datenspionen ermöglicht, in einen Rechner oder ein Netz einzubrechen. Dennoch stellt das Tunneling eine Bedrohung für das Sicherheitskonzept eines Netzes dar. Eine recht bekannte Anwendung von ICMP ist das Programm ping, mit dem man die Erreichbarkeit eines anderen Rechners prüfen kann. Dazu wird ein ICMP echo request an den Zielrechner geschickt, dieser sendet ein ICMP echo reply zurück, wenn er denn verfügbar ist. Ping ist ein einfaches Shell-Kommando und wird mittels ”ping Zieladresse” aufgerufen. dirk@linux:~/nwak> ping 134.76.60.86 PING 134.76.60.86 (134.76.60.86) from 132.230.9.124 : 56(84) bytes of data. 64 bytes from 134.76.60.86: icmp_seq=1 ttl=47 time=21.1 ms 64 bytes from 134.76.60.86: icmp_seq=2 ttl=47 time=23.2 ms 64 bytes from 134.76.60.86: icmp_seq=4 ttl=47 time=20.9 ms --- 134.76.60.86 ping statistics --4 packets transmitted, 3 received, 25% loss, time 3019ms rtt min/avg/max/mdev = 20.952/21.774/23.243/1.041 ms 5.10. DOMAIN-NAME-SERVICE (DNS) 73 ICMP wird meistens von IP für den Benutzer unsichtbar verwendet, zum Beispiel um herauszubekommen, wie groß ein Paket sein kann, das von Link Protokoll übertragen werden kann, oder um Fehler zu melden. ICMP hat sehr unterschiedliche Informationen zu transportieren. Deshalb ist nur der Grundaufbau des ICMP-Headers immer gleich, die Bedeutung der einzelnen Felder im Protokollkopf wechselt jedoch. Jeder ICMP-Nachrichtentyp wird in einem IP-Datengramm eingekapselt. Die derzeit wichtigsten ICMP-Nachrichtentypen sind: • Destination Unreachable (Ziel nicht erreichbar) - Diese Nachricht wird verwendet, wenn ein Netzwerk, Host, Protokoll oder Port nicht erreichbar ist, ein Paket nicht fragmentiert werden kann, weil das DontFragment-Bit gesetzt ist oder die Source Route Option nicht erfolgreich verwendet werden konnte. • Parameter Problem - Verständigt den Absender eines Datengramms darüber, dass das Paket aufgrund einer fehlerhaften Angabe im IP-Header verworfen werden mußte. • Redirect - Wird ausgesendet, wenn ein Router feststellt, dass ein Paket falsch weitergeleitet wurde. Der sendende Host wird damit aufgefordert, die angegebene Route zu ändern. • Time Exceeded (Zeit verstrichen) - Diese Nachricht wird an den Absender eines Datengramms gesendet, dessen Lebensdauer den Wert 0 erreicht hat. Diese Nachricht ist ein Zeichen dafür, dass Pakete in einem Zyklus wandern, dass Netz überlastet ist oder die Lebensdauer für das Paket zu gering eingestellt wurde. • Echo Request und Reply - Mit diesen Nachrichten kann festgestellt werden, ob ein bestimmtes Ziel erreichbar ist. Ein Echo Request wird an einen Host gesendet und hat einen Echo Reply zur Folge (falls der Host erreicht wird). Das Ping-Kommando nutzt diese Eigenschaft des ICMP. • Timestamp Request und Reply - Diese beiden Nachrichten sind ähnlich den zuvor beschriebenen Nachrichten, außer dass die Ankunftszeit der Nachricht und die Sendezeit der Antwort mit erfaßt werden. Mit diesen Nachrichtentypen kann die Netzleistung gemessen werden. Eine ICMP-Nachricht wird immer als Antwort auf ein Datengramm verschickt. Entweder ist ein Datengramm auf ein Problem gestoßen, oder das Datengramm enthält eine ICMP-Anfrage, auf die eine Antwort versendet werden muss. In beiden Fällen sendet ein Host oder Router eine ICMP-Nachricht an die Quelle des Datengramms zurück. 5.10 Domain-Name-Service (DNS) Der Domain-Name-Service ist ein auf TCP/IP basierender Dienst und kein Bestandteil der Vermit-tlungs- bzw. Transportschicht. Jedoch werden vielfach Maschinen nicht primär über ihre Netzwerkadresse, sondern ihren Hostnamen und evtl. Domainnamen, die zusammen den Full Qualified Domain Name ergeben, angesprochen. Deshalb wird dieser Dienst an dieser Stelle bereits kurz vorgestellt. In der Benutzung hat man meistens clientseitig mit DNS zu tun, die Serverseite wird in einem eigenen Abschnitt gesondert vorgestellt. Fast jede Maschine im Internet besitzt neben der numerischen Adresse (IP-Nummer) mind. einen sybolischen Namen (Hostname). ”Nameserver” kennen die zu den symbolischen Namen gehörenden IP-Adressen und umgekehrt. Wenn man Nameserver direkt abfragen will, kann 74 KAPITEL 5. TCP-IP Kürzel gov de net Bedeutung governemental Deutschland Netzwerk Kürzel com edu org Bedeutung Unternehmen (”commercial”) Ausbildungseinrichtung Organisation Tabelle 5.9: Die traditionellen Domänenendungen Kürzel name eu ws Bedeutung Privatpersonen Europa ”WebSite” Kürzel biz info int Bedeutung Unternehmungen Informational Internationale Organisationen Tabelle 5.10: Die von der IANA beschlossenen/vorgesehenen neuen Domänenendungen man das mit den Kommandos host oder nslookup machen. Mittels DNS (Domain-NameService) werden die Hostnamen in einen hierarchischen Namensraum eingegliedert, wobei geografische Gesichtspunkte (Länderdomains, wie ”de”) oder organisatorische Gründe (Firmen) Ausrichtungskriterien abgeben können. Die Organisation von Namen in einer Hierarchie von Domains schafft gleichzeitig die Schwierigkeit der Eindeutigkeit von Namen aus der Welt. Bei DNS muß ein Hostname nur innerhalb einer (Sub-)Domain eindeutig sein, und schon ist sichergestellt, dass er sich von allen anderen Hosts weltweit unterscheidet (Sonst wäre der beliebte Aliasname ”www” nicht möglich!). Mehr noch, voll qualifizierte Namen sind einfacher zu merken. Der FQDN (Full Qualified Domain Name), die Kombination aus Hostnamen und der Domain (incl. evtl. Subdmomainnamen) wird durch Punkte in Bestandteile gegliedert, die über den Namen und die Zugehörigkeit des Rechners Auskunft geben. Das erste Wort des FQDN ist der sogenannte ”hostname”, der hintere Teil des FQDN ist der ”domainname”. Während der ”domainname” vorgegeben ist, hat man bei der Taufe des Rechners freie Wahl. Neben Namen, die in Zusammenhang mit der domain stehen (s.o.) sind außerdem Comic-Helden, Romanfiguren, berühmte Personen, antike Götter usw. sehr beliebt. Dem Rechner kann man auch weitere Namen verpassen, sogenannte Aliase, die meistens die Funktion der Maschine ausdrücken, z.B. www.goe.net, ftp.gwdg.de ... Zu befragende Nameserver unter Linux werden in der Datei /etc/resolv.conf fest vermerkt oder dynamisch per Bootp/DHCP oder durch die Modem- bzw. ISDN-Skripten nach dem Bezug per PPP eingetragen. Diese Datei hat folgendes Format: search kolosseum.local goe.net gwdg.de nameserver 10.10.156.1 nameserver 134.76.60.21 Die ”search” Order definiert, welche Domainnamen an Hostnamen angehangen wurden, die ohne Domainkürzel angesprochen wurden: ”ping test” würde versuchen zuerst ”test.kolosseum.local”, dann ”test.goe.net” und zum Schluss ”test.gwdg.de” zu ergänzen und aufzulösen. So kann man sich beim Bewegen in der eigenen Domain viel Tipparbeit sparen. Es können maximal zehn Ergänzungen der Suchreihenfolge und maximal drei Nameserver angegeben werden. Der zweite und dritte DNS werden nur befragt, wenn der erste nicht reagierte, nicht jedoch, wenn die Anfrage auf dem ersten keinen Erfolg brachte. 5.11. TRANSMISSION CONTROL PROTOCOL (TCP) 5.11 75 Transmission Control Protocol (TCP) Mit der Übertragung von Datagrammen (IP-Paketen) von einem Netzwerkknoten zum anderen ist es nicht getan. Wenn man sich remote einloggen möchte, z.B. mit dem Kommando ssh oder Daten von einem Webserver bezieht, ist hierfür eine zuverlässige Verbindung die Voraussetzung. Der Datenstrom wird zum Transport in Pakete aufgeteilt, da grosse Dateien 32bit SOURCE PORT DESTINATION PORT SEQUENCE NUMBER ACKNOWLEDGEMENT NUMBER TCP-H Length U A R C G K unused P R S S H T S Y N F I N CHECKSUM WINDOW SIZE URGENT POINTER OPTIONS (0 or more 32bit words) BEGINNING OF DATA (optional) Transmission Control Protocol (TCP) Abbildung 5.12: TCP Paket-Header nicht ”in einem Stück” transferiert werden können und interaktive Verbindungen zeitnah laufen sollen, d.h. nicht ewig gewartet werden kann, bis ein grosses Paket ”voll” ist. IP ist (absichtlich) nicht zuverlässig. Überlastungen im Netzwerk werden durch das ”Vergessen” von Paketen gelöst. Die Verantwortung für die Integritätsprüfung und die Vollständigkeit der Daten übernehmen die beiden kommunizierenden Rechner, die fehlerhafte Daten erkennen sollen und diese im Fehlerfall erneut anfordern. Diesen Part übernimmt ein weiteres Protokoll, das Transmission Control Protocol (TCP). Dieses stellt einen zuverlässigen Dienst über IP-Verbindungen her. Da es auf IP aufsetzt, muss sich TCP um den ”Weg”, das Routing durchs Netz, keine Gedanken machen. TCP bringt seine Informationen wiederum in einem Header unter: Dieser ist 20 Bytes lang. Eine TCP-Verbindung kann man sich am besten wie ein Telefonat vorstellen. TCP identifiziert die Endpunkte einer solchen Verbindung anhand der IP-Adressen der beiden Rechner und der Nummer eines sogenannten Ports auf jedem Host. Ports können Sie sich als eine Art Ein- und Ausgang für Netzwerkverbindungen vorstellen. Diese Adressierung kann man mit einem Haus (IP-Nummer) und den verschiedenen Türklingeln (PortNummern) vergleichen. Auf einer Unix-Maschine kann man sich die Zuordnung von Diensten zu Ports in der Datei /etc/services ansehen. In TCP/IP-Suite übernimmt das Transmission Control Protocol die Aufgaben der Transportschicht. Es etabliert ein verbindungsorientiertes Protokoll, welches auf dem verbindungslosen Internet-Protokoll aufsetzt. Dadurch gelingt es, einen zuverlässigen Bytestromes in einer End-zu-End-Ver-bindung auf einem unzuverlässigen Netzverbund aufzubauen. TCP nimmt Datenströme von Benutzerapplikationen entgegen und teilt diese in maximal 64 kByte grosse Blöcke auf. Diese Datenblöcke, Datagramme23 genannt, werden wiederum mit einem Header versehen. Das so gebildete Datagramm wird dann an die IP-Schicht 23 zur Unterscheidung von den Datenblöcken der Hardwareschicht ”Frames” und den Datenblöcken der Vermittlungsschicht ”Packet” 76 KAPITEL 5. TCP-IP weitergeleitet. Da IP selbst keine Zustellbestätigung kennt muss TCP diese implementieren und bei Bedarf ein Neuverschicken verlorengegangener oder beschädigter Pakete veranlassen. Weiterhin muss die Reihenfolge der Pakete kontrolliert und evtl. korrigiert werden. Da auf einem Host mehrere Datenströme möglich sein sollen und nur eine IP-Adresse vergeben wird, erfolgt die Definition von speziellen Endpunkten. Diese Endpunkte werden als Sockets bezeichnet. Jedes Socket hat eine Socketnummer. Diese besteht aus der IP-Adresse des Hosts und einer 16 bittigen Portnummer. Ein Socket kann mehrere Verbindungen verwalten, wobei jedoch jedes Quadrupel aus Quelladresse und -port und Zieladresse und -port eindeutig sein muss. Portnummern unterhalb von 256 bzw. 1024 sind für sogenannte ”well-known services” reserviert. Hier findet man die Standarddienste Weitere sechs Ein-Bit-Felder des HeaService ftp ssh telnet smtp http ldap Port-Nummer 21 22 23 25 80 389 Service pop3 ntp rsync imaps pop3s ldaps Portnummer 110 123 873 993 995 636 Tabelle 5.11: TCP-basierte Standardservices ders sind für diverse Flags vorgesehen. Sie steuern das Verbindungsverhalten eines TCPDatenkanals. Das Flag Push signalisiert, dass keine Datenpufferung stattfinden soll, d.h. dass die Datagramme nicht vollständig aufgefüllt werden sollen. Dieses ist bei interaktiven Verbindungen, wie ssh, telnet und dem Steuerkanal von ftp sinnvoll. Sonst müßte man warten bis z.B. der User an die eintausend Zeichen getippt hat, um ein Paket zu verschicken. Synchronize, Acknowledge, Reset und Finish dienen der Verbindungssteuerung. Mit Urgend kann das ”Dringlichkeitsflag” gesetzt werden. Dann zeigt der Urgendpointer, der in einem weiteren Datenfeld des Headers untergebracht ist, auf das Paket welches sofort behandelt werden soll. Damit kann eine ”Out-of-Band” Signalisierung erfolgen. Das Feld für die Header-Länge gibt die Zahl der verwendeten 32 bit-Worte an. Damit ist das Startfeld der Daten bekannt. Ein Analogon findet man im Fragment Offset des Internet-Protokolls. Sequence- und Acknowledgenummern dienen der Kontrolle der Paketreihenfolge und sollen die Sicherheit einer Verbindung erhöhen. Letzteres darf jedoch nicht dazu verführen, anzunehmen, dass eine TCP-Sitzung sicher vor bewußter Manipulation oder Mitlauschen ist. Da alle Daten offen, d.h. unverschlüsselt, übertragen werden, können Angreifer versuchen die Acknowledge- und Sequencenummern zu raten und damit einen Datenstrom übernehmen. Diese Nummern werden quasizufällig beim Verbindungsaufbau gesetzt24 und dann jeweils um eins (bzw. in späteren Implementationen auch andere zufällige Integer-Beträge) erhöht. Die Window-Size, ein weiteres Feld des TCP-Headers, erlaubt Flusskontrolle. Damit kann die Geschwindigkeit einer Verbindung gesteuert werden, in dem die Datenmenge bestimmt wird, nach der Paketbestätigungen verschickt werden. Hierbei findet das Sliding24 Da das Verfahren möglichst schnell und effizient arbeiten soll, wurde bei früheren TCPImplementationen die Zahl einfach erhöht, aus dem Zeittakt abgeleitet etc. 5.12. USER DATAGRAM PROTOCOL (UDP) 77 Window-Verfahren Anwendung. Damit wird ein Zeitfenster eröffnet, in dem eine Paketbestätigung eingegangen sein muss. TCP benutzt eine aufwendige ”State-Machine” für die eindeutige Charakterisierung des jeweiligen Verbindungszustandes. Der Verbindungsaufbau erfolgt mittels des sogenannten ”Three-Way-Handshakes”. Erst nach einem erfolgreichen Verbindungsaufbau kann ein Datentransfer stattfinden. Für Verbindungsabbau erfolgt ein ”geordneter Abschluss” analog zum Aufbau. 5.12 User Datagram Protocol (UDP) In vielen Fällen der Netzwerkkommunikation genügt die Übertragung eines einzigen Paketes zur Informationsübermittlung in jede Richtung. Der Aufwand würde durch das vorgeschaltete 3-Wege-Handshake, welches TCP implementiert, und den geordneten Abbau der Verbindung gewaltig angehoben. Dadruch entstünde eine unnötige Belastung des Netzwerkes. Ein weiteres in IP-Netzwerken verwendetes Protokoll ist das im Gegensatz zu TCP ungesicherte User Datagram Protocol (UDP). Mit UDP werden einzelne Pakete an den entsprechenden Dienst gesandt, ohne dafür eine Verbindung aufzubauen. Klassischerweise verwenden NFS, SNMP und RWHO UDP. Die Grösse des Paketheaders beträgt bei UDP 8 Byte und ist damit gegenüber TCP erheblich geringer. Beispiele für die Anwendung eines solchen sparsamen Protokolls sind das DHCP (Dynamic Host Configuration Protocol) oder DNS (Domain Name System). Die genannten Protokolle finden nur (DNS sehr viel) im LAN statt - dieses zeichnet sich üblicherweise durch sehr geringe Fehlerraten aus. Mit UDP wurde das Design eines sehr einfachen Protokolls der Transportschicht geschaffen, welches IP mit Transportfunktionalität ausstattet. Das User Datagramm Protocol ist verbindungslos und implementiert nur einen einfachen Header. 32 bit Source Port Destination Port UDP Length UDP Checksum User Datagram Protocol Abbildung 5.13: UDP Paket-Header UDP verwendet wie TCP 16 bittige Portnummern, womit 65.536 UDP-Ports auf einer Maschine verfügbar sind. Diese können komplett parallel zu den TCP-Ports verwendet werden. Weiterhin wird die Paketlänge und eine Prüfsumme vermerkt. UDP kennt keine Bestätigungsmeldungen und keine Prüfung auf Reihenfolge. Der UDP-Header ist immer 8 Byte lang25 . Deshalb erhält man sehr geringe Latenzzeiten. Es eignet sich gut für Broadcasts. Alle weiteren Aufgaben, die TCP zusätzlich implementiert, müssen bei der Verwendung von UDP von der Applikation übernommen werden. UDP-Pakete können auch per Broadcast an alle Hosts des lokalen Netzes versandt werden, die IP-Adresse des Empfängers ist dann 255.255.255.255. Das Programm rwhod verwendet dieses Verfahren, um eingeloggte Benutzer und die Uptime der Maschinen in einem Netzwerk zu ermitteln. Auf diese Weise können recht einfach Systeme realisiert werden, die bestimmte Listener suchen. Diese melden sich auf einen solchen Broadcast dann mit einem 25 zum Vergleich: TCP hat 20 Byte plus evtl. Optionen 78 KAPITEL 5. TCP-IP entsprechenden Paket; alle anderen bekommen das Paket erst gar nicht oder müssen sich einfach an ”alle” wenden. Broadcast-Pakete gehen nur einmal über die Netzwerk-Leitung. Es wird also nicht für jeden Teilnehmer ein getrenntes Paket verschickt. Die LeitungsBelastung ist also gleich der beim Versenden eines Pakets an nur einen Peer. 5.13 Ports Ports wurden im Zusammenhang der Transportprotokolle UDP und TCP bereits kurz erwähnt, aber kaum erklärt. Dies soll an dieser Stelle nachgeholt werden. Über das TCP und UDP Protokoll können Daten zu einem anderen Rechner übertragen werden. Nun hat man aber häufig mehrere Dienste auf einem Rechner, und möchte gleichzeitig mit mehreren Diensten kommunizieren können. Da also ein Rechner in der Regel mehr als einen Dienst anbietet (z.B. FTP, Telnet, POP, ...), muß man neben der IP-Adresse ein weiteres Adressierungsmerkmal finden. Dies sind die sogenannten Ports. So erreicht man z.B. den Dienst FTP auf einem Rechner in der Regel über TCP Port 21, Telnet läuft über TCP Port 23, DNS auf UDP Port 53. Hinter jedem Port steht auf dem Rechner ein Prozeß, der auf Anfragen wartet, hinter Port 21 entsprechend der FTP-Daemon. Solche üblichen und allgemein bekannten Ports nennt man ”well-known ports”. Man sollte die Informationen nicht verwechseln. Adressen sind Teile von IP. Ports sind Teile von UDP und TCP. Es gibt damit also keine IP-Ports, sondern nur UDP Ports und TCP Ports. In der Datei /etc/services sind etliche ”well-known ports” aufgeführt. 5.14 Aufgaben 5.14.1 Internets 1. Warum wurde ein weiteres (hardwareunabhängiges) Netzwerk-Protokoll mit TC/IP geschaffen? 2. Welche anderen Netzwerkprotokolle sind auf der gleichen OSI-Schicht anzusiedeln, wie TCP/IP? Warum spielen die meisten eigentlich keine Rolle mehr? 5.14.2 Internet Protokoll / Header 1. Wozu dient das TTL-Feld im IP-Header? 2. Man ergänze mindestens vier IP-Header-Felder! 3. Anhand welchen IP-Header-Felds kann man unter Umständen erkennen, wieviele Maschinen hinter einer maskierenden Firewall (NAT) laufen? 4. Ein Rechner hat ein IP-Datagramm empfangen und erfolgreich ausgewertet. Woher weiss die Maschine, an welche höhere Netzwerkschicht der Inhalt dieses Pakets (die sog. Payload) weitergereicht werden soll? 5.14. AUFGABEN 79 5. Welches Protokoll auf welcher Schicht des TCP/IP-Stacks benutzt das Kommando ping (zur Feststellung der Erreichbarkeit von Rechnern)? 6. Was macht das ToS (Type of Service) Feld im IP-Header? Weshalb wird es meistens ignoriert? 5.14.3 IP-Netze 1. Was unterscheidet die folgenden IP-Nummern im Netz 134.76.60.0/24: 132.230.4.0, 132.230.4.232, 132.230.4.255, 132.230.4.254, 132.230.4.1 voneinander? 2. Wie konnte ein Router früher schon an der IP-Adresse erkennen, um was für ein Netz (Netzmaske) es sich handelt? Weshalb hat man dieses Konzept aufgegeben? 3. Wenn man ein Class-C-Netzwerk (Netzmaske 255.255.255.0 in vier Subnetze aufspaltet, wieviele Maschinen können dann in jedem Netz adressiert werden? Erkläre die Entscheidung! 4. Einem ISP wurde der Nummernblock 82.17.23.0/17 zugeteilt. Nun soll dieser Bereich in vier gleiche Subnetze aufgeteilt werden. Wie lauten diese? 5. Ein Netzwerk habe die Subnetzmaske 255.255.248.0. Wievele Maschinen können maximal in diesem Netz adressiert werden? 6. Ist eine Subnetzmaske der Form a) 255.255.255.128 oder b) 255.255.213.0 zulässig? Man begründe die Entscheidung! 7. Was versteht man unter IP-Spoofing? Läßt es sich verhindern; warum oder warum nicht? 8. Man bastele eine (hypothetische) Netzmaske, die Rechner mit geraden IP-Adressen in ein und mit ungeraden Adressen in ein anderes Subnetz legt! 5.14.4 Fragmentierung 1. Warum bietet IP die Möglichkeit Pakete zu fragmentieren? 2. Was versteht man unter Path MTU Discovery (PTMUD)? Die MTU (Maximum Transfer Unit) gibt die maximale Paketgröße auf dem Data Link/physikalischen Layer an. 3. Wodurch kann PMTUD von Routern (ungewollt) verhindert werden? 80 KAPITEL 5. TCP-IP 4. Warum arbeitet man bei der Fragmentierung mit Offsets und schreibt nicht einfach die Größe des Fragments in das Feld? 5. Man betrachte die Verschickung eines 4000 Byte Datagramms über ein Netzwerk mit einer MTU von 900 Byte. Dabei sei das Original mit der Identifikationssnummer 345 bezeichnet worden. Wieviele Fragmente werden generiert? Für jedes Fragment gebe man die Identifikation, die Payload ohne IP-Header, Offset und den Inhalt des ”More Fragments” Flags an! 5.14.5 IP-Routing 1. Ein Router hat die folgenden Einträge in seiner (statischen) Routing-Tabelle: Address/Netmask 135.46.56.0/22 135.46.60.0/22 192.53.40.2/23 87.23.16.0/20 0.0.0.0/0 Next Hop Interface 0 (direkt) Interface 1 (direkt) Router 1 Router 2 Router 3 Wo schickt der Router Pakete mit folgenden Zieladressen lang: 135.46.63.10, 192.53.45.12, 87.23.33.189, 135.46.52.2, 87.23.19.55, 192.53.40.7? 5.14.6 ARP 1. Warum wird eine ARP-Anfrage in einem Broadcast-Frame (Ethernet, TokenRing, ...) geschickt? Wie sieht so ein spezielles Frame aus? 2. Warum kommt die ARP-Antwort in einem Frame mit einer spezifischen Zieladresse zurück? 3. Braucht man ARP bei der Modem/ISDN-Einwahl? Kapitel 6 Linux im Netzwerk Linux hat sich im Laufe der Zeit zu einem der führenden Betriebssysteme entwickelt, welches auch und gerade wegen seiner vielfältigen Eigenschaften auch auf Routern1 eingesetzt wird. Router sind die zentralen Vermittlungs- und Weiterleitungsstellen im verbindungslosen, paketorientierten Internet. Linux kann neben TCP/IP auch in AppleTalk, IPX/SPX, Decnet und weiteren Netzwerken betrieben werden. Die folgenden Ausführungen werden sich jedoch nur am Rande mit anderen Netzen als dem Internet-Protokoll (IP) auseinandersetzen. Die folgenden Ausführungen zum OSI-Modell und TCP/IP haben natürlich nicht nur mit Linux zu tun, sondern betreffen alle Rechner, die über Netzwerke miteinander (mittels TCP/IP) kommunizieren können. IP-Netzwerke sind inzwischen die dominierende Form der Rechnervernetzung. Der Komplexitätsgrad und die Anforderungen an diese Netze haben stark zugenommen. Während lange Zeit die einfache Einbindung einer Linux-Maschine in bestehende Netzwerke durch Ethernet oder Modem/ISDN im Vordergrund stand, geht mit den aktuellen Kernels bedeutend mehr. 6.1 IP-Konfiguration unter Linux Die Einbindung von Linux in ein IP-Netzwerk geschieht durch die Zuweisung einer eindeutigen Adresse. Diese ist entweder weltweit erreichbar oder zumindest im lokalen Netzwerk nur einmal vorhanden. 6.1.1 Die traditionellen Tools Die Konfiguration der Netzwerkschnittstellen unter Linux erfolgt mit dem Kommando ifconfig. Aufgerufen ohne Optionen liefert es die konfigurierten Schnittstellen: shuttle:~/ > /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:60:08:38:C7:29 inet addr:10.10.156.2 Bcast:10.10.159.255 Mask:255.255.252.0 inet6 addr: fe80::240:c7ff:fe99:35ad/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3841 errors:0 dropped:0 overruns:0 frame:0 TX packets:2437 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:448759 (438.2 Kb) TX bytes:804 (804.0 Kb) Interrupt:9 Base address:0xe400 1 beispielsweise im Consumer-Bereich auf DSL- oder WLAN-Routern 81 82 KAPITEL 6. LINUX IM NETZWERK lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:3840 Metric:1 RX packets:26 errors:0 dropped:0 overruns:0 frame:0 TX packets:26 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:118360005 (12.8 Mb) TX bytes:118360005 (12.8 Mb) In der Ausgabe sieht man je nach Interface die Angaben zur definierten IP, die Hardwareadresse, wenn es sich um ein Ethernetinterface handelt, sonst den Point-to-Pointpartner (z.B. bei Modem und ISDN). Weiterhin wird angezeigt, welche Protokolle auf dem Interface registriert sind (z.B. Appletalk und IPv6 sind neben dem klassischen IPv4 denkbar), wieviel Byte die maximale Paketgrösse transportiert und die ”Kosten” (Metrik) des Interfaces. In den folgenden Zeilen gibt es Angaben zu den empfangenen und gesendeten Paketen, sowie den evtl. aufgetretenen Fehlern. Handelt es sich um ein Ethernetanschluss wird in einer weiteren Zeile die Zahl der Kollisionen vermerkt und die Länge der Queue für ausgehende Pakete. Mit dem Befehl: ifconfig eth0 10.10.156.2 netmask 255.255.255.0 broadcast 10.10.56.255 wird z.B. die erste Netzwerkkarte mit der IP-Nummer 10.10.156.2 versehen. Ist eine weitere Netzwerkkarte im Rechner enthalten und soll diese auch eingerichtet werden, dann spricht man sie mit ifconfig eth1 ... an. Möchte man auf einer Netzwerkkarte mehrere Netze bzw. IP-Nummern konfigurieren, kann dafür ein IP-Alias definiert werden, wenn in der Kernelkonfiguration ”IP-Aliasing” aktiviert wurde: ifconfig eth0:0 ... erlaubt es nun eine weitere IP auf der ersten Netzwerkkarte einzutragen. Dieses Interface wird vom Kernel getrennt von ”eth0” verwaltet, d.h. wenn ich Pakete zwischen den beiden Interfaces routen möchte, muss ich dieses im Kernel einschalten (echo "1" >/proc/sys/net/ipv4/conf/ ip forward). Ein Alias auf einer Netzwerkkarte kann man jedoch nur konfigurieren, wenn diese Netzwerkkarte bereits eingerichtet wurde. 6.1.2 Routing Im Internet geht es an jeder Stelle um die Weiterleitung von Paketen von einer Quellzur Zieladresse. Jedem Netzknoten, die Internet-Router, müssen für jedes IP-Paket neu entscheiden, wo sie es langschicken. Routingentscheidungen müssen jedoch schon auf dem Quellrechner eines Paketes getroffen werden. Dieses gilt für jede Linux-Maschine mit installiertem TCP/IP-Stack. Ist das Paket • für das Loopback-Interface bestimmt • soll es im lokalen Ethernet zugestellt werden • soll es über ein Interface laufen, an dem ein Modem hängt • soll es an das Default-Gateway im Netz weitergeleitet werden. Der Linux-Kernel muss also für alle ausgehenden Pakete entscheiden, in welches Netzwerk er die Pakete schicken soll. Hierzu verwaltet der Kernel eine eigene Routing Tabelle. Diese enthält Informationen über Routen zu anderen Netzwerkknoten speichert. Jeder Eintrag einer Route besitzt dabei einen eindeutigen Schlüssel bestehend aus der Netzwerkadresse und der Netzmaske des verbundenen Netzwerks. Der nächste Hop für ein Paket welches nicht lokal zugestellt wird, ist das Default-Gateway. Dieses Gateway muss in einem der angeschlossenen Subnetze liegen, da es sonst nicht erreicht werden kann. Üblicherweise läßt sich der Admin diese Tabelle durch route -n oder netstat -rn: 6.1. IP-KONFIGURATION UNTER LINUX linux:~ # route -n Kernel IP Routentabelle Ziel Router 10.8.1.0 0.0.0.0 192.168.15.0 0.0.0.0 169.254.0.0 0.0.0.0 127.0.0.0 0.0.0.0 0.0.0.0 192.168.15.1 Genmask 255.255.255.0 255.255.255.0 255.255.0.0 255.0.0.0 0.0.0.0 83 Flags U U U U UG Metric 0 0 0 0 0 Ref 0 0 0 0 0 Use 0 0 0 0 0 Iface eth0 eth1 eth1 lo eth1 ausgeben. In den SuSE-Linux-Distributionen werden die IP-Einträge unterhalb des Konfigurationsverzeichnisses /etc/sysconfig/network gespeichert und über das Runlevel-Skript /etc/init.d/ network start2 mittels ip aktiviert. Bezieht der Rechner seine IP dynamisch per DHCP, so wird statt ip ein DHCP-Client-Tool, wie dhclient, pump oder dhcpcd ausgeführt. Diese Dienste beziehen die IP-Konfiguration über das lokale Ethernet und tragen die Ergebnisse direkt oder per Skript dhclient-script in die Netzwerkkonfiguration ein. 6.1.3 Next Generation IP-Config Die meisten Administratoren kennen und arbeiten immer noch ausschliesslich mit den traditionellen Werkzeugen ifconfig und route. Das IProute2-Paket erlaubt jedoch eine weit höhere Flexibilität. IProute2 ist seit Kernel-Version 2.2 standardmässig für das Routing von IP-Paketen zuständig. Es beherrscht eine ganze Reihe neuer Fähigkeiten: • des Weiterleitens • des Filterns • der Klassifikation von IP-Paketen. Hierzu zählen beispielsweise das Einrichten von Backup-Gateways und das Verwenden von mehreren Default-Gateways. Wo früher nur die Zieladresse eines Paketes bei der Routing-Entscheidung eine Rolle spielte, können nun auch die Absendeadressen hierfür in Betracht gezogen werden. Ebenfalls lassen sich verschiedene Wege und Prioritäten anhand von eingesetzten höher liegenden Protokollen (TCP und UDP) und deren Ports festlegen. Auf diese Weise erhält der ”best-effort” Service IP eine Quality of Service (QoS) Komponenten verpasst. Diese ist deutlich mächtiger als die meist sporadische Verwendung der Type of Service (ToS) Flags des IP-Headers. IProute2 führt neue Kommandos ein: ip und tc sind die beiden wichtigsten. Das erste Kommando dient zur Bearbeitung der Kernel-Routing-Tabelle. Das zweite zur Manipulation verschiedener Verkehrsklassen. Letzteres ist Thema an anderer Stelle im Skript. Die Tool-Suite enthält weitere Kommandos, wie nstat, ifstat, routel, rtstat. Sie generieren Statistiken und Überblicke. 6.1.4 Das Kommando ip IProute2 stammt von Alexey Kuznetsov entwickelt. Das Projekt besteht seit 1999 und wird seit Kernel 2.2 für das lokale Routing von IP-Paketen benutzt. Folgende Aktionen kann ein Sysadmin mit IProute2 vornehmen: • Management von IP-Adressen (IPv4, IPv6) 2 Die Runlevel-Skripten sind auch direkt mit rcnetwork aufrufbar, da dieses Links aus dem Verzeichnis /usr/sbin auf die entsprechenden Runlevelskripten sind. 84 KAPITEL 6. LINUX IM NETZWERK • ARP Tabellen Management • Routing Tabellen Management • Routing Policy Database Management • IP Tunnel Konfiguration • Paket und Routen Monitor • Traffic Shaping (QoS) ip ist ein zusammengesetztes Kommando. Seine Funktion wird durch das zu bearbeitende Objekt bestimmt. Allgemein setzt sich der Aufruf von ip wie folgt zusammen: ip [OPTIONS] OBJECT [COMMAND[ARGUMENTS]|help] Die OPTIONS beeinflussen wie bei gewohnten Kommandos auch das generelle Verhalten und die Ausgabe die ip Befehls. Optionen folgen direkt nach dem Kommando und sind mit dem ”-” Zeichen eingeleitet. Sie können nicht hinter dem Objekt stehen. • -V[ersion] - gibt die aktuelle ip-Version aus. • -s[tatistics] zeigt passend zum Objekt ausführlichere Informationen an. • -f[amily] inet, inet6, link legt die die Protokollfamilie fest. • -o[neline] sorgt für die Ausgabe aller Informationen in einer Zeile. So läßt sich die Ausgabe in Skripten oft besser bearbeiten. • -r[esolve] schaltet die Namensauflösung von IP-Adressen und Netzen ein. OBJECT bezeichnet den Objekttyp. Zu diesem lassen sich Informationen ausgeben. Oder es wird eine Operation auf ihn angewendet. Das Objekt • link bezeichnet ein physikalisches oder logisches Interface bzw. Netzwerkadapter. • address ist die IPv4 oder IPv6 Adresse eines Adapters. • neighbour greift auf den Kernel ARP Cache zu. • route gibt Routing Tabellen aus und erlaubt deren Bearbeitung • rule bezeichnet eine Regel in der Routing Policy Database. • maddress dient zur Bearbeitung von Multicast Adressen. • mroute ist für Multicast Routing Cache Einträge • tunnel definiert IP-in-IP Tunnel. COMMAND spezifiziert die Aktion, die mit dem OBJECT veranstaltet werden soll. Die Art und Menge der möglichen Aktionen hängt dabei vom Objekttyp ab. Üblicherweise lassen sich Objekte hinzuzufügen (add), entfernen (delete) oder anzeigen (show). Einige Objekte kennen weniger andere weitere Aktionen. ARGUMENTS sind Kommando-Optionen. Sie hängen von der Art des Kommandos und vom Objekttyp ab. Es existieren zwei Typen von Argumenten: • flags - können durch einzelnes Schlüsselwort abgekürzt werden. • parameters - bestehen aus einem Schlüsselwort gefolgt von einem Wert. help liefert immer eine Kurzhilfe für das Kommando generell oder die Anwendung des Kommandos auf einzelne Objekte, z.B. ip help oder ip route help. 6.1. IP-KONFIGURATION UNTER LINUX 6.1.5 85 Erste Schritte mit ip Die folgenden Beispiele sollen demonstrieren, wie ip die Standardaufgaben von route, arp und ifconfig übernimmt, die ein Sysadmin üblicherweise damit ausführt. Dazu sollte man sagen, dass bereits seit einiger Zeit die beiden traditionellen Kommandos ifconfig und route im Hinterground ip verwenden. Das Anzeigen aller Interfaces mit darauf definierten IP-Adressen erfolgt durch: linux02:~ # ip addr show 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 brd 127.255.255.255 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:e0:29:0b:f9:38 brd ff:ff:ff:ff:ff:ff inet 10.8.4.254/24 brd 10.8.4.255 scope global eth0 inet 10.2.13.248/32 scope global eth0 inet6 fe80::2e0:29ff:fe0b:f938/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000 link/ether 00:0c:6e:15:03:0e brd ff:ff:ff:ff:ff:ff 4: sit0: <NOARP> mtu 1480 qdisc noqueue link/sit 0.0.0.0 brd 0.0.0.0 11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1412 qdisc pfifo_fast qlen 10 link/[65534] inet 132.230.129.2/32 scope global tun0 Die Informationen zur Routing Tabelle liefert das Kommando ip wie folgt: linux02:~ # ip route show 10.1.1.11 via 10.8.4.1 dev eth0 src 10.2.13.248 mtu 1500 advmss 1460 \ fragtimeout 64 10.8.4.0/24 dev eth0 proto kernel scope link src 10.8.4.254 169.254.0.0/16 dev eth0 scope link 10.0.0.0/14 via 10.8.4.1 dev eth0 src 10.2.13.248 127.0.0.0/8 dev lo scope link default dev tun0 scope link Das Bild sieht etwas anders als von route gewohnt aus. Administratoren mit langer IPErfahrung werden sich schnell zurecht finden und die Vorteile von ip schätzen lernen. Das Setzen einer IP-Adresse auf ein Interface oder das Hinzufügen einer weiteren, durchaus auf dasselbe, geschieht mit: linux02:~ # ip addr add 10.8.1.10/24 broadcast 10.8.1.255 dev eth0 linux02:~ # ip addr add 10.8.2.10/24 broadcast 10.8.2.255 dev eth0 linux02:~ # ip addr show eth0 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:5a:b3:d6 brd ff:ff:ff:ff:ff:ff inet 10.8.1.10/24 brd 10.8.1.255 scope global eth0 inet 10.8.2.10/24 brd 10.8.2.255 scope global eth0 86 KAPITEL 6. LINUX IM NETZWERK Die Angabe der Netzwerkmaske ist einigen vielleicht etwas ungewohnt. Statt in der klassischen Form einer IP-Adresse (hier wäre es die 255.255.255.0) erfolgt die Beschreibung durch die Zahl der Einsen im Präfix (hier 24). Die (Hardware-)Daten zu einem einzelnen Interface zeigt: linux02:~ # ip link show eth0 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:5a:b3:d6 brd ff:ff:ff:ff:ff:ff linux02:~ # ip link set eth0 down linux02:~ # ip link set eth0 address 00:20:AA:20:AA:20 linux02:~ # ip link set eth0 mtu 1400 linux02:~ # ip link set eth0 name dsl0 linux03:~ # ip link show dsl0 2: dsl0: <BROADCAST,MULTICAST> mtu 1400 qdisc pfifo_fast qlen 1000 link/ether 00:20:aa:20:aa:20 brd ff:ff:ff:ff:ff:ff Abschalten läßt es sich mit dem darauf folgenden Befehl. Wenn der Admin die MAC-Adresse des Interfaces ändern will, kann er dazu ebenfalls das Subkommando ”set” verwenden. Nur diesmal ist es nicht ein einfaches Flag (down) sondern ein Parameter gefolgt durch einen Wert (die neue Hardwareadresse). Eben dieses gilt für die Reduktion der MTU um 100 Byte oder für das Setzen eines anderen Interface-Namens. Das macht dann Sinn, wenn der Admin Interfaces beispielsweise nach ihrer Funktion kennzeichnen möchte. Anschliessend erfolgt die Anzeige der Konfiguration mit dem neuen Interface-Namen (hier dsl0). Das Interface ist abgeschaltet - zu sehen daran, dass in der Anzeige bei den Flags ”UP” fehlt. In jedem der gezeigten Aufrufe wurde das Interface direkt hinter dem Kommando (set oder show) angegeben. Mit der gesetzten Option ”-s” gibts etwas mehr zu sehen: linux02:~ # ip -s link show eth0 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:e0:29:0b:f9:38 brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 162342126 915844 0 0 0 0 TX: bytes packets errors dropped carrier collsns 1020902001 1147698 0 0 0 0 Die Statistiken zum Interface kennt man schon von ifconfig. ip zeigt sie in einer Tabelle, was die skriptbasierte Auswertung erleichtert. Mehr Informationen gibt es bei Wiederholung der Option (”-s -s”). Dann schlüsselt ip noch die Art der aufgetretenen Fehler auf. Der ARP-Cache kann mit: linux02:~ # ip neighbor show 10.8.4.220 dev eth0 lladdr 00:10:a4:8d:56:0a nud delay 10.8.4.1 dev eth0 lladdr 00:0f:66:c7:73:e8 nud stale 10.8.4.204 dev eth0 lladdr 00:08:74:4d:6f:3f nud stale ausgelesen werden. 6.2 Weitergehende Anwendungen von IProute2 In den ersten Abschnitten wurden einige IP- und Routingkonfigurationen gezeigt. Mit den IProute2-Kommandos ist jedoch noch einiges mehr drin. 6.2. WEITERGEHENDE ANWENDUNGEN VON IPROUTE2 6.2.1 87 Weitere Tools Das IProute2-Paket enthält einige weitere nützliche Programme. So liefert das Kommando nstat Statistiken des Kernels zum IP-Verkehr. linux02:~ # nstat #kernel IpInReceives IpForwDatagrams IpInUnknownProtos IpInDelivers IpOutRequests IpReasmReqds IpReasmOKs IpFragOKs IcmpInErrors IcmpInDestUnreachs IcmpInTimeExcds IcmpInParmProbs IcmpInEchoReps IcmpInTimestamps IcmpOutErrors IcmpOutTimeExcds IcmpOutTimestamps TcpActiveOpens TcpPassiveOpens [ ... ] 1011352 48960 3 953958 1255516 16824 8412 2 5437 5 222 4736 476 3 26789 26313 476 1258 323 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Diese Informationen kennen einige vielleicht schon von der SNMP-Standard-MIB. Letztendlich macht beispielsweise NetSNMP unter Linux nichts anderes, als diese Kernel-Informationen auszulesen. So erhält der Admin Informationen zu empfangenen und gesendetet IP-Paketen (IpInReceives, IpOutRequests), wieviele davon geroutet wurden (IpForwDatagrams), unroutebare Pakete (IpOutNoRoutes). Ebenfalls gibt es Statistiken zum Internet Control Message Protocol (ICMP). ICMP liefert IP-Fehlermeldungen, wenn Netzwerke, Maschinen, höherschichtige Protokolle oder Ports nicht erreichbar sind (IcmpInDestUnreachs). Ping benutzt mit Echo und Reply diesen Dienst für Tests auf Erreichbarkeit von IP-Adressen (IcmpInEchoReps). Weiterhin gibt es Statistiken zu IPv6, UDP und TCP. routel ist ein Shell-Skript und gibt eine ausführliche Kernel-Routing-Table aus. ifstat fasst die Statistiken zu Datenraten der einzelnen Netzwerkinterfaces zu einer Tabelle zusammen: linux02:~ # ifstat ifstat: history is aged out, resetting #kernel Interface RX Pkts/Rate TX Pkts/Rate RX Errs/Drop TX Errs/Drop lo 3905 0 3905 0 0 0 0 0 eth0 915949 0 1120K 0 0 0 0 0 tun0 9071 0 13359 0 0 0 0 0 RX Data/Rate RX Over/Rate 393392 0 0 0 158546K 0 0 0 3535K 0 0 0 TX Data/Rate TX Coll/Rate 393392 0 0 0 996987K 0 0 0 1090K 0 0 0 Der Befehl ss zeigt die aktuell bestehenden TCP-Verbindungen an: linux02:~ # ss State Recv-Q Send-Q Local Address:Port Peer Address:Port 88 ESTAB ESTAB ESTAB KAPITEL 6. LINUX IM NETZWERK 0 0 0 0 0 0 132.230.129.7:56946 10.8.4.254:57051 132.230.129.7:56687 132.230.1.142:ssh 10.8.4.205:microsoft-ds 134.76.63.80:ssh Zu weiteren Kommandos und ausführlicheren Beschreibungen sei auf die mitgelieferte Dokumentation oder weiterführende Literatur verwiesen. 6.2.2 Routing Policy Database Klassisches TCP/IP Routing wertet auf dem Weg eines Paketes nur dessen Zieladresse aus. Erst am Ziel wird im Falle einer Antwort die Quelladresse benutzt. Oftmals ist jedoch Routing auf der Basis von anderen IP-Header Daten wie beispielsweise der Quelladresse, des höherschichtigen Protokolls oder ToS erwünscht. Da sich einzelne Dienste gut an ihren Portnummern untscheiden lassen, soll vielfach auch der nächste Header in Betracht gezogen werden. Der Port steht im TCP oder UDP-Kopf. Diese Art des Routings bezeichnet man als Policy Routing. Viele Admins kennen dieses Konzept bereits von der Einrichtung einer Firewall. In IProute2 wird das Policy Routing durch eine Routing Policy Database (RPDB) und einem Set von Regeln implementiert. Die RPDB besteht aus 255 Tabellen, mit denen IPPakete die bestimmten Mustern folgen, geroutet werden können. Die Muster lassen sich mit dem Befehl ip rule und die Routing Tabellen mit ip route manipulieren. Immer eingerichtet sind drei vorkonfigurierte Tabellen ”local”, ”main” und ”default”. Dazu gehören drei Regeln, die bestimmen wann diese Tabellen für das Routing aufgerufen werden sollen. Die Regeln werden in der Reihenfolge ihrer Priorität abgearbeitet. Die Priorität ist der Wert vor dem Doppelpunkt. linux02:~ # ip rule show 0: from all lookup local 32766: from all lookup main 32767: from all lookup default In der vorkonfigurierten Einstellung wird für jedes ankommende Paket die Route zuerst in der Tabelle local nachgeschlagen. Falls sie dort nicht steht, werden die Tabellen main und danach default befragt. Mit Hilfe der RPDB lassen sich nun Fragestellungen, wie das Routing in Abhängigkeit von der Absendeadresse oder das Routing mit mehreren Gateways einfach realisieren. Das Routing nach Quelladresse demonstriert das erste Beispiel. Sei ein kleines Firmennetz über zwei Provider an das Internet angeschlossen. Ein Provider bietete eine schnelle Leitung, die jedoch relativ teuer sei. Der andere Provider sei billig, hat aber eine deutliche Verzögerung. Es sollen daher nur Pakete vom Voice-over-IP-Gateway der Beispielfirma (IP-Adresse 192.168.100.100) über den schnellen Provider 192.168.1.254 geleitet werden. Alle anderen Pakete nehmen den verzögerten Weg über das Gateway 192.168.2.254: Alle Maschinen im privaten Subnetz 192.168.100.0 benutzen ein gemeinsames Linux Default-Gateway. Auf diesem Gateway soll anhand der Quelladresse entschieden werden, über welchen Router (das können beispielsweise kleine integrierte DSL/ISDN-Router sein) ein Paket seinen weiteren Weg nimmt. Für dieses Regelset wird zuerst eine neue Tabelle ”SourceRouting” in der Datei /etc/ iproute2/rt tables eingetragen. Hierfür muss eine Regel erstellt werden, die für alle Pakete mit der Quelladresse 192.168.100.100 die Routing Tabelle ”SourceRouting” befragt. linux02:~# echo 100 SourceRouting >> /etc/iproute2/rt_tables linux02:~# ip rule add from 192.168.100.100 table SourceRouting linux02:~# ip rule show 6.2. WEITERGEHENDE ANWENDUNGEN VON IPROUTE2 89 Abbildung 6.1: Default-Gateway mit zwei Wegen zu verschiedenen Routern 0: from all 32765: from 32766: from 32767: from lookup local 192.168.100.100 lookup SrcRouting all lookup main all lookup default Zum Schluss wird noch das schnelle Gateway als Standard Route in die Tabelle SourceRouting eingetragen. Ab dann werden alle Pakete von der IP-Adresse 192.168.100.100 über den schnellen Weg geschickt. linux:~# ip route add default via 192.168.1.254 dev eth0 table SourceRouting 6.2.3 Generelle 2-Wege-Routen Das folgende Beispiel befaßt sich wieder mit dem Routing über zwei Gateways. Es können auch mehrere sein, das spielt hier aber keine Rolle. Die Fragestellung ist etwas modifiziert: • Wie kann man ausgehenden Verkehr gleichmässig auf beide Strecken verteilen (Load Balancing)? • Wie lassen sich Pakete, die über eine Leitung kommen wieder über dieselbe verschickt werden (Split Access)? • Wie kann eine Backup-Default-Route definiert werden, die nur bei Ausfall der DefaultRoute benutzt wird? In einem ersten Schritt legt man zwei neue Routing Tabellen Route1 und Route2 in /etc/iproute2/rt tables an, identisch zum eben beschriebenen Verfahren. Route1 sei dabei die Tabelle für Provider 1 und entsprechend Route2 die für Provider 2. linux02:~# linux02:~# linux02:~# linux02:~# ip ip ip ip route route route route add add add add 132.230.129.0/28 dev eth0 src 132.230.129.1 table Route1 default via 132.230.129.15 table Route1 80.168.20.0/25 dev eth1 src 80.168.20.125 table Route2 default via 80.168.20.126 table Route2 Die Routing Rules legen fest, welche Tabelle für welche IP herangezogen wird. 90 KAPITEL 6. LINUX IM NETZWERK Abbildung 6.2: Szenario mit zwei Routen über Provider 1 und 2 linux02:~# ip rule add from 132.230.129.1 table Route1 linux02:~# ip rule add from 80.168.20.125 table Route2 Im folgenden Schritt wird die Main Routing Tabelle für das lokale Routing in beide Netzwerke konfiguriert. linux02:~# ip route add 132.230.129.0/28 dev eth1 src 132.230.129.1 linux02:~# ip route add 80.168.20.0/25 dev eth2 src 80.168.20.125 Zum Abschluss wird die Default-Route für die ”main” Routing Table gesetzt. Da der Verkehr gleichmäßig auf beide Anschlüsse verteilt werden soll, muss die Route jetzt als Multipath-Route angelegt sein. Der ”weight” Parameter dient dazu die Verteilung über die einzelnen Verbindungen zu gewichten. Man kann bei Bedarf auch einen Provider stärker als den anderen belasten. linux02:~# ip route add default scope global nexthop via 132.230.129.14 dev eth1 \ weight 1 nexthop via 80.168.20.126 dev eth2 weight 1 Im letzten Beispiel wurden die beiden Default-Routen gleichmäßig oder gewichtet benutzt. Wenn eine immer verwendet werden soll und die andere nur beim Ausfall der ersten den Datenverkehr komplett übernimmt, kann man das über die Angabe einer Metrik3 regeln. Der Kernel benutzt Gateway immer die Route mit der kleinsten Metrik, solange er sie erreichen kann. Falls diese nicht mehr verfügbar ist, greift er automatisch auf die Route mit der nächstkleineren Priorität zurück. Für das Beispiel soll Gateway 80.168.20.126 als Gateway für eventuelle Ausfälle von Gateway 132.230.129.14 dienen. Für diese Aufgabenstellung genügt es, die Route zum Router 1 mit einer Metrik 1 zu definieren. Die Route zum Backup-Gateway erhält eine höhere Metrik von beispielsweise 5. Die reinen Zahlenwerte sind dabei nicht so interessant. Alle vorherigen Routingeinstellungen sind vorher zu löschen. Das Beispiel nutzt dazu das Kommando ”flush”. Mit der Option ”-4” legt man fest, dass flush nur auf IPv4-Adressen wirkt. Damit bleiben eventuell vorhandene IPv6-Einträge unberührt. linux02:~# ip -4 addr flush label "eth0" linux02:~# ip route add default via 132.230.129.14 dev eth0 metric 1 linux02:~# ip route add default via 80.168.20.126 dev eth0 metric 5 3 ”Kosten” oder Präferenz einer Route - je kleiner der Wert desto besser 6.3. ÜBERPRÜFUNG DER KONFIGURATION 6.2.4 91 Dienste-basiertes Routing Wenn sich Dienste und deren Administratoren an Standards halten, kann man sie anhand ihrer verwendeten Portnummern identifizieren. Die Datei /etc/services listet die Zuordnung von Portnummern zu Diensten auf. ip hat selbst keine Möglichkeit direkt in folgende Header, TCP oder UDP eines Datenpaketes zu schauen. Das können entweder tc oder besser das Netfilter Paket übernehmen. Letzteres ist oft sowieso schon als Firewall im Einsatz. So lassen sich IP-Pakete klassifizieren und ihre Header manipulieren. Man markiert Pakete, die an einen bestimmten Port geschickt werden, mit einer Nummer. Auf Basis dieser werden dann wieder Routing Tabellen erstellt. Das Beispiel sei wie das eingangs beschriebene. Diesmal sollen nur SSH Pakete die schnelle Verbindung passieren und alle anderen den kostengünstigeren Weg nehmen. Als erstes, werden alle ausgehenden SSH-Pakete mit dem Netfilter-Tool iptables durch eine ”1” gekennzeichnet. Das Label kann eine beliebige Zahl sein. linux02:~# --set-Mark linux02:~# linux02:~# linux02:~# iptables -A OUTPUT -i eth0 -t mangle -p tcp --dport 22 -j MARK \ 1 echo 200 ssh >> /etc/iproute2/rt_tables ip rule add fwmark 1 table ssh ip route add default via 192.168.1.254 dev eth0 table ssh Dann wird wieder eine Regel in der RPDB erstellt, die besagt, dass für alle Pakete, die mit einer 1 markiert sind, die Tabelle ssh befragt wird. Zuletzt muss eine Default Route zur schnellen Verbindung in der Routing Tabelle ssh erzeugt werden. Ab dann gehen alle SSH-Pakete über den schnellen Router 1. 6.3 Überprüfung der Konfiguration Den Erfolg einer IP-Konfiguration kann man am besten im Netz mit dem Befehl ping testen (das setzt einen weiteren Rechner mit garantiert funktionierender Netzwerkkonfiguration voraus!). ping IP-Adresse/Hostname sendet Datenpakte im Sekundenabstand an die angegebene IP-Adresse oder Rechnernamen4 . Ping5 kennt einige interessante Kommandoparameter, die sich auch zum Testen der Leistungsfähigkeit eines LAN’s eigenen. So lässt sich mit ”-c Zahl” die Anzahl der verschickten Pakete festlegen, ”-f” lässt den Systemadministrator so viele Pakete versenden, wie nur irgendwie geht und mit ”-s Zahl” lässt sich die Paketgrösse, die zum Test verschickt wird, variieren. Meldet ping keinen Erfolg6 , kann man mit dem Kommando tcpdump überprüfen, ob überhaupt Datenpakete auf dem Netzwerkinterface eintreffen und vom Kernel registriert werden. 6.4 6.4.1 Aufgaben IP-Konfiguration und Erreichbarkeit 1. Wie bekommt man folgende Informationen heraus: IP Adresse, Routing Tabelle, eigene MAC-Adresse(n)? 2. Wie lautet die Netzwerkmaske des eigenen Subnetzes und wie kann diese verändert werden? 4 Dieses setzt jedoch einen funktionierenden Nameservice voraus! weitere Informationen kann man sich über den Aufruf der Manualseiten mit man ping anzeigen lassen. 6 das meint eine Meldung wie ”100” packet loss” 5 92 KAPITEL 6. LINUX IM NETZWERK 3. Warum muss die eigene Netzwerkmaske zu den Einstellungen des Subnetzes passen, in dem man sich befindet? Was passiert, wenn die Maske des Subnetzes kleiner oder größer als die auf der eigenen Maschine eingestellte ist? 4. Man organisiere sich die IP vom Nachbarn und versuche diesen per Ping zu erreichen. Wie erfährt man seine eigene Default-Gateway-Adresse? 5. Wie erfahre ich die MAC-Adressen meiner Kommunikationspartner? Wie lauten die MAC-Adressen für goe.net oder www.spiegel.de? 6.4.2 Datenverkehr zählen 1. Welche ganz einfachen Möglichkeiten hat man, um festzustellen, wieviel Datenverkehr von einer Maschine ins Netz geschickt oder empfangen wurde? Kapitel 7 DHCP 7.1 Automatische IP-Zuweisung Administratoren sind für ihren zugewiesenen IP-Bereich selbst zuständig RZ teilt z.B. das Uni Class-B-Netz von 132.230.0.0/ 255.255.0.0 mittels Subnetting in 256 Class-C Netze auf. In diesen Netzen sind bis zu 254 Rechner zu verwalten. Ziel ist die Rezentralisierung der netzwerkseitigen Konfiguration - der Einsatz des DHCP (Dynamic Host Control Protocol) als Netzwerkprotokoll der Anwendungsschicht, mittels dessen grundlegende Daten zur Konfiguration eines Clientsystems übertragen werden können. Dynamic Host Configuration Protocol kann zur automatischen und dynamischen IPZuweisung verwendet werden. Damit kann die Konfiguration auf einem zentralen Rechner des Teilnetzes erfolgen (bzw. weitere lassen sich aus Redundanzgründen einfügen). Die Rechner lassen sich fest konfigurieren, aber es kann auch ein Pool von Adressen für wechselnde Hosts verwaltet werden. Damit kann eine weit höhere Anzahl von Maschinen als vorhandene IP-Nummern bedient werden. DHCP verwendet spezielle IP-Nummern 0.0.0.0 (Host ohne IP-Information) und 255.255.255.255. Lokaler Broadcast an alle Teilnetze sind durch Router voneinander abgegrenzt, damit werden Broadcastpakete nur im eigenen Subnetz sichtbar. 0.0.0.0 wird nach IP-Bezug sofort wieder frei. 7.2 Implementation DHCP1 , das ”Dynamic Host Control Protocol” stellt eine Erweiterung und Ergänzung des BOOTP dar. Die Einschränkungen im BOOTP einerseits und seine anerkannten Vorteile zur Konfiguration großer Rechnerzahlen andererseits mündeten in der Entwicklung von DHCP. Weiterentwicklungen, wie z.B. dynamisches DNS, finden in erster Linie beim dhcpd statt, die verwendeten bootpd Implementierungen stammen aus den Anfängen der 90er Jahre und werden nur noch im Fall grober Sicherheitsverletzungen gepatcht. Das InternetSoftware-Consortium2 entwickelte eine Beispielimplementation des DHCP und einiger anderer Internetprotokolle. Der Sourcecode liegt in den meisten Fällen auch in einer Linuxanpassung vor, so dass eine einfache Übersetzung für die Zielplattform erfolgen kann. Im 1 Die grundlegenden RFCs für DHCP sind: RFC1541 : ”Dynamic Host Configuration Protocol”, Oktober 1993 RFC2131 : ”Dynamic Host Configuration Protocol”, März 1997 RFC2132 : ”DHCP Options and BOOTP Vendor Extensions”, März 1997 2 siehe dazu [W6], wobei das ISC neben der DHCP-Implementierung weitere Internet-Standards betreut. 93 94 KAPITEL 7. DHCP Weiteren bezieht sich daher die Beschreibung auf die DHCP-Implementierung des ISC. Diese liegt inzwischen in der dritten Version vor und unterstützt eine ganze Reihe neuer Eigenschaften, wie die Unterstützung von Dynamischen DNS oder Vendor Code Identifier. 32 bit OP HTYPE HLEN HOPS TRANSACTION IDENTIFIER SECONDS ELAPSED FLAGS CLIENT IP ADDRESS YOUR IP ADDRESS SERVER IP ADDRESS ROUTER IP ADDRESS CLIENT HARDWARE ADDRESS (16 OCTETS) . . SERVER HOSTNAME (64 OCTETS) . . OPTIONS (VARIABLE) . . DHCP Message Format Abbildung 7.1: Aufbau eines DHCP-Paketes DHCP arbeitet auf Port 67 zur Anfrage an den Server und auf Port 68 zur Rückantwort an den Client. Solche Informationen findet man in der /etc/services. Das vorgestellte Protokoll läßt sich nur sinnvoll in broadcastfähigen Netzen3 einsetzen. Es ist nicht (bzw. nur über den Umweg eines DHCP-Gateway-Servers) routebar. DHCP verwendet als Transportprotokoll UDP, da 3-Wege-Handshake mit den IP-Spezialadressen4 kaum sinnvoll realisiert werden kann. In den meisten Fällen genügt ein Datenpaket pro Konfigurationsschritt in jede Richtung. DHCP ist eine Erweiterung des Bootp, welches weniger komplex im Leasehandling ist. Es kennt nur statische Adresszuweisungen und weniger vordefinierte Konfigurationsoptionen. DHCP arbeitet im vierstufigen Verfahren bei der Adresszuweisung: • Client schickt DHCPDISCOVER an 255.255.255.255 Port 67 um Server zu ermitteln • Server schickt einen Vorschlag mit Parametern als DHCPOFFER an 255.255.255.255 Port 68 • Client sucht sich aus evtl. mehreren ”Offers” nach bestimmten Kriterien eine passende aus (z.B. nach der Länge der ”Lease”) und schickt DHCPREQUEST gerichtet an den passenden Server • Server bestätigt mit DHCPACK gerichtet an Client 3 4 Ethernet bzw. TokenRing 255.255.255.255 für den lokalen Broadcast im Netz als Anfrage mit der eigenen IP 0.0.0.0 7.2. IMPLEMENTATION 95 Server 1 Konfiguration festlegen Client DHCPDISCOVER Beginn der Initialisierung DHCPOFFER 2 DHCPREQUEST Konfiguration wählen 3 Konfiguration annehmen DHCPACK 4 Initialisierung abgeschlossen 5 DHCPRELEASE Sauberes Beenden Lease entfernen Abbildung 7.2: Ablauf einer DHCP-Anfrage • Server kann ein Request eines Clients ablehnen und ein NAK schicken • Wenn der Client ein Problem mit der zugewiesenen Adresse hat, sendet er ein DECLINE • Der Client kann die erhaltene Adresse vor Ablauf zurückgeben und hierfür ein RELEASE senden • Der Client kann die erhaltene Adresse vor Ablauf verlängern und hierfür ein RENEW schicken Der DHCP-Server verwaltet den Adresspool und versieht jede Adresse mit der ”Verleih”Zeit. Er kennt eine Reihe fest definierter Optionen und bei Bedarf können weitere eigene Optionen definiert werden.5 Im Ethereal-Mitschnitt kann man gut den Aufbau eines DHCP-(Request)-Paketes sehen, wie er schematisch im Bild (DHCP-Paket) gezeigt ist. Das erste Feld gibt den Typ des Paketes an - hier Boot-Request. Die verwendete Hardware ist ein Ethernet, weshalb die MAC-Adressen 6 Byte lang sind. Es traten keine Hops auf, da die Aktion im selben LAN stattfand. DHCP arbeitet mit dem verbindungslosen UDP. Deshalb muss es Transaktionen zuordnen können. Hierfür gibt es einen 32 bittigen Identifier. Darauf folgten die verstrichene Zeit und Flags. 5 insgesamt sind 255 Optionen möglich 96 KAPITEL 7. DHCP Abbildung 7.3: DHCP-Session unter der Lupe Interessant sind dann wieder die Blöcke der IP-Adressen. Der Client kann eine Adresse von einer noch gültigen Zuweisung besitzen (Client IP). Die vom Server zugewiesene Adresse steht in ”Your IP”. Next Server kann die Adresse des nächsten zu kontaktierenden Servers beispielsweise TFTP enthalten. Sonst steht hier die Adresse des DHCP-Servers. Die Adresse des Relay-Agent enthält die IP des beteiligten Routers, wenn die Anfrage über ein DHCP-Relay zum Server gelangte. Im Beispiel sind alle Adressen leer (0.0.0.0). Diese Informationen entnimmt der DHCP-Client nicht dem IP-Header. So können ”Next Server” und die Absendeadresse des DHCP-Servers durchaus differieren. Weitere Felder sind für den Serverhostnamen und ein Bootfile (das dann per TFTP geholt werden könnte - nützlich für Diskless Clients) reserviert. Ab dann geht es weiter mit den verschiedenen DHCP-Optionen. Interessant ist vielleicht noch die Option 50 (Requested IP Address). Da der Client schoneinmal eine Lease bezogen hatte, versucht er die gleiche IP-Nummer wieder anzufordern. Das hat den Vorteil, dass die Maschine bestehende IPVerbindungen nicht durch Adressenwechsel kappt. Die meisten anderen Optionen erklären sich selbst. Eine Liste aller dem ISC-Server bekannten Optionen liefert die Manpage: man dhcp-options. 7.3 DHCP-Server Konfiguriert wird der DHCP-Dämon (dhcpd) mittels /etc/dhcpd.conf. Es stehen etliche weitere Einstellungen zur Verfügung; diese können mit man dhcp-options angezeigt werden. Die DHCP-Konfigurationsdatei hängt in ihrer Ausgestaltung vom verfolgten Einsatzziel ab: So werden für Diskless X-Stations bzw. Linux-Workstations vielleicht eine Reihe zusätz- 7.3. DHCP-SERVER 97 licher Daten übertragen, die für den Betrieb von Windowsmaschinen nicht relevant sind. Entsprechende benutzerdefinierte Optionstrings werden eingeführt, um bestimmte Textfelder6 z.B. zur Konfiguration des X-Servers zu kopieren. Es gibt eine Reihe von Möglichkeiten, um die /etc/dhcpd.conf zu strukturieren. Zusätzlich zum ”subnet”-Statement hilft das ”group”-Statement dabei - neben der Unterteilung nach Subnetzen - Konfigurationsblöcke mit gleichen Parametern zusammenzufassen. So muss nicht für jeden Host die gesamte Palette wiederholt werden. Eine Beispielkonfiguration könnte wie folgt aussehen: option domain-name "subdomain.domain.site second.domain"; filename "/tftpboot/bootimg"; use-host-decl-names on; default-lease-time 72000; max-lease-time 144000; subnet 10.16.60.0 netmask 255.255.252.0 { option domain-name-servers 10.16.60.21, 10.16.60.100; option ntp-servers ntps1.domain.site, ntps2.domain.site; option font-servers fontserver.domain.site; option x-display-manager x1.domain.site, x2.domain.site; # option netbios-name-servers 10.16.63.252; option routers 10.16.63.254; option broadcast-address 10.16.63.255; # range 10.16.60.201 10.16.60.253; } group { option lpr-servers 10.16.60.2; host dxs02 { hardware ethernet 00:00:1C:D2:87:DF; fixed-address 10.16.60.64; } [...] 7.3.1 DHCP-Standardoptionen DHCP kann aufgrund seiner Flexibilität zum zentralen Konfigurationstool avancieren. Man kann versuchen, über diesen Dienst alle relevanten Informationen zum Betrieb von Linux Thin-Clients zu übertragen. Neben den klassischen Parametern, wie Hostname, IP-Adresse, Netzmaske und Gateway, zählt dazu eine Reihe von Server-IP’s: X-Display-, Time-, Swap-, NIS-Server und weitere. Die DHCP-Konfigurationsdatei /etc/dhcpd.conf hängt in ihrem Umfang vom Einsatzziel ab: So werden für Diskless X-Stations vielleicht eine Reihe zusätzlicher Daten, z.B. über Informationen zum Font-, Print-, Swap- und NIS-Server übertragen, die für den XTerminalbetrieb nicht erforderlich sind. # -- global options -default-lease-time 160000; max-lease-time 200000; use-host-decl-names on; ddns-update-style none; subnet 192.168.2.0 netmask 255.255.255.192 { option broadcast-address 192.168.2.63; option domain-name-servers 192.168.2.22; option domain-name "test.site, test2.site"; option nis-domain "chnsmi20"; 6 Variablentyp ”string” 98 KAPITEL 7. DHCP option nis-servers 192.168.2.3; option log-servers 192.168.2.4; option netbios-name-servers 192.168.2.5; option routers 192.168.2.1; range 192.168.2.50 192.168.2.62; # } # -- client specific -group { host test1 { hardware ethernet 00:80:48:C2:DD:6A; fixed-address 192.168.2.41; } host test2 { hardware ethernet 00:E0:4C:39:10:21; fixed-address 192.168.2.42; } } Das ”group” Statement hilft hierbei - neben der Unterteilung nach Subnetzen - Konfigurationsblöcke mit gleichen Parametern zusammenzufassen. So muss nicht für jeden Host die gesamte Palette wiederholt werden. Das Beispiel zeigt bereits einige typische Konfigurationsparameter des ISC-DHCPServers. Die ”default-lease-time” und ”max-lease-time” sind Ganzzahlwerte, die in Sekunden angeben, wie lange eine herausgegebene Adresse standardmäßig und maximal gültig ist. Dieses spielt besonders eine Rolle in dynamischen Netzen mit potenziell mehr verwalteten Maschinen als vorhandenen IP-Adressen. Mittels ”use-host-decl-names” wird gesteuert, ob der Rechnername anhand des ”host”-Statements übermittelt oder in einer eigenen Option definiert werden soll. Der ”ddns-update-style” bestimmt über die Zusammenarbeit mit dem Domain Name Server. Soll keine stattfinden, weil alle Rechnernamen fest im DNS verankert sind, wird wie im Beispiel ”none” gesetzt. Die meisten DHCP-Optionen sind selbsterklärend. Die komplette Liste aller definierbaren Optionen kann der Manpage zu ”dhcp-options” entnommen werden. Die innerhalb der dhcpd.conf definierten Subnetze müssen innerhalb der gültigen Netzwerkkonfiguration des Servers liegen. Ausserhalb liegende Netze können nicht bedient werden. Innerhalb des ”subnet”-Statements legt die ”range” fest, welche Adressen im definierten Bereich dynamisch verwaltet werden. Der Server merkt sich herausgegebene IP-Adressen in einer gesonderten Datei, den dhcpd.leases, welche sich unterhalb der /var Verzeichnisstruktur in Abhängigkeit der verwendeten Distribution befindet. 7.3.2 DHCP-DNS-Verbindung Damit der ISC-DHCP-Server dynamische Updates im DNS-Server - es funktioniert nur die Zusammenarbeit mit BIND - vornehmen kann, sind einige Vorbereitungen nötig. In der Zonendefinitionsdatei /etc/named.conf habt man die Möglichkeit dieses zu konfigurieren: acl mynetwork { 10.16.10.0/24; 127.0.0.1; }; [ ... ] zone "mydomain.site" in { type master; allow-update { WERT; }; file "master/mydomain.site"; }; zone "239.168.192.in-addr.arpa" { 7.4. BENUTZERDEFINIERTE OPTIONEN 99 type master; file "master/10.16.10.rev"; allow-update { WERT; }; }; Dabei kann ”allow-update” verschiedene Werte annehmen: none - keine Updates sind erlaubt. 127.0.0.1 - Updates sind nur von der Maschine selbst (localhost) gestattet. ”allowupdate mynetwork; ” konfiguriert, dass aus dem eingangs definierten Quellen UpdateInformationen akzeptiert werden. In der dhcpd.conf sollten mindestens die folgenden globalen Optionen auftauchen: ddns-updates on; ddns-domainname "mydomain.site"; ddns-update-style ad-hoc; allow unknown-clients; [ ... ] subnet 10.16.10.0 netmask 255.255.255.0 { range dynamic-bootp 10.10.10.10 10.16.10.250; option subnet-mask 255.255.255.0; option routers 10.16.10.254; allow unknown-clients; } Beide Dienste müssen Sie nach erfolgter Konfiguration neu starten. Im Anschluss können Sie beispielsweise eine Windowsmaschine eine IP-Adresse vom Server beziehen lassen. Dann sieht man im Logfile die Interaktion von DHCP und DNS: [ ... ] Jan 12 21:05:52 hermes named[16798]: client 10.16.10.254#33708: updating\ zone ’mydomain.site/IN’: adding an RR Jan 12 21:05:52 hermes named[16798]: journal file master/mydomain.site. \ zone.jnl does not exist, creating it Jan 12 21:05:52 hermes dhcpd: if zx-spektrum.mydomain.site IN A rrset \ doesn’t exist add zx-spektrum.mydomain.site 80000 IN A 10.16.10.250:\ success. Jan 12 21:05:52 hermes named[16798]: client 10.16.10.254#33708: updating\ zone ’239.168.192.in-addr.arpa/IN’: deleting an rrset Jan 12 21:05:52 hermes named[16798]: client 10.16.10.254#33708: updating\ zone ’239.168.192.in-addr.arpa/IN’: adding an RR Jan 12 21:05:52 hermes named[16798]: journal file master/10.16.10.rev.jnl\ does not exist, creating it [ ... ] Vielen reicht eine Zugriffssteuerung anhand der IP-Nummer nicht. Diese kann oft zu einfach gefälscht werden. Seit einiger Zeit bietet BIND zur Absicherung sogenannte Transaction Signatures (TSIG). Sie basieren auf einer Einwege-Hashfunktion. Sie werden über die komplette DNS-Nachricht berechnet und als Resource Record an die Nachricht angehängt. 7.4 Benutzerdefinierte Optionen DHCP bietet die Möglichkeit bestimmte, sogenannte Vendoroptionen aufzunehmen, d.h. es können zusätzliche Optionen zu den bereits vorhandenen definiert werden. Hierfür kann der Codenummernbereich von 128 - 255 verwendet werden. Wenn man umfangreiche Informationen übertragen will, sollte man die Paketgröße des BOOTP-Reply-Pakets über 100 KAPITEL 7. DHCP den Standard7 hinaus erhöhen. Die Option kann nur Ganzzahlwerte enthalten, die jedoch die MTU-Size des Netzwerkes nicht überschreiten soll, da die meisten Clients keine fragmentierten DHCP-Antworten verarbeiten können. Diese Optionen werden zu Beginn der Konfigurationsdateien8 des dhcpd bzw. dhclient definiert. Die folgende Liste ist eher als Beispiel denn als vollständige Aufzählung zu verstehen, da für gegebene Aufgaben die notwendigen Felder auch völlig anders aussehen können. # -- lot of information to be transferred -dhcp-max-message-size 1200; # -- user defined options -option o128 code 128 = string; option o129 code 129 = string; option menudflts code 160 = string; option motdline1 code 184 = string; option menuline1 code 192 = string; option menuline2 code 193 = string; option menuline3 code 194 = string; Wobei folgende Variablentypen verwendet werden können: string, integer, boolean, text, ipnumber. Diese lassen sich auch zu Arrays zusammenfassen. Das ist das klassische Verfahren, welches für die vordefinierten Optionen für Listen von IP-Nummern zum Einsatz kommt. Die Option 128 definiert ein ”Magic-Packet”, welches die Auswertung von Menu-Optionen für Etherboot einschaltet. Standardwerte für die Menü-Auswahl, d.h. welches Feld nach einem gewissen Timeout gestartet werden soll, werden mit der Option 160 festgelegt. Die Zusammensetzung des Menüs, welches nach dem Kontakt von Etherboot mit dem DHCPServer angezeigt wird, geschieht durch die Optionen 192 und folgende. Hierbei wird für jede Menü-Zeile ein eigenes Feld benötigt. Mittels der Option 129 sind Parameter zum Kernelstart übermittelbar, die z.B. auch den Root-Verzeichnispfad enthalten . Eine ”Message of the day”9 kann durch das Setzen der Option 184 erfolgen. 7.5 Die Verwendung von Vendor-Code-Identifiern Vendor-Code-Identifier sind als feste Optionen für DHCP definiert: ”vendor-class-identifier” für die Identifizierung des Clients durch den Server und ”vendor-encapsulated-options” zur Identifizierung des Servers seitens des Clients. Auf diese Weise lassen sich die DHCP-Anfragen verschiedener bootender Rechner voneinander differenzieren, so dass es gelingt an eine Maschine in Abhängigkeit vom anfragenden Client verschiedene Werte für die gleiche Option zurückzuliefern. Dieses ist zwingend notwendig, wenn PXE und Etherboot hintereinander verkettet booten sollen, da PXE zwar die identische IP-Konfiguration erhält, aber anstelle des Kernel-Images das Etherboot-PXEImage zur Ausführung laden soll. Dieses sieht man am unten stehendem Beispiel: Es werden bestimmte Optionen nur gesetzt bzw. die Default-Option überschrieben, wenn in der Anfrage des Clients ein bestimmter String identifiziert werden kann. Die Interaktion mit PXE und Etherboot mittels VCI ist im folgenden Beispiel demonstriert. # -- vendor identifier dependend settings -class "Etherboot" { match if substring (option vendor-class-identifier,0,9)="Etherboot"; 7 Die Standardgröße des Bootp-Paketes beträgt 572 Byte. Eine Erhöhung auf z.B. 1024 Byte kann durch ”dhcp-max-message-size 1024” erreicht werden. 8 üblicherweise /etc/dhcpd.conf für den Server-Dämon sowie /etc/dhclient.conf für den Client 9 Hier das Textfeld über der Menu-Auswahl 7.6. DHCP-CLIENT 101 option o128 E4:45:74:68:00:00; option motdline1 = "Welcome to Testlabs"; option vendor-encapsulated-options 3c:09:53:74:75:64:69:6e:65:74:7a:ff; } class "PXEClient:" { match if substring (option vendor-class-identifier,0,10)="PXEClient:"; filename "/nfsroot/dxs/boot/eb-3c905c.pxe"; } [...] host dxs03 { hardware ethernet 00:00:B4:72:D2:4E; if substring (option vendor-class-identifier,0,3)="PXE" { filename "/nfsroot/dxs/boot/rtl8139.pxe"; } fixed-address 10.8.4.13; } [...] Die ”class”-Statements zeigen globale Definitionen. Es können aber auch hostspezifische Einstellungen getroffen werden, wie das untenstehende Beispiel zeigt. 7.6 DHCP-Client Von schlanken Implementierungen für Embedded Devices mal abgesehen10 gibt es eigentlich nur eine wesentliche Serverimplementierung. Dafür gibt es aber verschiedene DHCP-Clients. Ein Client ist beim ISC-Paket dabei, das Programm dhclient. Mit den Kommandos dhcpcd, dem DHCP-Client-Daemon, und pump stehen alternative Clients zur Verfügung. Letztere verwendet man, wenn nur eine kleine Anzahl von Standardeinstellungen mittels DHCP vorgenommen werden soll. Im Gegensatz zu dhclient, welches auf ein externes Skript zum Anwenden der DHCP-Netzwerkkonfiguration angewiesen ist, arbeiten die beiden letztgenannten Kommandos direkt auf den betroffenen Dateien, wie z.B. auf der resolv.conf zur Einstellung der DNS-Client-Konfiguration. dhclient verwendet eine eigene Konfigurationsdatei. Die Konfiguration sollte passend zum DHCP-Server erfolgen, wenn mit benutzerdefinierten Optionen gearbeitet wird. Die Einstellungsdatei lautet /etc/dhclient.conf: # /etc/dhclient.conf # send dhcp-max-message-size 1200; send dhcp-lease-time 18000; request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name; require subnet-mask, domain-name-servers; timeout 60; retry 60; reboot 10; select-timeout 5; initial-interval 2; script "/sbin/dhclient-script"; dhclient schreibt, wenn er eine IP-Konfiguration von einem Server erhalten hat, die Daten in die Datei /var/lib/dhcp/dhclient.leases: lease { 10 ”dnsmasq” ist ein solches Programm 102 KAPITEL 7. DHCP interface "eth1"; fixed-address 10.16.10.12; option subnet-mask 255.255.255.0; option dhcp-lease-time 3600; option dhcp-message-type 5; option domain-name-servers 10.16.10.1; option dhcp-server-identifier 10.16.10.254; option broadcast-address 10.16.10.255; option domain-name "mydomain.site"; renew 5 2004/12/31 16:31:33; rebind 5 2004/12/31 17:00:14; expire 5 2004/12/31 17:07:44; } Nachdem dhclient die DHCP-Informationen vom Server bezogen hat, geschieht die Eintragung bzw. Anwendung dieser mittels dhclient-script, welches im Anhang als ShellSkript beispielhaft angeführt ist. dhclient-script wird von dhclient mittels Temporärskript in /tmp mit allen erhaltenen Variablen gestartet. Diese werden als Shell-Variablen in der aufrufenden Kommandozeile übergeben. Wärend es mit dhclient nicht möglich ist zwei un- Abbildung 7.4: DHCP-Client unter Windows98 abhängige Instanzen für zwei verschiedene Ethernet-Interfaces zu starten, bietet sich dhcpcd ethN11 für eine solche Betriebsart an. Die Lease-Datei des dhcpcd sieht etwas anders aus. Jedoch finden sich die gleichen Konfigurationsdaten wieder: 11 ethN steht für das Interface auf dem die Anfrage geschickt werden soll, beispielsweise dhcpcd eth1 oder dhcpcd wlan0 7.6. DHCP-CLIENT 103 IPADDR=10.16.10.12 NETMASK=255.255.255.0 NETWORK=10.16.10.0 BROADCAST=10.16.10.255 DOMAIN=’mydomain.site’ DNS=10.16.10.1 DHCPSID=10.16.10.254 DHCPGIADDR=0.0.0.0 DHCPSIADDR=10.16.10.254 DHCPCHADDR=00:0C:29:5A:B3:E0 DHCPSHADDR=00:50:56:ED:BC:96 DHCPSNAME=’’ LEASETIME=60 RENEWALTIME=720 REBINDTIME=1575 INTERFACE=’eth1’ CLASSID=’Linux 2.6.8-24.11-default i686’ CLIENTID=00:0C:29:5A:B3:E0 Hier können Admins kontrollieren, welche Daten der Client vom Server bezogen hat. dhcpcd kennt eine Reihe von Optionen, die sein Verhalten steuern: Option -d -i VCID -k Bedeutung Generieren von Debug-Output Schicken eines Vendor Class Identifiers. Andere Möglichkeit Clients anstatt mit der MAC-Adresse auseinanderzuhalten. Schicken eines SIGHUP an laufende dhcpcd Prozesse Tabelle 7.1: Optionen zur Steuerung des Verhaltens von dhcpcd Abbildung 7.5: Erneuern einer Lease unter Windows-XP Unter Windows gibt es das grafische Programm winipcfg für Windows 98/ME. Mit dem Klick auf ”Aktualisieren” beschafft sich der Benutzer eine neue Lease vom DHCP-Server. Die Gültigkeit und andere Daten findet man im erweiterten Bereich. ipconfig -renew in der Kommandozeile regelt die dynamische IP-Beschaffung für die professionelleren Systeme, wie Windows2000 und XP. 104 7.7 KAPITEL 7. DHCP DHCP mit LDAP-Backend In sehr großen Netzen ist die Verwaltung von sehr vielen Maschinen in einer einfachen Textdatei (dhcpd.conf) irgendwann nicht mehr zeitgemäß. Es kommt der Wunsch auf alle relevanten Informationen zu den einzelnen Maschinen in einer Datenbank zu verwalten. Das Ganze sollte dann auch noch dynamisch funktionieren: Nach einem Update der Datenbank sollte der DHCP-Server ohne Neustart mit den aktualisierten Informationen arbeiten. Hierzu hat Brian Masney12 einen Patch für den aktuellen ISC DHCP der Version 3 gebastelt. Dieser ermöglicht eine Integration mit einem LDAP-Server. Die Struktur der DHCP-Konfiguration eignet sich von sich aus gut mit ihren Gruppen- und Subnetz-Abschnitten in einer hierarchischen Datenbank abgebildet zu werden. Der DHCP-Server der aktuellen SuSE-Distributionen ist bereits angepasst, bei Debian Testing oder Unstable Releases muss der Patch noch eingefahren werden. Ob das LDAPBackend bereits Bestandteil des Servers ist, zeigt das Logfile beim Start: Jan 12 20:47:26 s2 dhcpd: Internet Systems Consortium DHCP Server V3.0.1 [ ... ] Jan 12 20:47:26 s2 dhcpd: Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file [ ... ] Um dann Ihren DHCP-Server zur Zusammenarbeit mit LDAP zu motivieren, sind einige Eintragungen in der globalen Sektion der Konfigurationsdatei notwendig. Dafür können dann die ”subnet”, ”group” und ”host” Statements entfallen. Diese Informationen wandern in die Datenbank. ldap-server 10.8.4.254; ldap-port 389; ldap-username "cn=dhcpd,ou=users,dc=mydomain,dc=site"; ldap-password "GeheiM"; ldap-base-dn "ou=computers,dc=mydomain,dc=site"; ldap-method dynamic; Die ersten fünf Deklarationen legen den Zugriff auf den LDAP-Server fest. IP-Nummer oder alternativ der Rechnername und die Portnummer sind selbsterklärend. Der ”ldapusername” gibt an, mit welchem Account sich der DHCP-Server an den LDAP-Server bindet. Dieser Account muss über entsprechende Leserechte auf dem ihm zugewiesenen Abschnitt der Datenbank haben. Üblicherweise gehört zum LDAP-Benutzer auch ein Passwort (ldap-passwort). Die ”ldap-base-dn” ist die Basis für Suchanfragen auf dem LDAP-Baum. Dann müssen keine langen Distinguished Names (dn) angegeben werden, sondern der Teil in der Base kann entfallen. Die letzte Option bestimmt mit dem Flag dynamic, dass der DHCP-Server bei jeder Anfrage den LDAP-Server befragt. Steht hier ”static” holt er sich die Informationen genau einmal vom LDAP-Server und kappt dann die Verbindung zu diesem. Der LDAP-Server in der Standard-Konfiguration kennt zwar schon eine Reihe von Objektklassen, für die Daten des DHCP-Servers sind jedoch weitere notwendig, z.B. dhcpHost, dhcpdGroup, dhcpOptions, dhcpServer, ... Auf die Konfiguration eines LDAP-Servers wird hier nicht weiter eingegangen. Mit LDAP beschäftigt sich ein eigener Abschnitt des Skriptes.13 Für das Beispiel existiere bereits 12 http://www.newwave.net/ masneyb Wenn dieser Teil nicht in der aktuellen Ausgabe enthalten ist, kann dieser über http://goe.net beschafft werden. 13 7.7. DHCP MIT LDAP-BACKEND 105 ein lauffähiger Server, der für den Bereich ”dc=mydomain, dc=site” eingerichtet ist. Ein LDIF zum Bestücken eines LDAP-Servers mit DHCP-Daten könnte so aussehen: # Anlage eines DHCP-Servers im LDAP-Baum dn: dc=myserver, dc=mydomain, dc=site objectClass: top objectClass: dhcpServer cn: myserver.mydomain.site dhcpServiceDN: cn=Network, dc=myserver, dc=mydomain, dc=site # Definieren eines Knotens "Network" unterhalb dieses Servers dn: cn=Network, dc=myserver, dc=mydomain, dc=site cn: Network objectClass: top objectClass: dhcpService objectClass: dhcpOptions dhcpPrimaryDN: cn=myserver.mydomain.site, dc=myserver, dc=mydomain, dc=site dhcpOption: domain-name "myserver.mydomain.site mydomain.site" dhcpOption: domain-name-servers 10.16.60.1,10.10.10.10 dhcpStatements: default-lease-time 21600 dhcpStatements: max-lease-time 43200 dhcpStatements: ddns-update-style ad-hoc # Unterhalb des Knotens "Network" Eintrag für das Netz 10.16.60.0 # schaffen dn: cn=10.16.60.0, cn=Network, dc=myserver, dc=mydomain, dc=site cn: 10.16.60.0 objectClass: top objectClass: dhcpSubnet objectClass: dhcpOptions dhcpNetMask: 24 dhcpOption: routers 10.16.60.254 dhcpOption: subnet-mask 255.255.255.0 # In diesem Netz einzelne Maschinen eintragen: ldaphost1 dn: cn=ldaphost1, cn=10.16.60.0, cn=Network, dc=myserver, dc=mydomain, dc=site cn: ldaphost1 objectClass: top objectClass: dhcpHost dhcpHWAddress: ethernet 00:c0:26:31:6a:13 dhcpStatements: fixed-address 10.16.60.11 # In diesem Netz einzelne Maschinen eintragen: ldaphost2 dn: cn=ldaphost2, cn=10.16.60.0, cn=Network, dc=myserver, dc=mydomain, dc=site cn: ldaphost2 objectClass: top objectClass: dhcpHost 106 KAPITEL 7. DHCP dhcpHWAddress: ethernet 00:c0:26:31:6a:14 dhcpStatements: fixed-address 10.16.60.12 Nach dem Neustart des DHCP-Servers sollte dieser in der Lage sein, die Daten per LDAP zu beziehen. Für die Fehlersuche empfielt es sich die Debug-Level sowohl des LDAP-Servers als auch des dhcpd hoch einzustellen. Aus Sicht des Autors ist die Anbindung des DHCP an LDAP nicht wirklich optimal. Die Art der Datenbank wird kaum ausgenutzt. So gibt es für alle DHCP-Optionen ein einziges Attribut, welches letztendlich nur eine Zeile der Konfigurationsdatei ohne Semikolon speichert. Wenn in der dhcpd.conf: option domain-name-servers 10.16.60.1,192.168.10.10; stand, so steht in der LDAP-Datenbank im Attibut ”dhcpOption”: ”domain-name-servers 10.16.60.1,192.168.10.10” In vielen Fällen würde man die Computer gerne in einer einheitlichen Liste unterhalb eines Knotens, beispielsweise ”ou=computer” verwalten14 und alle DHCP-spezifischen Daten in einem eigenen Knoten halten. Das ist derzeitig nicht möglich. So erfüllt LDAP lediglich die Funktion eines dynamischen Backends, kann aber nicht wirklich seine Stärken zu einer sinnvollen Maschinenverwaltung ausspielen. 7.8 7.8.1 Aufgaben DHCP 1) Worin besteht der Vorteil von DHCP gegenüber BOOTP? Nennen Sie einige Eigenschaften des ISC DHCPv3! 2) Bauen Sie einen DHCP-Server auf, der IP-Adressen dynamisch vergibt! a) Wie sieht der entsprechende Eintrag in der /etc/dhcpd.conf aus? b) Warum bekommt ein Rechner häufig dieselbe IP zugeteilt, die dieser schon einmal hatte? Wo werden diese Informationen abgelegt? c) Client-Seite: Verändern Sie die MAC-Adresse Ihrer Netzwerkkarte (Tip: ifconfig ethX hw ether 00:00:B4:34:35:XY, wobei X, Y Hexadezimalzahlen sein sollten, die sich von der Wahl der anderen Kursteilnehmer unterscheiden.) und starten Sie den Dienst zum dynamischen Bezug von IP-Nummern neu. Warum bekommen Sie nun eine andere IP als vorher zugeteilt? 3) Wenn man sehr viele Daten (z.B. eine grosse Reihe von Server-IP-Nummern) übergeben möchte, könnte der Platz im DHCP-Antwort-Paket nicht mehr ausreichen. Wäre es sinnvoll deshalb TCP statt UDP einzusetzen, um eine gesicherte Übertragung mehrerer Pakete zu erreichen? Welche anderen Möglichkeiten gibt es noch? 4) Nennen Sie verschiedene Hierarchielevel der definierten Optionen! Welche Level überschreiben welche? Wozu kann dieses nützlich sein? 14 Siehe das Beispiel Samba-LDAP für PDC Kapitel 8 DNS 8.1 Einstieg Das Domain Name System (DNS) hatte es zu Zeiten des Internet-Booms bis in die Hauptnachrichten geschafft: Immer dann, wenn es juristische Auseinandersetzungen über bekannte Namen und Marken gab. Wenn jemand im Internet was zu Göttingen sucht, probiert er es am besten unter dem Namen der Stadt, also www.goettingen.de. Keiner kennt die IP-Adresse des Auftritts - 134.76.251.205. Auch wenn es an der gerichtlichen Front ruhiger geworden ist, kommen täglich neue Domains hinzu. Viele haben sich vielleicht schon vor einiger Zeit eine eigene Webpräsenz mit eigenem Namen bei irgendeinem Provider einrichten lassen oder denken darüber nach eine Domain zu registrieren. Man frage einfach mal im eigenen Umfeld herum - bestimmt finden sich Bekannte und Verwandte als Inhaber einer Internet-Domain. Ebenfalls erweitert sich die Zahl der sogenannten Toplevel-Domains ständig. So ist die Landes-Toplevel-Domain de die weltweit zweitgrößte nach der generischen Domain com. Irgendjemand muss diese ganzen Namen auch verwalten. Darum kümmert sich der Domain Name Server. Auch für diese Aufgabe bietet sich Linux an. 8.1.1 Enstehungsgeschichte DNS ist inzwischen untrennbar mit dem Internet verknüpft. Rechner im weltweiten Internet werden in der überwiegenden Zahl über ihren Namen und nicht über ihre IP-Adresse angesprochen. Es ist jedoch so, dass das Internet-Protokoll ohne Probleme ohne DNS klarkommt, DNS jedoch als Dienst direkt auf IP angewiesen ist. Menschen können sich schliesslich Namen besser merken als Telefonnummern. Wenn auch das Beispiel sich nicht direkt übertragen lässt, zeigt es die Bedeutung. Jeder kennt www.google.de. Kaum aber jemand weiss, dass beim Ansurfen der Seite aus Deutschland1 der Browser eine Verbindung zu IP 66.102.9.99 oder 66.102.9.104 aufbaut. Wer wissen möchte, wie der Browser den Namen zur Adresse mit Hilfe der Systembibliotheken auflöst, gibt einfachmal das Kommando host ein. dirk@linux:~> host www.google.de www.google.de is an alias for www.google.com. www.google.com is an alias for www.google.akadns.net. www.google.akadns.net has address 66.102.9.99 www.google.akadns.net has address 66.102.9.104 Das Netz kann aber ausschliesslich mit Binäradressen umgehen - auch die besser lesbare Dotted Quad Notation aus dem Beispiel ist nur eine Übersetzung für den menschlichen 1 je nach Provider, da es oft erstmal ein Proxy ist 107 108 KAPITEL 8. DNS Benutzer. Deshalb wird ein System für die Zuordnung von Namen zu Adressen - und umgekehrt benötigt. Am Anfang ging es mit einer einfachen Textdatei los. Diese Textdatei gibt es immer noch. In kleinen Netzen oder zu Zeiten in denen Ihre Maschine keine Netzwerkverbindung zu einem DNS-Server hat, soll sie trotzdem Namen und IPs zuordnen können: # /etc/hosts # Syntax: # IP-Address ::1 fe00::0 ff00::0 ff02::1 ff02::2 Full-Qualified-Hostname Short-HostnamePv6 addresses ipv6-localhost ipv6-loopback ipv6-localnet ipv6-mcastprefix ipv6-allnodes ipv6-allrouters 127.0.0.1 localhost 10.8.4.101 dionysos.mydomain.site dionysos # resolv other machines without DNS 10.8.4.205 aphrodite.wg.site 10.8.4.206 athene.wg.site [ ... ] 10.8.4.250 thetis.wg.site aphrodite athene thetis Üblicherweise steht da nur noch die eigene Maschine drin, im Beispiel dionysos. Diese Einstellung landet in dieser Datei, wenn man die Maschine mit dem Installationstool der gerade verwendeten Distribution einrichtet Alle anderen Einträge gelten für spezielle Adressen, wie das lokale Loopback (127.0.0.1). In einem kleinen Netzwerk, in dem sich wenig ändert, könnte man einfach weitere Rechner in diese Datei eintragen und diese anschliessend auf alle Maschinen verteilen. Im Beispiel lassen sich so aphrodite, athene ... ohne Zurhilfenahme von DNS auflösen. Da gehen dann schnell die Probleme los: Nicht immer sind alle Rechner gleichzeitig an. Dann ist die Verteilung unvollständig. Bei häufigen Updates steigt mit der Zahl der Rechner und der Einträge die Fehlerwahrscheinlichkeit und ziemlich schnell hat der Admin keine Lust mehr. Das ging den Betreibern der frühen IP-Netze genau so. Das frühe Internet bestand aus wenigen Hosts und die Administratoren dieser Maschinen kannten sich alle persönlich. Das hörte mit der steigenden Zahl vernetzter Rechner irgendwann auf. Das Konzept einer einzigen ”flachen” Datei liess nicht mehr aufrecht erhalten. Fragen der Übersichtlichkeit, Ausfallsicherheit und Redundanz liessen sich mit dem Dateikonzept nicht überzeugend lösen. Ein weiteres Problem tritt auf, wenn die User in gewissem Rahmen ihre Rechnernamen selbst verwalten wollen. Informatiker an der University of California in Berkeley machten sich Gedanken, wie sich das Problem lösen liesse. Das neue System sollte dabei dezentral verteilt, ausfallsicher sein und die Datenbestände schnell konvergieren. Die Berkeley Internet Name Domain Software - daher der Name BIND - ist der Standard auf den meisten Linux-/Unix-Systemen. Die Software ist OpenSource und derzeit in der Version 9.X verfügbar. Die aktuelle Version verrät einem das Kommando /usr/sbin/named -v. DNS war nicht der einzige Versuch. Viele Admins kennen sicherlich WIN¿, das Windows Name System. Dieses kann im P2P- oder Servermodus arbeiten, kennt aber nur eine flache Namenshierarchie, welche in früheren Versionen auf 255 Maschinen beschränkt war. WINS ist ein System für LANs - ohne große Benutzereingriffe verständigen sich die beteiligten Maschinen über ihre Namen. Sie verursachen dabei aber einen nicht unerheblichen 8.1. EINSTIEG 109 Netzwerkverkehr. Mit Windows2000 und dem Active Directory, welches als unterliegende Struktur DNS verwendet, verliert WINS weiter an Bedeutung. 8.1.2 DNS - Das virtuelle IP-Telefonbuch DNS ist ein hierarchisches System mit einer einzigen gemeinsamen Wurzel. Diese wird durch einen Punkt ”.” symbolisiert. Dann folgen die sogenannten Toplevel-Domains. Hiervon gibt es zwei Typen: generische Domains und Länderkürzel. Die generischen Toplevel Domains, wie org, gov, com, mil, arpa und edu wurden schon im Herbst 1984 vorgeschlagen. net folgte ein Jahr später. Hinzu kamen auf dem obersten Level die zweibuchstabigen Länderkürzel nach ISO 3166. Eine vollständige Liste ist unter [1] erhältlich. Unterhalb dieser Hierarchiestufe kann man selbst, Organisationen oder Firmen Domains registrieren. Ab den folgenden Hierarchiestufen habt der Admin dann fast volle Freiheit, wenn er sich nur an die Benennungsstandards hält. Das Konzept des umgekehrten hierarchischen Baumes kennt man von den gängigen Dateisystemen her. Verfolgt man einen Pfad von Wurzel zu einem Knoten, so ergibt sich der jeweilige Verzeichnis- bzw. Dateinamen. Die einzelnen Ebenen werden beispielsweise bei Unix durch einen Schrägstrich (/), durch einen Backslash () bei Windows voneinander getrennt. Diese Struktur findet sich in weiteren Bereichen. Telefonnummern folgen international einem ähnlichen Prinzip: Zuerst findet man den Ländercode (+49), dann die Orts-Vorwahl (551) und schliesslich die Anschlussnummer (654321). Genauso setzt sich der komplette Rechnername2 aus mehreren Teilen zusammen. Ausser dass als Trennelement der einzelnen Ebenen der Punkt (.) verwendet wird. Anders als in den beiden vorgenannten Beispielen dreht sich die Reihenfolge von Allgemein zu Speziell um: Der Rechnername steht links, gefolgt von den Zwischenebenen bis zur Wurzel, die rechts steht. So ist beispielsweise in www.goe.net ”www” ein Name für einen konkreten Rechner. Dieser Rechner ist Mitglied in der Second-Level-Domain ”goe”, die unterhalb der Toplevel-Domain ”net” registriert wurde. 8.1.3 Regeln für die Namensgebung Damit am Ende die selbstgetauften Rechner der eigenen Domain im weltweiten Netz auch gefunden werden können, geht es nicht ohne Standards ab. Für die Zusammensetzung eines gültigen FQDN gelten einige Regeln: • Jeder Teilname (label) umfasst maximal 63 Zeichen. Es muss mindestens ein Buchstabe enthalten sein, damit ein Verwechseln mit IP-Adressen ausgeschlossen wird. • Die Gesamtlänge des FQDN darf 255 Zeichen inklusive der Punkte nicht überschreiten. • Erlaubt sind die alphanumerischen Zeichen 0-9 und a-z. Groß- und Kleinschreibung spielt keine Rolle. Zusätzlich möglich ist die Verwendung des Bindestrichs ”-”. Er kann im Gegensatz zu den anderen Zeichen nicht am Anfang oder Ende eines Namens stehen. Inzwischen sind auch Umlaute im Namen erlaubt. Hierfür gelten jedoch spezielle Regeln. • Jeder FQDN endet mit einem Punkt. Das macht normalerweise keiner und ist ausserhalb der Zonendateien des BIND auch kein Problem. 2 in der Fachsprache mit FQDN - Full Qualified Domain Name bezeichnet 110 KAPITEL 8. DNS Für Umlautdomains, sogenannte International Domain Names (IDN) wird die sogenannte ACE-Umschrift verwendet. Anwender geben in ihrem Browser beispielsweise jörg.hänßler.de ein. Diesen String wandelt der Browser dann intern in ACE für die Abfrage an den Nameserver um. Das Ergebnis des Beispiels sieht dann so aus xn–jrg-sna.xn–hnssler-5wa.de. Viele Web-Browser beherrschen inzwischen den Umgang mit IDN, viele andere ClientProgramme jedoch nicht. So liefert zwar www.müller.de ein Ergebnis im Konqueror, ein ping www.müller.de jedoch nur ein lapidares ”unknown host www.müller.de”. Ein ping auf die ACE-Umschrift (hier www.xn–mller-kva.de) klappt natürlich. Die Längenbegrenzung des Teilstrings bleibt bestehen. So können Umlautdomains nicht die Länge von 63 Zeichen erreichen, da noch Platz für die Umschrift einzuplanen ist. Für nicht öffentliche Netze ist man nicht zwangsläufig an vorgegebene Toplevel-Domains gebunden, man kann sich einfach eine aussuchen. Wenn man jedoch für sein privates Netz einfach eine offizielle Domain wählt, wie beispielsweise testnetz.de, dann könnten Nutzer verwirrt werden. Sie würden dann unter Umständen versucht sein, diese Domain auch von anderen Orten als dem eigenen privaten nach aussen abgeschotteten Netz zu erreichen. Ein Name, wie hermes.wg.site macht durch den Toplevel ”.site” klar, dass es diese Domain nicht offiziell gibt. Bis vor einiger Zeit war stattdessen die Pseudo-Toplevel-Domain ”.local” Quasistandard. Sie ist aber für selbstkonfigurierende lokale Netze3 gedacht 8.1.4 Registrieren und Verwalten von Domains Organisationen, Privatpersonen, Firmen registrieren immer eine Second-Level-Domain, die unterhalb einer dieser Toplevel-Namen liegt. Mit der Registrierung beispielsweise von ”goe” unterhalb von ”net” wurde dem Autor die Domain goe.net zugeordnet. Damit folgt nicht automatisch auch die Existenz von Domains, wie goe.org oder das Nutzungsrecht darauf. So musste beispielsweise die Firma Google die verschiedenen Domains google.com, google.net, google.de oder google.us einzeln registrieren. Die Abbildung zeigt einen symbolischen Auscountry generic Toplevel Domains de fr Second Level Domains gwdg net mil uk goe org com kernel edu google uni-freiburg ftp www www ftp www ftp www linux ks Part of Domain Name Space www Abbildung 8.1: Ausschnitt aus dem Namensraum schnitt aus dem DNS-Namensraum des Internets. Neben den ursprünglich festgelegten dreibuchstabigen generischen Toplevel-Domains und den Länderkürzeln sind in jüngster Zeit weitere Domain-Endungen hinzugekommen. Durch die Moderation von ICANN wurden weitere Toplevel-Domains vorgeschlagen: aero, biz, coop, info, museum, name, pro oder eu. Unterhalb dieser neuen Toplevel-Domains können zum Teil schon (mindestens info, biz, name) Domains über verschiedene Registrare eingetragen werden. 3 Apple nennt diesen Dienst Rendevouz. Unter Linux gibt es dafür den mdnsd Dienst, der dynamisches DNS in lokalen Netzen bereitstellt. 8.2. IMPLEMENTATION 111 Für die einzelnen Toplevel-Domains ist nicht eine Organisation oder Firma zuständig. Für die Toplevel-Domain de regelt dieses DENIC. Sie ist eine eingetragene Genossenschaft. In ihr sind beispielsweise große Internet-Service-Provider und Diensteanbieter Mitglied. Diese können im Auftrag ihrer Kunden Domains registrieren. Die Informationen wem eine Domain gehört, wer für den Betrieb des Nameservers dieser Domain zuständig ist und weitere Daten sind in der sogenannten whois-Datenbank gespeichert. Früher liessen sich diese Informationen per Kommandozeilen-Tool direkt abfragen, nun geht es nur noch über die Webschnittstellen der Registrare oder auch direkt bei www.denic.de. Domain-Inhaber, administrativer oder technischer Ansprechpartner und Zonenverwalter können durchaus verschiedene Personen sein. Die meisten Registrare stellen zwei Möglichkeiten zur Verfügung eine Domain zu ”konnektieren”, d.h. im Internet erreichbar zu machen. Der übliche Weg ist die ”Delegation”. Das bedeutet, dass in den DENIC-Datenbanken die Adressen von mindestens zwei (maximal fünf) Nameservern vermerkt werden. Üblicherweise stellen die Registrare bei der Ersteintragung von Nameservern sicher, dass diese funktionieren. Die Daten des zugehörigen SOA-Records (SOA=Start Of Authority) des Nameservers sollten ich deshalb in folgendem Spektrum bewegen (Angaben in Sekunden): Eine alternative Möglichkeit eine Domain Variable refresh retry expire ttl Geforderte Zeiten in Sekunden 10000 - 86400 1800 -28800 604800 - 3600000 180 - 345600 Tabelle 8.1: Einstellungen im SOA zu konnektieren besteht darin, dass auf dem Nameserver des Registrars ein bis zu einige ”Dienste”, die mit dieser Domain zusammenhängen direkt eingetragen werden. So können beispielsweise www.¡Name der Domain¿.de oder ftp.¡Name der Domain¿.de direkt mit einer IP-Adresse registriert werden. Dieses Verfahren wird als Konnektierung mittels NSentryEinträgen bezeichnet. Das spart den eigenen Nameserver und macht bei kleinen Domains mit wenigen Diensten Sinn. 8.2 Implementation Ein Nameserver ist niemals für das gesamte Internet verantwortlich, sondern verwaltet lediglich einen Teil des Namensraumes. Bevor es jedoch um die Frage geht, welcher Nameserver sich um welchen Bereich des Namensraumes kümmert, sind einige Begriffe zu klären. Bisher kam der Ausdruck ”Domain”, deutsch ”Domäne” schon häufiger vor. Diesen sollte man nicht mit einer (Windows-)NT-Domäne verwechseln. Eine solche fasst auch Gruppen von Rechnern organisatorisch zusammen. Es stecken jedoch komplett andere Prinzipien hinter einer DNS- oder Windows-Domain. 8.2.1 Nameserver und Zuständigkeiten Bezogen auf den DNS-Namensraum ist ein Domain ein Knoten des Baumes mit allen darunter folgenden Verzweigungen. So sind die Maschinen ftp.uni-freiburg.de und www.ks.unifreiburg.de Teile der Domain uni-freiburg.de. Die Rechner mit der gemeinsamen Domain können, müssen aber nicht in einem gemeinsamen IP-Subnetz liegen. Sie haben auch sonst nicht viel gemein oder müssen in irgendeiner weitergehenden Beziehung zueinander stehen. 112 KAPITEL 8. DNS Im Beispiel stehen der Rechner ftp.uni-freiburg.de und die Subdomain ks.uni-freiburg.de auf einer Hierarchiestufe. Unterhalb von ”ks” können wiederum Rechner (im Beispiel ”www”) eingetragen sein oder weitere Subdomains folgen. Der Begriff Domian ist eine Frage der Organisation: ”Welche Hosts beinhaltet die DNS-Domain D?” oder ”Unter welcher Domain ist die Person P oder Organisation O erreichbar?” Ist man nun für eine solche Domain zuständig oder deren Eigentümer, betreibt man einen Nameserver. In diesem kann man dann beliebige Rechnernamen eintragen oder SubDomains festlegen. So ist ks.uni-freiburg.de eine Subdomain von uni-freiburg.de. Wenn man sich diese Organisation näher anschaut, stellt man fest, dass die Domainnames hierarchisch aufgebaut sind. Trotzdem ist nur ein Nameserver für diese Domain verantwortlich. Dieser Nameserver ist ”autoritativ”. Die bis zu vier weiteren Nameserver, die man bei der Registrierung angeben kann, erfüllen Backup- und Redundanzfunktionen. Ein zentrales Konzept des DNS ist die Delegation. Die hierarchische Struktur des DNS erlaubt die Verteilung von Informationen. Das hat einige Vorteile: Die Daten werden an den Stellen gepflegt, wo sie bekannt sind. Oft kommunizieren in lokalen Netzen gerade die lokalen Maschinen direkt miteinander. Namensanfragen können direkt vor Ort mit kürzester Verzögerung beantwortet werden. Durch Delegation wird die Autorität für Subdomains auf andere Nameserver übertragen. Das passiert bei der Registrierung einer DE-Domain beim DENIC, wenn man eigene Nameserver angibt. Die neu eingetragene Domain ist eine Subdomain von DE. Bei der Delegation kann der Administrator entscheiden, welche Bereiche seiner Domain auf andere Nameserver übertragen werden sollen. In solchen Fällen spricht man von Zonen. Eine Zone ist allein durch Delegation definiert. Dieser Begriff bezeichnet deshalb meist die physikalischen Realisierung. An der Universität Freiburg ist beispielsweise die Subdomain informatik.uni-freiburg.de an einen eigenen Nameserver delegiert. Alles innerhalb dieser Subdomain bildet eine eigene Zone. Die Subdomain ks.uni-freiburg.de wird auf dem zentralen Nameserver der Domain uni-freiburg.de verwaltet. ”ks” ist also Bestandteil der Zone uni-freiburg.de. Die Nameserver der Domain uni-freiburg.de wissen um ihre Schäfchen oder kennen jemanden, der um Teilmengen weiss (delegierte Subdomains). Was ist aber, wenn ganz allgemein irgendeine Domain aufgelöst werden soll? Die oberste Ebene bei den Nameservern bilden die sogenannten Root-Nameserver. Sie sind gleichzeitig autoritativ für die Top Level Domains. Diese kennen wiederum die verantwortlichen Nameserver für die zweite Ebene, z.B. goe.net oder uni-goettingen.de. Soll ein beliebiger Hostnamen aufgelöst werden, kommt einer der Root-Nameserver ins Spiel. Nur dieser kennt den autoritativen Nameserver der Second-Level Ebene. Die Erreichbarkeit der Root-Nameserver ist zentrales Element des DNS. Ein Ausfall dieser zentralen Maschinen hätte katastrophale Auswirkungen auf die Funktion des Internets. Diese mag dann zwar immer noch wie vorher funktionieren. Aber in dem Augenblick, wo IP-Adressen nicht mehr von Namen ermittelt werden können, ist die Kommunikation schnell nicht mehr möglich. Deshalb werden Root-Nameserver durch Caching entlastet und arbeiten ausschliesslich iterativ. Bisher ging es immer um die Auflösung von Namen zu IP-Adressen. Im Beispiel oben wurde auch schon kurz der umgekehrte Fall angesprochen. Was macht man aber, wenn man die IP-Adresse kennt und den zugehörigen Hostnamen oder die Domain wissen möchte? IP-Adressen in der ”dotted-quad-notation”, also sowas wie 134.76.60.86 ähneln sich vom Aufbau her den Domainnames. Das gilt ebenfalls für eine gewisse Hierarchie (solange die Subnetzaufteilung entlang der Punkte erfolgt) der IP-Adressen: 134.76.0.0 ist als IP-Netz an die Universität Göttingen zugewiesen. Innerhalb dieses Netzes lassen sich beispielsweise Subnetze der Form 134.76.0.0 - 134.76.255.0 festlegen. Das wird einfach dazu benutzt auch für die umgekehrte Auflösung das Konzept der hier- 8.3. DNS-SERVER MIT LINUX 113 archischen Datenbank und Delegation zu nutzen. Es stößt aber schneller an seine Grenzen in dem Augenblick, wo ein Netz der Form 134.76.60.0/255.255.255.0 in mehrere Teilnetze aufgeteilt werden soll, die unterschiedlichen Subdomains zugeordnet sind. 8.2.2 Caching Nameserver können selbstständig Anfragen weiterleiten, falls sie nicht selbst für die nachgefragte Zone autoritativ sind. Trotzdem ist es in den meisten Fällen ineffektiv, wenn bei gleichen Anfragen jedes Mal eine Weiterleitung erfolgt. Deshalb speichert der Server Namensauflösungen für eine gewisse Zeit zwischen (Caching). Die Aufbewahrungsdauer für einen Eintrag ist jedoch nicht trivial zu bestimmen. Es gibt Server deren IP-Adressen sich jahrelang nicht ändern. Es gibt aber auch Maschinen, die beispielsweise per DHCP eine dynamische Adresse beziehen und nur für eine gewisse (kurze) Zeit aktiv sind. Oder Site-Betreiber nutzen DNS zur Lastverteilung verschiedene Server und reichen deshalb verschiedene IPs für dieselbe Adresse heraus4 . Wie lange dieser Eintrag beibehalten werden soll, legt der verantwortliche Serverbetreiber der Zone mit der Time-To-Live (TTL) fest. Welche Möglichkeiten einem hier zur Verfügung stehen, klärt der Abschnitt zur Einrichtung eines BIND DNS-Servers. Darüber hinaus merkt sich der anfragende Server den autoritativen Nameserver für die jeweiligen Zonen. So vermeidet er, dass bei der Auflösung nicht alle Instanzen der Hierarchie durchlaufen werden müssen. Das hat den Vorteil bei unterschiedlichen Hosts der gleichen Zone sofort der verantwortlichen Server zu kennen. DNS kennt auch negatives Caching: In diesem Fall werden nicht existierende FQDN für einen bestimmten Zeitraum gemerkt, damit nicht jedes Mal auf ein Timeout gewartet werden muss - diese Zeit wird allerdings vom ursprünglich befragten Nameserver selbst vorgegeben. 8.2.3 Primärer und sekundäre Nameserver Beim Entwurf von DNS wurde sehr viel Wert auf Ausfallsicherheit gelegt. Aus diesem Grund ist es üblich, statt eines einzigen gleich mehrere Nameserver für eine Zone zu betreiben. Sekundäre Nameserver werden bei Änderungen der Zonendaten durch den primären benachrichtigt. Sie holen sich dann die aktuellen Zoneninformationen (Zonentransfer). Generell gilt: Es gibt immer nur ein primärer aber bis zu vier sekundäre Nameserver. Heute haben sich allerdings für den primären Master-Nameserver die Bezeichnung Master und für die sekundären Master-Nameserver die Bezeichnung Slaves durchgesetzt. ”Slave” klingt etwas nachgeordnet. Trotzdem verbirgt sich hinter dieser Bezeichnung ein vollwertiger Nameserver. Da ein einzelner physikalischer Nameserver sowohl Master als auch Slave für unterschiedliche Zonen sein kann, ist diese Unterscheidung nicht immer eindeutig. 8.3 DNS-Server mit Linux Nameserver gehören zu den wichtigsten Diensten des Internets. Anders als Webserver agieren sie jedoch im Hintergrund. Wer irgendwelche Dienste im Netz anbietet, ist nicht nur darauf angewiesen, dass der Webauftritt attraktiv gestaltet ist und die Wartezeiten kurz sind, sondern auch, dass der Server überhaupt gefunden wird. Damit ist nicht der Eintrag in Suchmaschinen gemeint, sondern die Auflösung des Domain-Namens in eine IP-Adresse. Für eine ganze Reihe von Anwendungen, wie Mail ist auch die umgekehrte Auflögung von einer IP zu einem FQDN erwünscht. 4 siehe das Eingangsbeispiel für google.de 114 KAPITEL 8. DNS Ein Großteil der weltweiten DNS-Server laufen inzwischen auf einer Kombination von Linux und BIND. Bind9 besteht aus mehreren Paketen und ist für alle aktuellen LinuxDistributionen verfügbar. 8.3.1 Der Dämon Üblicherweise wird für den DNS der Bind verwendet. Der Dienst, der später als Daemon im Hintergrund läuft heisst named. Das dazugehörige Startskript /etc/init.d/bind9 unter Debian und /etc/init.d/named für anderen Distributionen. Oft findet man noch weitere Dateien im Sysconfig- oder Defaultsverzeichnis, die das Verhalten des Daemons steuern, ihn beispielsweise mit einer anderen UserID als ”root” starten. Konfiguriert wird der named durch die /etc/named.conf bzw. /etc/bind/named.conf. Im folgenden bezieht sich die Beschreibung auf eine Debian-Installation.5 named.conf ist die zentrale Konfiguration zum Verhalten des Servers und der Definition der verschiedenen Master- und Slave-Zonen. Die Server-Optionen sind für die bessere Übersichtlichkeit in eine weitere Datei named.conf.options oder ähnliche ausgelagert. In dieser Datei kann man beispielsweise die Forwarder definieren und ACLs für den Zugriff auf den Server festlegen. Auf diese Weise legt beispielsweise das Keyword ”listen-on” für das üblicherweise benutzte IPv4 fest, auf welchem Port und auf welchen IP-Adressen der Server auf Anfragen lauscht. So läßt verhindern, dass ein lediglich interner Server, der auf einem Gateway läuft auch für externe Anfragen offen ist. So können Angreifer nicht per DNS erfahren, wie das interne Netz strukturiert sein könnte. Statt der Angaben von IP-Adressen oder Netzen lassen sich vor dem ”options”-Block auch Access Control Lists (ACLs) definieren: acl localnet 10.8.4.0/24; 10.8.10.0/24; ; Diese trägt man dann direkt ein: listen-on port 53 localnet; ; Das Keyword ”listen-on-v6” regelt das Ganze für IPv6. ”forwarders” definiert eine Liste von Servern, an die Anfragen weitergeleitet werden, wenn der Server diese nicht selbst beantworten kann. So kann man vom Cache Ihres Internetproviders profitieren. Normalerweise sucht ein Nameserver das Internet rekursiv ab, bis er die gesuchte Antwort findet. Durch diese Option wird stets der Nameserver Ihres Internetproviders zuerst befragt. Wenn es sich dabei um einen schnellen, viel benutzten Nameserver handelt, kann dies zu einer Geschwindigkeitssteigerung führen. ; /etc/bind/named.conf include "/etc/bind/named.conf.options"; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; 5 Andere Distributionen legen die Konfigurationsdateien und Daten oft woanders ab, beispielsweise unterhalb von /var/lib/named. Wenn man sich an der named.conf orientiert, findet man alle weiteren Dateien schnell, weshalb in der Darstellung nicht weiter auf Spezialitäten einzelner Distributionen eingegangen wird. 8.3. DNS-SERVER MIT LINUX 115 }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; include "/etc/bind/named.conf.local"; In der named.conf sind eine Reihe spezieller Zonen bereits definiert. So enthält die Datei db.root die Liste aller 16 Root-Nameserver. Ein Großteil dieser Maschinen steht in den USA, einige in Europa und eine Maschine in Japan. Ihre IP-Adressen sind fix. Diese Server werden iterativ befragt, wenn der eigene DNS eine Adresse nicht auflösen kann. Die Zone ”.” ist deshalb vom Typ ”hint” - der Nameserver ist für diese Zone nicht authoritativ, erfährt hier aber, wo er weiterfragen kann. Weiterhin gibt es einige spezielle Zonen, wie localhost oder ”127.in-addr.arpa”. Für diese Zonen ist ein Server immer authoritativ. Das verhindert, dass von schlecht konfigurierten Maschinen Anfragen auf einen Namen wie localhost oder eine IP aus 127.0.0.0/255.0.0.0 überhaupt ins Netz gelangen. Jeder Rechner mit installiertem IP-Stack hat auf dem Loopback-Interface üblicherweise die IP-Adresse 127.0.0.1 definiert. Auch mit solchen Anfragen sollten keine entfernten Nameserver behelligt werden. Das gilt ebenfalls für IP-Adressen, die mit einer 06 und mit 255 beginnen. So fangen die lokale Broadcast-Adresse oder die meisten Netzmasken an. Alle diese speziellen Zonenfiles werden bei der Installation automatisch angelegt. Die eigenen Zonen definieren Sie der Übersichtlichkeit halber am besten in der Datei /etc/bind/named.conf.local oder dem Konzept der gewählten Distribution entsprechend. 8.3.2 Die DNS-Datenbank Es gibt zwei Arten von Zonen: Für die Master-Zonen ist der Server authoritativ, die SlaveZonen kopiert er definiert durch die Update-Festsetzungen vom für die Zone authoritativen Server. zone "wg.site" in { type master; file "/etc/bind/db.wg.site"; allow-update { 127.0.0.1; 10.8.4.254; }; }; zone "4.8.10.in-addr.arpa" in { type master; file "/etc/bind/db.10.8.4"; allow-update { 127.0.0.1; 10.8.4.254; }; }; Die DNS-Datenbanken enthalten recht unterschiedliche Einträge: Zum einen muss eine Auflösung von FQDN in Richtung IP-Adressen und umgekehrt möglich sein, weiterhin sollten Informationen zu Nameservern vermerkt sein. Unter Umständen legt man ebenfalls Zonenfiles für die Rückwärtsauflösung von IPv6-Adressen und Telefonnummern nach ENUM an. Die Informationseinheit in einer DNS-Datenbank wird Resource Record (RR) genannt. Zu jedem Eintrag korrespondiert ein Typ, der die Art der enthaltenen Daten beschreibt, und eine Klasse, die den Netzwerktyp beschreibt, für den der Record gilt. Der Prototyp eines RR ist der A-Record, bei dem ein voll qualifizierter Domainname mit einer IP-Adresse assoziiert ist. 6 0.0.0.0 ist eine spezielle Adresse zur DHCP-Anfrage 116 KAPITEL 8. DNS Wie bereits erwähnt wurde, ist es möglich einem Host mehr als einen Namen zuzuordnen (Aliasing). Einer dieser Namen ist der offizielle Hostname, während alle weiteren nur Aliase sind, die mit dem offiziellen Namen verknüpft werden. Der Unterschied in der Eintragung liegt in der Bezeichnung: Der kanonische Hostname besitzt einen A-Record, während die anderen nur einen Record vom Typ CNAME verwenden. Ein Beispieleintrag für die Auflösung von Hostnamen nach IP-Nummern: ; /etc/bind/wg.site $TTL 360 ; 6 minutes @ IN SOA IN NS 10 mail.wg.site. IN MX ns IN A nameserver IN CNAME $TTL 86400 ; 1 day mail IN A mail-backup IN A anphrodite IN A dionysos IN A $TTL 360 ; 6 minutes demeter IN A hermes IN A IN HINFO IN TXT ns.wg.site. dirk.wg.site. ( 2005011002 ; serial 28800 ; refresh (8 hours) 1800 ; retry (30 minutes) 3600000 ; expire (5 weeks 6 days \ 16 hours) 86400 ; minimum (1 day) ) ns.wg.site. IN MX 20 mail-backup.wg.site. 10.8.4.25 ns 10.8.4.21 10.8.4.22 10.8.4.203 10.8.4.204 10.8.4.251 10.8.4.252 "AMD Opteron" "Linux" "WG-DNS for PE28" In den Zonendateien ist jeder mit einem Punkt ”.” endende Rechnername ein exakter Rechnername. Alles, was ohne den abschließenden Punkt geschrieben wird, bezieht sich auf den Ursprung (hier wg.site). Damit würde aus dem Namen ns.wg.site für BIND ns.wg.site.wg.site werden, sicherlich nicht die Intention des Zonenadmins. hermes steht daher für ”hermes.Ursprung”. In der Beispielzonendatei ist wg.site. der Ursprung, damit wird aus hermes hermes.wg.site. Ein Beispieleintrag für die umgekehrte Auflösung: $TTL 360 @ 254 $TTL 86400 21 22 203 ; 6 minutes IN SOA ns.wg.site. dirk.goe.net. ( 2005011002 ; serial 28800 ; refresh (8 hours) 1800 ; retry (30 minutes) 3600000 ; expire (5 weeks 6 days 16 hours) 86400 ; minimum (1 day) ) IN NS ns.wg.site. IN PTR ns.wg.site. ; 1 day IN PTR mail.wg.site. IN PTR mail-backup.wg.site. IN PTR aphrodite.wg.site. 8.3. DNS-SERVER MIT LINUX 204 $TTL 360 251 252 117 IN PTR dionysos.wg.site. ; 6 minutes IN PTR demeter.wg.site. IN PTR hermes.wg.site. TTL gibt die Lebensdauer aller Einträge in der Zone an, die kein ausdrückliches TTL besitzen, welches vor dem IN als Integer-Sekunden-Wert eingetragen werden würde. 8.3.3 Starten und Anhalten des Nameservers Nachdem Sie Ihre Zonendateien für die Vorwärts- und Rückwärtsauflösung angelegt und diese in der named.conf(.local) eingetragen haben, steht nun der Start des Servers an: linux04:/etc/bind# /etc/init.d/bind9 start Das Stoppen des Dienstes oder den Neustart regeln Sie entsprechend über ”stop” oder ”restart”. Eventuell auftretende Fehlermeldungen liefert named in der Datei /var/log/syslog ab. Hier überprüft man, ob alle Ihre Zonenfiles ohne Beschwerden akzeptiert wurden. Im Logfile liefert named Informationen auf welchen Interfaces er lauscht, wieviele Prozessoren er in Anspruch nimmt und welche Zonenfiles er erfolgreich eingelesen hat. Wenn Sie den Dienst automatisch beim Hochfahren der Maschine starten wollen, sollten Sie einen entsprechenden Link in den Runlevelverzeichnissen auf das Startskript /etc/init.d/bind9 anlegen. Feb 11 21:17:57 linux04 named[13692]: starting BIND 9.2.4 -u bind Feb 11 21:17:57 linux04 named[13692]: using 1 CPU Feb 11 21:17:57 linux04 named[13694]: loading configuration from ’/etc/bind/named.conf’ Feb 11 21:17:57 linux04 named[13694]: no IPv6 interfaces found Feb 11 21:17:57 linux04 named[13694]: listening on IPv4 interface lo, 127.0.0.1#53 Feb 11 21:17:57 linux04 named[13694]: listening on IPv4 interface eth0, 10.8.4.254#53 Feb 11 21:17:57 linux04 named[13694]: listening on IPv4 interface eth0:1, 192.168.1.2#53 Feb 11 21:17:57 linux04 named[13694]: zone ’wg.site’ allows updates by IP address, which is insecure Feb 11 21:17:57 linux04 named[13694]: zone ’4.8.10.in-addr.arpa’ allows updates by IP address, which is insecure Feb 11 21:17:57 linux04 named[13694]: command channel listening on 127.0.0.1#953 Feb 11 21:17:57 linux04 named[13694]: zone 0.in-addr.arpa/IN: loaded serial 1 Feb 11 21:17:57 linux04 named[13694]: zone 4.8.10.in-addr.arpa/IN: loaded serial 2002100405 Feb 11 21:17:57 linux04 named[13694]: zone 127.in-addr.arpa/IN: loaded serial 1 Feb 11 21:17:57 linux04 named[13694]: zone 255.in-addr.arpa/IN: loaded serial 1 Feb 11 21:17:57 linux04 named[13694]: zone localhost/IN: loaded serial 1 Feb 11 21:17:57 linux04 named[13694]: zone wg.site/IN: loaded serial 2002100405 Feb 11 21:17:57 linux04 named[13694]: running 8.3.4 Slave-Server Bisher beschäftigte sich die Darstellung mit dem Aufsetzen eines primären DNS und dem Anlegen der Zonen-Dateien. Wenn nicht lediglich ein privater DNS betrieben wird, sollte 118 KAPITEL 8. DNS man unbedingt aus Gründen der Redundanz Slaves vorsehen. Hier fällt der Aufwand jedoch bedeutend geringer aus, da man lediglich die namd.conf.local anpassen muss. Trägt man hier alle Zonen ein, für die diese Maschine als Slave zuständig sein soll. zone "wg.site" IN { type slave; masters { 10.8.4.254; }; file /etc/named/secondary/db.wg.site; } Man starte den Slave neu, nachdem der Master bereits läuft. Damit alles klappt muss named im Verzeichnis /etc/named/secondary über Schreibrechte verfügen. Hier landen die Daten eines erfolgreichen Domain-Transfers. Im Logfile des Masters findet sich ein Hinweis auf diesen Vorgang: Feb 11 22:18:02 linux04 named[13722]: client 132.230.4.44#36606: transfer of ’wg.site/IN’: AXFR started Anhand der Seriennummer der Datei stellt der Slave fest, ob sich Daten auf dem Server geändert haben (sollten). Sie muss daher stets inkrementiert werden, wenn eine Änderung vorgenommen wurde. Quasistandard ist ein JJJJMMTTRR-Format, um die Seriennummer festzulegen. 2005011002 steht also für den 10.01.2005, die beiden letzten Stellen für die zweite Modifikation der Zonendatei an diesem Tag. Nun ist diese Zahl oft nicht so übersichtlich, als dass man nicht versehentlich einen Fehler macht und eine Stelle zuviel drin hat. Wenn die Slaves eine solche Seriennummer übernommen haben und anschliessend auf dem Master wieder eine korrigierte Nummer eingetragen ist, bekommen sie kein Update mehr mit. Ihre Nummer ist immer größer als die des Masters. Um dieses Dilemma in den Griff zu bekommen, kann man den folgenden Trick anwenden: Man trage 231 − 1 (=2147483647) ein. BIND arbeitet mit vorzeichenbehafteten 32 bit Zahlen. So ist diese der größtmögliche Wert und in der nächsten Runde wird wieder jede beliebige Seriennummer von den Slaves als Grund für ein Update akzeptiert. In den Beispielen wurde eine strenge Trennung von Master- und Slave-Servern angenommen. Das muss natürlich in der Realität nicht so sein. Hier sind viele Server authoritativ für eine Reihe von Zonen und sekundär für eine Anzahl anderer Zonen. 8.3.5 Delegation einer Subdomain In den bisherigen Beispielen stimmte eine Zone immer mit einer Domain überein. Ein Nameserver war für den gesamten Namensraum zuständig. Dieser war einfach strukturiert: maschinenname.domain.topleveldomain, z.B. hermes.wg.site. Nun erlaubt DNS aber Teile seines Namensraumes an andere Nameserver zu delegieren. So können Admins bestimmter organisatorischer Einheiten ”ihre” Zone verwalten. Mit folgendem Eintrag in der Zonendatei des Beispiels (/etc/bind/db.wg.site) delegiert der Nameserver die Zone, in diesem Fall die Subdomain sub.wg.site an die Server ns1.sub.wg.site und ns2.sub.wg.site. [ ... ] sub ns1.sub ns2.sub [ ... ] IN IN IN IN NS NS A A ns1.sub.wg.site. ns2.sub.wg.site. 10.8.5.1 10.8.5.2 Der Resource-Record NS regelt die Delegation. Damit weiss der Nameserver, dass Anfragen auf *.sub.wg.site an die dafür zuständigen Server ns1 und ns2.sub.wg.site weitergereicht werden. Deren Namen müssen natürlich ebenfalls zu IP-Adressen aufgelöst werden können. Deshalb sind die beiden Nameserver ebenfalls mit einem A-Record vertreten. 8.4. DYNAMISCHE UPDATES DER ZONENDATEIEN 8.4 119 Dynamische Updates der Zonendateien Mit steigender Anzahl verwalteter Zonen und Hosts wird das Verfahren der händischen Manipulation der Zonendateien für Admins schnell aufwändig. Nebenher hat sich die Zahl mobiler Endgeräte deutlich ausgeweitet. Das sind Hosts, die oft in verschiedenen Netzen betrieben. Zudem sind sie oft nicht sehr lange angemeldet. Hier wünscht man sich ein Verahren, was ähnlich zu WINS dynamisch arbeitet. Mit BIND seit Version 8 kann man dynamische Änderungen an den Resource Records vornehmen (lassen), ohne dafür Dateien editieren und diese neu laden zu müssen. Solche Änderungen können auch durch externe Dienste, wie DHCP angestoßen werden. Um dieses zu erlauben, muss der Admin eine zusätzliche Zeile in die Zonendefinition einfügen: zone "wg.site." IN { ... allow update { 172.0.0.1; }; } Im Beispiel ist nur das Update von der Loopbackadresse erlaubt. Man kann natürlich auch Listen von IP-Adressen oder ACLs angeben. Dabei ist jedoch zu beachten, dass bei der Datenübertragung über das Netz DNS nicht automatisch verschlüsselt. Wie man dieses einschaltet, wird im folgenden Abschnitt erklärt. Um das neue Feature gleich mal auszuprobieren, kann nsupdate verwendet werden. Dieses Programm ist im BIND-Paket enthalten. Es arbeitet interaktiv ähnlich wie nslookup. Man gebe zuerst den DNS-Server an und dann einen Eintrag der hinzugefügt oder gelöscht werden soll. Nach dem Eintrag ist ein zweimaliges ”Enter” erforderlich. linux:~ > nsupdate > server 127.0.0.1 > update add newhost.wg.site 300 A 10.8.4.51 > > update delete newhost.sg.site 300 A 10.8.4.51 Damit die ganze Geschichte auch funktioniert, muss der Nameserver das Recht haben das Verzeichnis der Zonendateien und diese selbst zu schreiben. Im Beispiel wurde eine Datei /etc/bind/db.wg.site.jnl beim Hinzufügen eines Eintrages angelegt. Alle 15 Minuten macht BIND einen Dump der Zonendatei mit den neuen oder ohne die zwischendurch entfernten Einträge und erhöht dabei die Seriennummer automatisch. 8.4.1 Sicherheit Wie man im Beispiel sehen konnte, benötigte nsupdate keine besondere Authentifizierung, um Änderungen an den DNS-Daten vorzunehmen. Eine Absendeadresse ist leicht zu fälschen, weshalb man sich schnell einen besseren Schutz wünscht. Ebenfalls will kein Administrator ernsthaft, dass jeder beliebige Host im Internet vom eigenen DNS ein Zonentransfer anfordern kann. Dieser ist normalerweise den Slaves vorbehalten, um ihre Daten zu aktualisieren. Ebenfalls seit Version 8 implementiert BIND zur Erhöhung der Sicherheit sogenannte Transaction Signatures (TSIGs). Dieses sind digitale Signaturen, die HMAC-MD5 als Einwege-Hashfunktionen benutzt. Die Signatur ist dabei nicht nur von der Nachricht, sondern auch von einem Schlüssel abhängig. Der Hashwert wird über die komplette binäre Nachricht berechnet und als Resource Record (Typ TSIG) angehängt. Zur Verhinderung von Replay-Attacken ist das Datum Bestandteil der Signatur. 120 KAPITEL 8. DNS Das Bastelset zum Erzeugen der Schlüssel liefert BIND mit dnssec-keygen. Der Aufruf dnssec-keygen -b 128 -a HMAC-MD5 -n HOST hermes.wg.site generiert einen 128bitSchlüssel, der genau einer Maschine zugeordnet ist. linux04:~# dnssec-keygen -b 128 -a HMAC-MD5 -n HOST hermes.wg.site Khermes.wg.site.+157+23873 linux04:~# ls Khermes.wg.site.+157+23873.* Khermes.wg.site.+157+23873.key Khermes.wg.site.+157+23873.private linux04:~# cat Khermes.wg.site.+157+23873.key hermes.wg.site. IN KEY 512 3 157 ynhDhu8MM0vNsdWivlTFow== linux04:~# cat Khermes.wg.site.+157+23873.private Private-key-format: v1.2 Algorithm: 157 (HMAC_MD5) Key: ynhDhu8MM0vNsdWivlTFow== Das Kommando legt zwei Dateien im Arbeitsverzeichnis an. In der Datei mit der Endung *.key findet man den öffentlichen Schlüssel in der anderen *.private den privaten. Den öffentlichen Schlüssel läßt sich nun in die entsprechende Zonendatei integrieren. So kann er beispielsweise mit host -t KEY hermes.wg.site abgefragt und zur Verifikation des privaten Schlüssels herangezogen werden. Den privaten Schlüssel hinterlegt man in der Datei mit den Zonendefinitionen /etc/bind/named.conf.local: key hermes.wg.site. { algorithm hmac-md5; secret "Geq/RRYhuAIrlUzJKj49MQ=="; }; und sorgen dafür, dass nur noch ein Update unter Angabe des Schlüssels erfolgen darf: zone "wg.site" in { type master; file "/etc/bind/db.wg.site"; allow-update { key hermes.wg.site.; }; }; Nach den Änderungen muss der Server neu gestartet werden. Ausprobieren kann man das Ganze nun mit dem Aufruf von nsupdate mit der Angabe der Datei mit dem privaten Schlüssel: nsupdate -k Khermes.wg.site.+157+23873.private Die Transaktionen werden nun mit dem Schlüssel signiert. Ohne Angabe des Schlüssels würde die Aktion mit einem ”REFUSED” fehlschlagen. nsupdate ist sicherlich nicht die alltägliche Anwendung. Bei den Fragen der Sicherheit geht es eher um Zonentransfers. Hierzu muss der private Schlüssel sowohl auf dem Masterals auch auf dem Slave-DNS-Server eingetragen sein. Für Zonentransfers heisst die Option statt ”allow-update” ”allow-transfer” unter Beibehaltung der restlichen Syntax. Auf dem Slave sehen die Eintragungen nun wie folgt aus: key hermes.wg.site. { algorithm hmac-md5; secret "Geq/RRYhuAIrlUzJKj49MQ=="; }; server 10.8.4.254 { keys { hermes.wg.site.; }; }; zone "wg.site" IN { type slave; masters { 10.8.4.254; }; file /etc/named/secondary/db.wg.site; } 8.5. DNS BEKOMMT NEUE AUFGABEN 8.5 8.5.1 121 DNS bekommt neue Aufgaben ENUM Voice-over-IP hat im zweiten Anlauf nach den ersten Startversuchen Ende der 90er Jahre richtig Schwung bekommen. Spätestens seit der letzten Cebit 2004 hat der Hype um die Telefonie über das Internet die breite Öffentlichkeit erreicht. Nun waren Telefonie und IP-Netze lange Zeit zwei völlig getrennte Dienste, ein Zustand mit dem große Telefonie-Anbieter, wie die Telekom gut leben konnten. Wärend im Hintergrund beide Dienste konvergieren, steht nach aussen noch ein entscheidender Unterschied: International erreicht man jeden Teilnehmer am öffentlichen Telefonnetz über die 1-3 stellige Ländervorwahl gefolgt von einer maximal 15-stelligen nationale Telefonnummer. Letztere besteht aus einer Vorwahl und Anschlußnummer, wobei das Vorwahlkonzept in unterschiedlichen Ländern verschieden gehandhabt wird. Rechner im Internet werden hingegen durch ihre weltweit eindeutige IP angesprochen. ENUM schlägt hier nun die Brücke und führt beide Systeme unter Zurhilfenahme von DNS zusammen. Definiert ist die Abbildung von Telefonnummern im Domain Name System in RFC2916 zu ENUM E.164. ENUM kann noch mehr, nämlich beliebige Kommunikationsformen (Mail, Webseite, ...) auf eine Telefonnummer abbilden und diese hierarchisch anordnen. DNS ist deshalb für ENUM interessant, da es seit Jahren etabliert ist und damit eine schnelle Umsetzung erlaubt. Die Vergabe von Telefonnummern ist in jedem Land ein hoheitlicher Akt, in Deutschland übernimmt das die Regulierungsbehörde für Telekommunikation. Sie hatte beispielsweise Ende letzten Jahres mit der Entscheidung über die ortsunhabhängige Vorwahl 032 für SIPTelefonanschlüsse von sich hören lassen. Damit Telefonnummern im DNS-System darstellbar sind, werden sie in eine eindeutige Domain verwandelt. Hierzu wurde die Domain ”e164.arpa” eingeführt analog zu ihrem IPPendant ”in-addr.arpa” der Reverse-Auflösung. Unterhalb dieser Domain trägt man nun einfach Subdomains für jede Ziffer einer Telefonnummer ein. Anders als bei IP-Adressen und Telefonnummern steht bei DNS die spezifischte Information ganz links: Die ToplevelDomain ist immer die ganz rechte, die Secondlevel-Domain die zweite von Rechts und Subdomains sind dann weitere bis der Rechnername ganz links kommt. Deshalb dreht man die die Telefonnummer um. So wird aus +49-551-654321 ein Eintrag der Form 1.2.3.4.5.6.1.5.5.9.4.e164.arpa. 1. Zunächst entferne man alle optischen Strkturierungen, wie ”+”, ”-”, Leerzeichen: 49551654321 2. Man ordne die Ziffernfolge um: Aus 49551654321 erhält man 12345615594 3. Man setze Punkte zwischen die Ziffern: 1.2.3.4.5.6.1.5.5.9.4 4. Am Ende fügt man noch die ENUM-Domain ”e164.arpa” an: 1.2.3.4.5.6.1.5.5.9.4. e164.arpa Den nun generierten vollständigen Domainnamen kann DNS nun ganz normal wie eine IP auch im Nameservicebetrieb verwenden. RFC2915 definiert für das ENUM-Protokoll spezielle Nameserver-Einträge, um auf die einzelnen Kommunikationsadressen (Telefon, Mail...) zu verweisen. Zum Einsatz kommen sogenannte ”Naming Authority Pointer Records” (NAPTR). Für jede Domain lassen sich mehrere dieser NAPTR-Einträge angeben. Sie erlauben ebenfalls Prioritäten (Preferenzen) festzulegen. 122 KAPITEL 8. DNS Mit ENUM ändert sich der Charakter eines Anrufes grundsätzlich: Zunächst wird über das DNS-System die Telefonnummer bis zum NAPTR-Eintrag ermittelt. Diese weist dann auf eine Nummer eines Telefons oder Faxes, eines Handys oder weiterer Geräte. ENUM gestattet so dem Inhaber einer Telefonnummer, quasi beliebig viele Dienste auf seine Nummer abzubilden. Das vereinfacht in Zukunft das Verfahren alternative Dienste durch Telekommunikationsendgeräte und ¿Applikationen anzusprechen. 8.5.2 IPv6 Die nächste Generation der IP-Adressen steht schon länger vor der Tür. Für den Endbenutzer sicherlich noch nicht relevant, so tut sich jedoch schon hinter den Kulissen einiges. Entsprechend schreitet auch die Auf- und Umrüstung der IP-Dienste auf IPv6 voran. So ist BIND seit einiger Zeit in der Lage IPv6-Adressen genauso wie Ihre IPv4-Pendants vorwärts und rückwärts aufzulösen. Für IPv6 wurde ein neuer Ressourcentyp eingeführt: AAAA repräsentiert eine IPv6 Adresse (A entsprach 32bit, 4*A entsprechend 128bit). Einträge in der Zonen-Datei zur Vorwärtsauflösung könnten also so aussehen: [ ... ] aphrodite aphrodite-ipv6 dionysos dionysos-ipv6 IN IN IN IN A AAAA A AAAA 10.8.4.203 3ffe:701:10:200:22:feb5:3456 10.8.4.204 3ffe:701:10:200:22:feb5:3457 Die Rückwärtsauflösung landet in einer eigenen Zonendatei (beispielsweise 5.b.e.f.2.2.0.0. 0.0.2.0.0.1.0.0.4.e.f.f.3.ip6.arpa): [ ... ] 3456 3457 IN PTR IN PTR aphrodite-ipv6.wg.site. dionysos-ipv6.wg.site. Ein Problem entsteht nun natürlich bei der Auflösung von Namen zu IP: Welche Informationen sollen zurückgeliefert werden: Beide IP-Adressen oder jeweils die eine oder andere? Darüberhinaus gibt es noch einige weitere Stolperfallen: Angenommen, man betreibt eine Maschine ausschliesslich mit einer IPv6 Adresse. Dann lässt sich nicht einfach im Resolver eine IPv4 Adresse für den Nameserver angeben. Die Maschine wäre in den meisten Fällen nicht in der Lage ihre Anfragepakete dorthin zu routen. Der IPv4 DNS Ihres Netzes kann aber Proxy-Funktionen übernehmen. Er lauscht nicht nur wie gewohnt auf den IPv4-Interfaces sondern bekommt auch eine IPv6-Adresse zugeteilt, die von den Clients im eigenen Netz erreicht werden kann. Der Server empfängt dann die Anfragen vom Client über das IPv6-Interface und holt seinerseits Erkundigungen über das klassische IPv4 Netz ein. 8.5.3 DNS als Bannerfilter Wie sehr es auf einen funktionierenden Nameservice ankommt, sieht man, wenn man einfach mal eine häufig benutzte Domain falsch auflöst. Wenn man im eigenen LAN einen DNS betreibt, den alle Maschinen benutzen (müssen), kann man diesen für alle möglichen Zonen als authoritativ deklarieren. Hierzu trägt man einfach eine Zone für die entsprechende Domain nach und verweisen auf ein dafür speziell definiertes Master-File. zone "google.de" in { type master; file "master/empty.zone"; }; 8.6. AUFGABEN 123 zone "falkag.de" in { type master; file "master/empty.zone"; }; zone "doubleclick.net" in { type master; file "master/empty.zone"; }; Dabei spielt es überhaupt keine Rolle, wenn alle diese Zonen die identische Datei benutzen. In dieser wird lediglich dafür gesorgt, dass auf jede Anfrage eine 127.0.0.1 zurückgeliefert wird. ; NULL Zone File for Ad Servers and other unwanted services ; @ IN SOA mydomain.site. me.mydomain.site. ( 131 ; serial number 28800 ; refresh 1800 ; retry 432000 ; expire 18000 ) ; minimum TTL ; Zone NS records @ NS mydomain.site. A 127.0.0.1 * IN A 127.0.0.1 Das Beispiel zeigt die Nutzung eines Wildcards ”*”. Es muss nicht für jeden Namen ein Eintrag existieren, diese können so einfach zusammengefaßt werden. Wenn man den Nameserver beispielsweise für doubleclick.net authoritativ macht, dann schlägt das Laden aller Banner und Webbugs fehl, die als Quelle eine Maschine dieser Domain angeben. Je nach Browser können dann einige Seiten etwas verändert aussehen, da plötzlich Seitenelemente von denen man nie vermutet hätte, dass sie von extern kommen, fehlen. Dies ist kein Allheilmittel. Jeder Anbieter kann natürlich statt eines FQDN auch eine IP in seine Webadressen schreiben. Trotzdem ist es ein recht einfaches probates Mittel, um seine Datenspur bei sehr großen Diensteanbietern einfach zu reduzieren. Es zeigt aber auch, dass wenn die wenigen zentralen Root-Server nicht erreichbar sind, nicht mehr viel funktionieren würde. 8.6 8.6.1 Aufgaben Rechnernamen im Internet 1. Welche Aufgabe hat der DNS? 2. Warum kann man nicht einfach bei der alten /etc/hosts als einfache Zuordnung zwischen IP und Hostnamen bleiben? 3. Warum kann man zwar auf der lokalen Maschine den Hostnamen ändern; es hat aber keine Auswirkungen für alle anderen Rechner? 4. Man änder den Hostnamen! Wo müsste die dauerhafte Änderung eingetragen sein? Man ändere nun einen Eintrag für einen Rechner in der /etc/hosts, warum kann man 124 KAPITEL 8. DNS diesen Rechner nun unter dem neuen Namen anpingen, obwohl der “Besitzer” dieses Rechners den Namen nicht geändert hat? 5. Wo trägt man auf einem Linuxrechner die IP-Nummern von Nameservern ein? Warum kann man da nicht einfach den Namen des (Nameserver-)Rechners eintragen? 6. Warum macht es Sinn, mehrere DNS-Server einzutragen? Wo trägt man diese ein? 8.6.2 Domain Name Service (DNS) 1. Was ist eine sogenannte Toplevel-Domain? Welche gibt es traditionell, welche sind erst in jüngerer Zeit hinzugekommen? 2. Worin besteht der Unterschied zwischen DNS Resolver und DNS Nameserver? 3. Welche Resource Records (RR) gibt es? Welche Bedeutung haben diese jeweils? 8.6.3 DNS Server 1. Worin unterscheiden sich rekursive und iterative Namensauflösung? Warum antworten die Root-Nameserver immer nur iterativ? Mit welchem Kommando kann man das geschilderte Phänomen am besten nachvollziehen? 2. Wieviele Root-Nameserver gibt es? Wo stehen diese? Wodurch ist deren Zahl begrenzt? Kapitel 9 Webserver Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur eine Teilmenge der TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache des modernen WWW. Der für den Anwender sichtbare Vorgang des Abrufs eines Dokuments besteht in der Regel aus der Eingabe einer URI oder dem Anklicken eines Links, gefolgt von der Darstellung der Daten oder einer Fehlermeldung. Diese einfache Art und Weise der Benutzung hat viel zur breiten Akzeptanz des Internets beigetragen. 9.1 Überblick Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll der Applikationsschicht HTTP spielen einige Bezeichnungen eine Rolle: • Ressource - ist die Quelle eines Webinhalts, der durch eine URI identifiziert werden kann. Der einfachste Typ der Ressource ist eine statische Datei im Filesystem des Web-Servers. Typ und Inhalt der Datei sind beliebig. Außerdem kann die Ressource auch ein Programm sein, welches bei Aufruf einen bestimmten Inhalt generiert und ausliefert. • URI - Uniform Resource Identifier bezeichnet den weltweit eindeutigen Name für eine Ressource. z.B http://www.goe.net/index.php) • URL - Uniform Resource Locator ist eine Unterart von URI, lokaler Name für die Ressource, sie bleiben anhand ihres Pfades voneinander unterscheidbar. • URN - Uniform Ressource Name, ein spezialer Typ von URI, auch weltweiter eindeutig. z.B. urn:isbn:0-596-00962-3 Die Enwicklung des WWW begann mit HTTP/0.9, einer Prototyp-Version, die von Tim Berners-Lee am CERN in den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard wurde. Es kamen Versionsnummern, HTTP-Header, zusätzliche Methoden (Head, Post, DELETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten hinzu. Das Nachrichtenformat von Antworten und Anfragen wird genauer spezifiziert. HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich jedoch nur um eine rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen wird und der Server sich dem Client gegenüber nicht authentifizieren kann. 125 126 KAPITEL 9. WEBSERVER Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich auf die Korrektur der Designfehler, das Spezifizieren von Semantik, einigen PerformaceOptimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Antworten pro TCP-Verbindung gesendet werden. Für ein HTML-Dokument mit eingebetteten Bildern wird so nur eine TCP-Verbindung benötigt, wo vorher für jede Resource eine separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads fortgesetzt werden. Über Cookies in den Header-Informationen können Anwendungen realisiert werden, die Statusinformationen (Benutzereinträge, ...) zuordnen können. Dadurch können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfordern, realisiert werden. Auch eine Benutzerauthentifizierung ist möglich. Die Methoden sind auch weiter entwickelt. HTTP/1.1 bietet eine TRACE-Methode, mit der man den Weg zum Webserver überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver über die verschiedenen Proxies hinweg zu ermitteln, ein Traceroute auf Anwendungsebene. HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen und Entwicklungen, die in den späten neunziger Jahren waren. 9.2 HTTP-Kommunikation user@linux02:~> telnet 10.30.4.100 81 Trying 10.30.4.100... Connected to 10.30.4.100 Escape character is ’^]’. GET /hallo.html HTTP/1.1 Host 0.30.4.100:81 !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Test-Seite</title> </head> <body> <H1> Hauptüberschrift </H1> </body> </html> Connection closed by foreign host. Zwischen GET- und POST-Anfragen bestehen folgende wesentliche Unterschiede: Bei der GET-Methode werden die übergebenen Daten in die URL einkodiert und sind somit für jeden sofort lesbar, ein Beispiel sind Suchanfragen bei Google: http://www.google.de/search?q=http+get+post&start=0&start=0&ie=\ utf-8&oe=utf-8&client=firefox-a&rls=org.mozilla:de-DE:official Bei POST werden die Daten im Header übergeben. Dabei lassen sich wesentlich mehr Daten übergeben als in einer GET-Anfrage. Das Versenden der Daten an den Server geschieht für den Nutzer auf den ersten Blick scheinbar unsichtbar. Ein wesentlich größerer Unterschied ist allerdings, dass GET-Anfragen idempotent sind, was bedeutet, das sich die Seite aufgrund einer GET-Anfrage nicht ändert. Daraus ergibt sich auch, dass solche Seiten im Cache angelegt werden können. Mit POST-Seiten ist es jedoch genau andersherum, diese sind nicht idempotent und werden deshalb nicht im Cache abgelegt. 9.3. WAS IST EIN WEBSERVER? 9.3 127 Was ist ein Webserver? Ein Server ist ein Programm, das bestimmte Anfragen auf einem bestimmten Port annimmt und verarbeitet. Ein Webserver liefert Dateien aus bestimmten Verzeichnissen (mit der Angabe von welchem Type 1 diese Dateien sind) über Netzwerk aus. Unter Umständen wird bei der Entscheidung, welche Dateien ausgeliefert werden, nach der angefragten Adresse unterschieden. Grundsätzlich wird auf die Anfrage http://host.domain/directory/example.html mit der Auslieferung von “Content-Type Text-html” und dem Inhalt der Datei: /usr/local/httpd/htdocs/directory/example.html2 von dem Webserver auf host.domain reagiert. 9.4 Apache 2 Der Apache 2 ist der weltweit meist-verbreitete Webserver. Ein Kernbestandteil des Erfolges ist die Tatsache, dass Apache ein Open-Source-Projekt ist. Der Aufbau ist modular, d.h. der Webserver hat einen schlanken Kern, welcher die Grundfunktionalität enthält und Erweiterungen können zusätzlich eingebunden werden (teilweise mit und teilweise ohne Neustart des Apache). Vielfach sind noch eine ältere Version des Servers 1.3.X im Einsatz. Neu in der Version 2.0 ist z.B. dass plattformspezifischer Code (z.B. Schreib- Lesezugriffe auf die Festplatte) in eine APR (Apache Portable Runtime) ausgelagert wurde. Dies ermöglicht es, dass für jedes Betriebssystem eine eigene Version der APR geschrieben und optimiert werden kann, was der Geschwindigkeit und Stabilität zu Gute kommt. Einheiten zur Abbildung von HTTP-Anfragen auf reale Ausführungseinheiten wurden ebenso ausgelagert. (Diese nennen sich MPMs [Multi Processing Modules].) Dies macht Sinn, da dieser Vorgang ebenso vom Betriebssystem abhängt (genauso wie von der konkret betrachteten Anwendung natürlich auch). Ebenso neu eingeführt in der Version 2.0 wurden Multi-Protokoll-Unterstützung auf Transportebene und IPv6-Unterstützung. 9.4.1 Erweiterte Funktionalität Virtual Hosts (IP- oder Name-basiert) SSL, sichere Verbindungen Authentifizierung CGI (Common Gateway Interface) Ausführen von Scripten und Programmen PHP SSI (Server Side Includes) 9.5 Konfiguration In den aktuellen Versionen hat Apache nur noch die Konfigurationsdatei httpd.conf. Allerdings machen viele Distributionen von der Möglichkeit gebrauch, andere Dateien mit Include einzubinden. 1 2 zB.: Content-Type Text-html Wenn DocumentRoot auf ’/usr/local/httpd/htdocs’ gesetzt ist. Dazu später mehr. 128 KAPITEL 9. WEBSERVER Die Konfiguration besteht aus drei Abschnitten. • Section 1: Global Environment • Section 2: ’Main’ server configuration • Section 3: Virtual Hosts Das Verhalten des Servers wird innerhalb dieser Sektionen mit sogenannten Direktiven gesteuert. Diese Direktiven stehen innerhalb von Konfigurationskontexten. globaler Kontext In der Konfigurationsdatei ausserhalb von Containern Container-Kontext Innerhalb von Container-Tags (zB.: ¡Directory¿...¡/Directory¿). Der Gültigkeitsbereich ist auf die Container beschränkt. Verzeichniskontext In zusätzlichen Konfigurationsdateien innerhalb der Verzeichnisstruktur. Der Name dieser Dateien kann mit AccessFileName festgelegt werden 3 . Direktiven können in unterschiedlichem Kontext stehen, aber nicht jede Direktive kann in jedem Kontext verwendet werden. Die Apache-Dokumentation gibt für jede Direktive an, in welchem Kontext sie verwendet werden kann. Einige der wichtigsten Direktiven der Main Server Konfiguration sind: ServerType standalone — inetd ServerRoot Das Verzeichnis, das für den Webserver die unterste Verzeichnisebene darstellt. ServerName Der Name des Webservers ist die URL unter der er erreichbar ist. DocumentRoot Das Verzeichnis in dem sich die Webseiten befinden, bzw. aus dem der Webserver Dateien ausliefern darf. User / Group Benutzer- bzw. Gruppenrechte, mit denen der Webserver läuft. ServerAdmin E-Mail-Adresse des Administrators. An diese Adresse werden Servermeldungen geschickt und sie wird unter Umständen Benutzern mitgeteilt. 9.5.1 Optionen Eine wichtige Direktive ist die Options-Direktive mit der man festlegen kann, welche ServerFeatures verfügbar sind. Optionen können im Konfiguration-, Container- und VerzeichnisKontext gesetzt werden. ExecCGI : Ausführbarkeit von CGI-Programmen Includes : Ausführung von ServerSideInclude-Befehlen (SSI) Indexes : Verzeichnislisting anzeigen 9.5. KONFIGURATION 129 <Directory /home/www/> Options +Indexes -Includes </Directory> Abbildung 9.1: Options hinzugügen/entfernen Optionen können gesetzt, hinzugefügt(+) oder entfernt(-) werden. Im Beispiel 9.1 wird für das Verzeichnis /home/www/ die Option Indexes zu den allgemein gültigen Optionen hinzugefügt und die Option Includes von den allgemein gültigen Optionen entfernt (abgezogen). Im Beispiel 9.2 werden für das Verzeichnis /home/www2/ nur die Optionen Indexes und Includes gesetzt. Unabhängig von den allgemein gültigen Optionen. <Directory /home/www2/> Options Indexes Includes </Directory> Abbildung 9.2: Options setzen 9.5.2 Module Zusätzliche Funktionalitäten können in Form von Modulen hinzugefügt werden. Module können mit LoadModule cgi_module /usr/lib/apache/mod_cgi.so AddModule mod_cgi.c im Global-Kontext geladen werden. Module bringen ihre eigenen Direktiven mit, die nach dem Laden verfügbar sind. Mit der Direktive IfModule kann man Container erzeugen, deren Direktiven nur ausgeführt werden, wenn das entsprechende Modul geladen ist (siehe 9.3, S. 130). Module können auch direkt in den Apache einkompiliert werden und sind dann ohne geladen werden zu müssen verfügbar. Für Apache gibt es eine Vielzahl Module, die nicht zur Standard-Distribution gehören. Wünscht man sich eine zusätzliche Funktion für seinen Webserver, lohnt es sich im Internet nach einem Modul zu suchen, das diese Funktionalität bereitstellt. Sollte man nicht fündig werden, kann man sich dank der offenen Quelltexte daran machen, selber ein solches Modul zu schreiben. 9.5.3 User-WWW Das Userdir-Modul ermöglicht es für jeden Benutzer ein Verzeichnis einzurichten, das bei einer Anfrage der Form http://server/~username vom Webserver ausgeliefert wird. Die Direktive UserDir legt den Namen des Verzeichnisses innerhalb der Home-Verzeichnisse fest, dessen Inhalt der Webserver ausliefern darf. Innerhalb eines DirectoryContainers bezüglich /home/*/public html kann man das Verhalten des Webservers innerhalb dieses Verzeichnisses steuern. Beide Anweisungen sind unabhängig voneinander, man muss selber darauf achten, dass man das Verzeichnis konfiguriert, dass mit UserDir gesetzt ist. 3 Standard ist AccessFileName .htaccess 130 KAPITEL 9. WEBSERVER <IfModule mod_userdir.c> UserDir public_html </IfModule> <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory> Abbildung 9.3: User-Webdirectory Bei SuSE-Linux sind die Direktiven bezüglich mod userdir in die Datei /etc/httpd/suse public html.conf ausgelagert. 9.6 Webserver Erweiterungen Die Anforderungen an den Apache Webserver sind in den letzten Jahren gestiegen, so dass das eigentliche ausführbare Programm permanent erweitert werden muss. Die ApacheFoundation4 hat sich hier einer modernen Methode des Softwaredesigns bedient, bei der nicht das eigentliche Kernprogramm aufgebläht wird, sondern zusätzliche Funktionalität in externe Module ausgelagert wird. Der Kern-Server (core-server) bietet nur die notwendige Basisfunktionalität, wie die Implementierung eines TCP/IP-Servers. Alle zusätzlichen Features werden durch Module hinzugefügt. Durch diese Möglichkeit bleibt der Webserver ”schlank” und verwendet je nach Konfiguration nur die Module, welche wirklich gebraucht werden. Dieses vermeidet unnötige Sicherheitslücken. In der Apache Modul Datenbank sind momentan (November 2005) über 400 Module gelistet bei steigender Anzahl. Zur Integration von Zusatzfunktionen kann man zwischen zwei Modularten unterscheiden: • Ein statisches Modul wird zusammen mit dem Kern zu einem einheitlichen Paket kompiliert und damit fester Bestandteil des Webserver-Programms. Beim Hinzufügen oder Entfernen eines solchen Moduls kommt der Admin um eine Neukompilierung des Webservers nicht herum. Durch die feste Integration kann sich die Ausführungsgeschwindigkeit beim Starten des Apache und wärend der Laufzeit erhöhen, da keine zusätzlichen Initialisierungen für jedes Modul notwendig sind und der interne CodeOverhead sinkt. • Ein Shared-Module kann dynamisch durch eine entsprechende Direktive in der Konfigurationsdatei httpd.conf hinzugefügt oder entfernt werden. Da die Konfigurationsdateien nur bei einem Start des Apache Webserver eingelesen werden, ist hier also lediglich ein Neustart des Webservers erforderlich. Diese Methode bringt zwar Einbußen der Performance des Webservers mit sich, jedoch ist es so sehr einfach möglich ein Modul schnell und ohne zeitaufwendige Neukompilierung des Webservers hinzuzufügen. 4 Der erste Apache-Webserver entstand aus dem damals aktuellen NCSA httpd 1.3 und zusätzlichen Erweiterungen und Patches (a patchy-webserver). Im Sommer 1999 begann die Entwicklung des Apache 2, welcher komplett neu geschrieben wurde. Die Apache Gruppe entwickelt heute sehr erfolgreich Erneuerungen am Apache Webserver. 9.6. WEBSERVER ERWEITERUNGEN 9.6.1 131 Die Benutzer-Homepage - mod userdir In klassischen Multi-User-Umgebungen wie Universitäten und Schulen haben Benutzer mit Linux-Account üblicherweise auch die Möglichkeit eine eigene Homepage in ihrem HomeVerzeichnis anzulegen. Das Modul kümmert sich darum, dass der Webserver mit geeigneten Rechten auf ein Unterverzeichnis im User-Home, welches sonst ja vor unauthorisiertem Zugriff geschützt sein sollte, hineinschauen darf. Das Modul muss lediglich einmal konfiguriert werden. Anschliessend sind sämtliche Homepage-Verzeichnisse über den Webserver von außen erreichbar. Klassischer Weise erreicht man die Seiten der einzelnen Benutzer unter der URL http://www.mywebserver.site/ username. Das hierfür bestimmte Verzeichnis im jeweiligen Home-Verzeichnis des Benutzers lässt sich in der Konfigurationsdatei mit der Direktive UserDir Unterverzeichnisname definieren. In den meisten Fällen heisst dieses Verzeichnis public html 9.6.2 URL-Umschreiber mod rewrite Dieses Modul erlaubt Manipulationen der URL, durch sogenannte Regular Expressions, wie man sie auch von anderen Linux-Tools, wie sed oder grep kennt. Hierdurch kann der Webadmin ”unschöne” URLs verändern, um sie zum Beispiel für Suchmaschinen freundlicher zu gestalten. Viele der Suchmaschinen können zwar dynamische Webinhalte indizieren, jedoch wird eine Internetseite sichtlich besser indiziert, wenn diese statisch ist. Deshalb wird recht häufig mod rewrite eingesetzt, um den Suchmaschinen Spidern eine dynamische Seite als statisch unterzuschieben. Dynamische Seiten sind oft durch URLs mit Parametern charakterisiert: http://www.ks. uni-freiburg.de/php veranstaltungsdetail.php?id=7. Mittels mod rewrite kann man die URL so umschreiben, so dass die Seite auch Intern wandelt das Modul die URL wieder um, so dass die dynamische Seite mit sämtlichen Parametern aufgerufen wird. Dieses lässt sich durch eine einfache Direktive in der Apache Konfigurationsdatei httpd.conf umsetzen, wie die Abbildung von ”praxis-seminar.html” auf ”php veranstaltungsdetail.php?id=7”. RewriteEngine On RewriteRule ^(praxis-seminar7[0-9]+).html$ php_veranstaltungsdetail.php?id=$1 Die erste Zeile schaltet das Modul durch die Direktive ”RewriteEngine On” ein. In der zweiten Zeile folgt dann die Regel für die Umschreibung. Der erste Parameter bildet das Suchmuster und der zweite Parameter das Ersetzungsmuster. Das Suchmuster lässt soch mittels regulärer Ausdrücke formulieren. Beim Ersetzungsmuster kann es sich um einfachen Text, aber auch Variablen des regulären Ausdrucks enthalten. Im gezeigten Beispiel steht $1 für das erste Klammerpaar im Suchmuster. 9.6.3 Zugriffskontrollen Die Module mod auth basic und mod auth digest erlauben die Einrichtung einer einfache Zugriffskontrolle über das HTTP Protokoll. Erfolgt ein Zugriff auf eine zugriffsbeschränkte Resource, dann schickt der Server den Status 401 und verlangt eine Authentifizierung des Benutzers durch Eingabe eines Benutzernamens und Passworts. Die Eingabe gleicht der Server mit den Einträgen der Passwort- und Gruppendatei ab. Besitzt der Benutzer die nötigen Rechte, gewährt der Webserver dem Benutzer den Zugriff. Um ein Verzeichnis auf dem Webserver vor unauthorisiertem Zugriff zu schützen, gibt es zwei Möglichkeiten: Zentral in der httpd.conf oder mit Hilfe von .htaccess-Dateien in den zu schützenden Verzeichnissen. Für den zentralen Ansatz muss der Webadmin in der httpd.conf die nachfolgenden Zeilen hinzufügen. 132 KAPITEL 9. WEBSERVER <Directory "/srv/www/htdocs/secure"> AuthType Digest AuthName "privat" AuthDigestFile /srv/www/.htpasswd Require valid-user </Directory> Dabei handelt es sich bei /srv/www/htdocs/secure das zu schützende Verzeichnis, das mit der Digest-Methode abgesichert wird. Für einen Passwortschutz mittels .htaccess-Datei(en) sind die folgenden Schritte zu unternehmen. Man erstellt die Datei im Verzeichnis mit dem entsprechenden Inhalt. <Directory> AuthType Digest AuthName "Mit MD5/Digest gesicherter Bereich" AuthDigestFile /srv/www/.htpasswd Require valid-user Require Group webadmins </Directory> Mit der Direktive AuthType wird die Authentifizierungsmethode festgelegt, wobei der Webadmin zwischen Basic und Digest wählen kann. Der Unterschied zwischen beiden Module liegt in der Art der Datenübertragung. Während die Basic Authentifizierung (mod auth basic) die Daten im Klartext überträgt und damit ein recht hohes Risiko eingeht, verschlüsselt das Modul mod auth digest die Daten vor der Übertragung mittels MD5. Da jedoch das Chiffrat abgefangen und mittels Bruteforce-Attacke interpretiert werden kann, empfiehlt sich bei sensiblen Bereichen die Übertragung zusätzlich mit Hilfe von SSL zu sichern. <Directory> AuthType Basic AuthName "Mit BasicAuth nicht wirklich gesicherter Bereich" AuthUserFile /srv/www/.htpasswd Require valid-user </Directory> AuthName definiert den Namen des geschützten Bereichs. Der hier definierte String wird dem Benutzer bei der Passwort-Abfrage präsentiert. Mit den Direktiven AuthUserFile und AuthGroupFile, beziehungsweise im Fall der Digest Authentifizierung AuthDigestFile und AuthDigestGroupFile wird der Pfad zu der Passwort- und Gruppendatei definiert. Die letzte Zeile des Beispiels legt zusätzlich fest, welche Benutzer berechtigt sind in das Verzeichnis zu wechseln. Hierzu verwendet man die Direktive Require, welche wie bei der Basic Authentifizierung einen gültigen Benutzer verlangt. # .htpasswd user01:secure_section01:fnxpraouunko3Ocasde1cdf0l1ases1a user02:secure_section01:basd2w49eq0eab5wehz1sdf2r44f24cd user03:secure_section02:lse35aa81ca43dc8dsecdbe83382121f Die in den Beispielen genannten Passwort- und Gruppendateien sind Textformate, die sich mit einem ganz normalen Editor bearbeiten lassen. Die Passworte muss man dabei nicht selbst erstellen, dieses regelt das Programm mit dem Namen htpasswd2 für die Basic Authentifizierung und htdigest2 für die Digest Authetifizierung. Durch den Aufruf htpasswd2 -c datei username oder entsprechend htdigest2 -c datei bereich username wird man zur Eingabe des Passwortes aufgefordert und anschliessend die Datei erzeugt. Das Hinzufügen von Benutzern in bestehende Dateien geschieht durch das Weglassen des Parameters ”-c”. # .htgroup webadmins:user01 user02 normal_user:user03 9.6. WEBSERVER ERWEITERUNGEN 133 Bei sehr vielen Benutzern wird es wie bei der normalen Linux-User-Administration auch, irgendwann aufwändig die Informationen in einzelnen Dateien zu verwalten. Als Alternative bietet sich LDAP an.5 Eine Basic Authentication kann auch gegen eine LDAP-Quelle laufen, die .htaccess zeigt die entsprechenden Einträge: AuthType Basic AuthName "Gegen LDAP authentifizierter Bereich" LDAP_Server localhost LDAP_Port 389 Base_DN "ou=user,dc=mydomain,dc=site" Require valid-user 9.6.4 Kompression Das Modul mod deflate wurde mit der Apache Version 2 eingeführt und erlaubt die Kompression von Webinhalten durch Angabe eines Filters. Das Modul kann ausgehende, sowie auch eingehende Daten komprimieren. Der Datenverkehr wird hierzu über diesen Filter umgeleitet. Um dieses Modul zu aktivieren, trägt ein Admin die folgende Direktiven in der Apache-Konfigurationsdatei ein: SetOutputFilter DEFLATE <Directory "/srv/www/htdocs" AddOutputFilterByType DEFLATE Text/html </Directory> 9.6.5 Das Web-DAV Modul Das Modul mod dav ermöglicht es dem Apache Webserver ein Verzeichnis nach dem DAVStandard6 bereit zu stellen. Dieses ermöglicht DAV-Clients, wie Subversion7 Adobe Golive, Macromedia Dreamweaver oder dem Windows Explorer, auf das Verzeichnis zuzugreifen, als wären die Dateien auf der Festplatte der lokalen Maschine abgelegt. WebDAV ist eine Erweiterung des HTTP/1.1 Protokolls, welche bestehende Beschränkungen aufhebt. Mit dem HTTP Protokoll ist es theoretisch möglich mit einem HTTP-PUT einzelne Dateien hochzuladen. Diese Möglichkeit wird jedoch von den meisten Webservern mit der Fehlermeldung 405 quittiert. Durch die Erweiterung des Protokolls mit WebDAV ist es möglich ganze Verzeichnisse hochzuladen und dies gleichzeitig an eine Revisionskontrolle zu koppeln. Das WebDAV Protokoll setzt also auf das HTTP/1.1 Protokoll auf, übernimmt dessen Methoden für die Kommunikation und erweitert diese um seine eigenen Methoden: • COPY - kopiert Collections (Web DAV für Verzeichnis) und Ressourcen innerhalb eines zusammenhängenden Namensraumes. • LOCK - setzt eine Sperre auf eine Ressource oder Collection um einen Überschreibschutz zu implementieren. • MKCOL - erzeugt eine Collection. • MOVE - verschiebt eine Collection oder Ressource innerhalb eines zusammenhängenden Namensraumes. • PROPFIND - ermöglicht es Metadaten, Eigenschaften einer Ressource zu lesen. 5 siehe hierzu ... Web-based Distributed Authoring and Versioning 7 Siehe hierzu den Abschnitt Softwareentwicklung 6 134 KAPITEL 9. WEBSERVER • PROPPATCH - kann diese Metadaten ändern und löschen. • UNLOCK - entfernt diesen Überschreibschutz wieder Nachfolgend sei ein einfaches Beispiel für WebDAV Freigabe demonstriert: DAVLockDB /usr/local/apache2/webdav <Location /srv/htdocs/> Dav On ForceType text/plain </Location> Mit der ersten Direktive legt man den Pfad zu der Lock-Datenbank fest. In dieser Datei wird abgespeichert, welche der vorhandenen Ressourcen gerade gesperrt sind. Dann folgt ein Location-Container mit dem wir das Verzeichnis definieren, für welches man individuelle Einstellungen vornehmen möchte. Mit der Direktive Dav On, wird die WebDAV Funktionalität für das Verzeichnis eingeschaltet. Beim Einsatz von WebDAV sollte der Admin unbedingt auf die notwendigen Sicherheitsvorkehrungen achten. Hierzu gehört mindestens ein Verzeichnisschutz. Am besten eignet sich jedoch die Verwendung eines virtuellen Host in Verbindung mit SSL-Absicherung und einer mod auth digest Authentifizierung. 9.6.6 Vrituelle Webserver Wenn man sich überlegt, wieviele Domains Webseiten bereitstellen, wird schnell klar, dass nicht für jede dieser Domain ein Webserver läuft. Oder womöglich für jede ein Rechner. Auch würde es für die wenigsten Privatpersonen Sinn machen, auf ihrem Computer zu hause einen öffentlichen Webserver zu betreiben, denn der sollte rund um die Uhr verfügbar sein. Da erscheint es auf Anhieb sinnvoll mehrere Domains über einen Webserver zu betreiben. Für Betreiber eines Webservers, also beispielsweise diverse große Webhoster, wäre es ziemlich aufwändig für jede Domain eine eigene Instanz des Webservers auf unterschiedlichen Ports einer Maschine oder auf verschiedenen IP’s laufen zu lassen. Deshalb unterstützt Apache schon seit der Vorgängerversion virtuelle Server. Bei namensbasierten virtuellen Servern verwaltet der Apache mehrere Domains, welche alle die gleiche IP-Adresse besitzen. Eingehende Anfragen können nur deshalb an die richtige Domain weitergeleitet werden, weil der Domainname in der GET-Anfrage enthalten ist. Um den Apache für virtuelle Server zu konfigurieren, muss die httpd.conf oder die entsprechende Include-Datei8 geändert werden. NameVirtualHost Schaltet Name Virtual Host ein und gibt an, auf welcher IP-Adresse auf entsprechende Anfragen reagiert werden soll. Gibt man anstatt einer IP ein ’*’ an, wird auf jeder an den Rechner gebundenen IP-Adresse Name Virtual Host eingeschaltet. ServerName Legt die URL fest, auf die sich der VirtualHost-Container bezieht. ServerAlias Alternative URL’s, auf die sich der VirtualHost-Container bezieht. DocumentRoot Das Verzeichnis in dem sich die Dokumente befinden, die von diesem VirtualHost ausgeliefert werden dürfen. 8 Das hängt von der Konfiguration ab, die die jeweilige Distribution für den Apachen vorsieht. Anstatt diese Konfigurationen fest in die httpd.conf zu schreiben, ist es häufig so angelegt, dass virtuelle Server dynamisch generiert werden können, ohne den Apache jedes Mal neu starten zu müssen. SuSE verwendet beispielsweise ein eigenes Unterverzeichnis /etc/apache2/vhosts.d 9.7. SSL (SECURE SOCKET LAYER) 135 NameVirtualHost *:80 <VirtualHost *:80> ServerName www.my-domain.site ServerAlias my-domain.site *.my-domain.site DocumentRoot /srv/www/my-content </VirtualHost> <VirtualHost *:80> ServerName www.otherdomain.site DocumentRoot /srv/www/othercontent </VirtualHost> Diese Konfiguration besagt, dass die virtuellen Server auf Port 80, egal auf welche IP, angesprochen werden. Es werden jeweils gültige Domainnamen definiert, sowie Stammverzeichnisse festgelegt. Alternativ wird bei einem IP-basierten virtuellen Webserver jeder Domain, die der Server bedienen soll eine eigene IP zugeordnet. Da IP-Adressen jedoch meistens knapp sind, wird dieses oft nur für SSL-gesichterte Sites eingesetzt. Möchte ein Client auf eine Domain zugreifen, dann muss er beim zuständigen DNSServer nach der IP Adresse des Domainnamens fragen und kann den Webserver dann über diese IP Adresse ansprechen. Um diese Art virtuelle Webserver einzurichten, muss ein Webserver-Admin in der Konfigurationsdatei httpd.conf, oder je nach Distribution in der passenden Include-Datei, einen VirtualHost Container anlegen: <VirtualHost 192.168.45.32> ServerName www.my-first-domain.site DocumentRoot /srv/www/my-first-domain/htdocs </VirtualHost> <VirtualHost 192.168.56.23> ServerName www.my-second-domain.site DocumentRoot /srv/www/my-second-domain/htdocs </VirtualHost> Im obigen Beispiel wurden zwei VirtualHost Container angelegt, welche als Attribut die IP-Adresse mit führen. Bei einem IP basierten virtuellen Webserver müssen diese natürlich verschieden sein. Mit der Direktive ServerName wird DomainNamen konfiguriert, also unter welchem DNS-Namen der Server erreichbar sein soll. Die Direktive DocumentRoot legt die Dokumentenwurzel des virtuellen Webservers fest. Sie ist der Pfad zu dem Verzeichnis in dem die entsprechenden Webseiten lagern. 9.7 SSL (Secure Socket Layer) Daten werden über das HTTP Protokoll standardmäßig im Klartext übertragen und stellen gerade in Bezug mit vertraulichen Daten ein Sicherheitsrisiko dar. Gerade in Bereichen mit persönlichen oder wirtschaftlich relevanten Daten sollten gesicherte Verbindung zum Einsatz kommen. SSL ist eine Technik um Verbindungen zu verschlüsseln. Diese Verschlüsselung setzt oberhalb von TCP an und kann deshalb auch für andere TCP-basierte Dienste eingesetzt werden. Für die verschlüsselte Übertragung sensibler Daten von oder zu einer Webseite ist das HTTPS (HyperText Transfer Protokol Secure) definiert. Bei einer Anfrage, die mit https:// beginnt, wird eine sichere, d.h. verschlüsselte, Verbindung vom Client zum Webserver aufgebaut. Die HTTPS-Anfragen nimmt der Webserver, wenn nichts anderes eingestellt ist, auf Port 443 entgegen. 136 KAPITEL 9. WEBSERVER 9.7.1 Funktionsweise Für eine verschlüsselte Verbindung muss zumindest ein Kommunikationsschlüssel ausgetauscht werden, mit dem beide Seiten dann arbeiten. Zur Kommunikation wird aus Performanzgründen ein symetrisches Verschlüsselungsverfahren eingesetzt. Der Kommunikationsschlüssel wird über ein Public-Key-Verfahren ausgetauscht. Dazu benötigt mindestens der Webserver einen öffentlichen und einen privaten Schlüssel. Bei einem Verbindungsaufbau, schickt der Webserver ein x509-Certificate, das seinen öffentlichen Schlüssel und seinen Namen beinhaltet, an den Client. Anhand dieses Certificates kann der Client einen Webserver, dem er einmal vertraut hat, wiedererkennen und mit Hilfe des öffentlichen Schlüssels einen Vorschlag für einen Kommunikationsschlüssel machen. Ist das Certificate von einer Instanz signiert, der der Client vertraut, kann er auch einem Webserver vertrauen, den er noch nicht kennt.9 Abbildung ?? zeigt, wie dem Webserver sein Certificate übergeben wird. Dabei müssen das zu verschickende Certificate mit dem öffentlichen Schlüssel und (! in einer anderen Datei) der private Schlüssel angegeben werden. SSLCertificateFile SSLCertificateKeyFile 9.7.2 /etc/httpd/ssl.crt/server.crt /etc/httpd/ssl.key/server.key Zertifikate Zertifikate10 sind signierte Informationen über eine Instanz. Ein Certificate enhält mindestens einen eindeutigen Namen und den öffentlichen Schlüssel der Instanz. Damit eine andere Instanz das Certificate anerkennen kann, muss es von einer dritten Instanz, der beide Vertrauen, unterzeichnet sein. Das gilt als Beglaubigung, dass das Certificate “echt” ist. Eine solche vertrauensvolle Instanz nennt man Certificate Authorisation (CA). Der Name der Instanz wird in dem Certificate in der von LDAP bekannten Objektorientierten schreibweise angegeben (zB.: ”C=de, O=uni-math, CN=www.uni-math.gwdg.de”). Dabei ist es für das Certificate eines Webservers wichtig, dass der Eintrag CN (CommonName) die URL des Webservers beinhaltet. Mit dem Paket openssl kommt das Perl-Skript CA.pl, das bei der Erzeugung und Verwaltung von Certificaten hilft. /usr/share/ssl/misc/CA.pl -newcert|-newreq|-newca|-sign|-verify CA.pl benutzt openssl zur Bearbeitung von Certificaten. Eine ausgiebige Lektüre der Manpage von openssl kann dieses Skript überflüssig machen und versetzt in die Lage, Certificate feiner zu beeinflussen. Eine umfangreiche und gute Beschreibung des Umganges mit Certificaten findet man unter http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/. 9.7.3 Zertifikate erzeugen Folgende Schritte führen zu einem Server-Certificate in der Datei newreq.pem und dem entschprechenden privaten Schlüssel in wwwkeyunsecure.pem. CA.pl -newcert Certification Authority und ca-Certificat erstellen 9 10 So ist das Prinzip, in Wirklichkeit ist das Ganze ein bischen komplizierter. engl. certificates 9.8. CGI (-MODUL) 137 CA.pl -newreq Certificate-Request. Erzeugt ein neues Certificate. Für ein WebserverCertificate ist darauf zu achten, als CN den Namen der Webseite anzugeben. CA.pl -sign das neue Certificat mit dem ca-Certificat signieren openssl rsa -in newreq.pem -out wwwkeyunsecure.pem Passphrase aus dem Certificat entfernen und den Privat-Key in eine eigene Datei auslagern Es ist zu empfehlen, für die ersten Versuche ein Verzeichnis anzulegen, in das man CA.pl kopiert und dort die entsprechenden Befehle aufruft. 9.7.4 Integration Hat man den Schlüssel erfolgreich erstellt, kann man in der Konfigurationsdatei httpd.conf oder je nach Distribution der passenden Include-Daten das Modul für ein Verzeichnis aktivieren. Dieses geschieht in der Regel mit einem IP-basierten11 virtuellen Host: Listen 443 <VirtualHost *:443> DocumentRoot /srv/www/htdocs/ssl-gesichert ServerName 192.168.2.1:443 SSLEngine on SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key </VirtualHost> Durch die Listen-Direktive in der ersten Zeile sagt ein Admin dem Apache Webservern, dass er auf dem Port 443 antworten soll. Dann wird in einem VirtualHost-Container eingerichtet. In diesem schaltet die Direktive ”SSLEngine on” die SSLUnterstützung für diesen virtuellen Server an. Mit den beiden Direktiven SSLCertificateFile und SSLCertificateKeyFile gibt man den Pfad zu dem SSL-Zertifikat und SSL-Schlüssel an. Die Pfade in denen sich diese beiden Dateien befinden sollten natürlich ausreichend geschützt sein, damit ein potenzieller Angreifer keine Möglichkeit hat an den SSL-Schlüssel zu gelangen - ansonsten wäre diese Verschlüsselung wertlos. 9.8 CGI (-Modul) CGI (Common Gateway Interface) definiert eine Schnittstelle, die die Kommunikation zwischen Webservern und Programmen erleichtert. HTML-Dokumente können Variablen mittels Form-Tags über CGI an Programme übergeben. Diese sogenannten CGI-Progamme generieren oft wieder ganze Webseiten. So kann man ganze Internetauftritte über CGIProgramme steuern. Für die Variablenübergabe gibt es zwei Methoden. GET-Methode Die Variablen werden als Teil der URL übergeben. Man hat die Möglichkeit, einen Aufruf mit den Variablendefinitionen selbst zu formulieren, zB. direkt in die Adresszeile des Browsers einzugeben. Dabei werden die Variablen mit Wertzuweisung nach einem ’ ?’ an die URL angehängt. Mehrere Variablen-Wert-Paare werden dabei durch ein ’&’ getrennt. 11 Mit der namensbasierten Variante stößt man hier an die Grenzen, denn bevor der Browser in dem HTTP-Header den Domainnamen sendet, erfolgt das SSL Handshake. Zu diesem Zeitpunkt ist jedoch nur die IP Adresse und die Portnummer bekannt, welche bei den namensbasierten virtuellen Webservern zu mehreren Domains führen kann. 138 KAPITEL 9. WEBSERVER POST-Methode Die Variablen werden im Request-Header übergeben, sind also für den Benutzer nicht sichtbar. Das macht es für dritte zumindest schwerer, etwas über das Programm oder die Übertragenen Variablen heraus zu finden. http://www.example.com/cgi-bin/script.cgi?var1=value1&var2=value2 Abbildung 9.4: Variablenübergabe per GET-Methode Grundsätzlich kann jede Art von Programm oder Skript vom Webserver Apache ausgeführt werden. Es ist dem Webserver aber nicht erlaubt, beliebige Programme auszuführen. Man muss für Verzeichnisse in denen CGI-Programme ausgeführt werden sollen, die Option ExecCGI setzen12 und eine (oder mehrere) Dateiendungen definieren. Nur Dateien, die die eingetragene Endung haben und sich in einem Verzeichnis befinden, für das ExecCGI gesetzt ist, werden vom Webserver als CGI-Script aufgerufen. Aus Sicherheitsgründen sollte man die Ausführung von Programmen nur ausserhalb von DocumentRoot erlauben. Oft wird die Ausführung nur für ein cgi-bin genanntes Verzeichnis erlaubt, das sich ausserhalb von DocumentRoot befindet. In Abbildung 9.5 wird erst ein Alias auf das cgi-bin Verzeichnis gesetzt. Mit AddHandler wird definiert, dass Dateien mit der Endung .cgi als cgi-script interpretiert werden. Innerhalb eines Directory-Containers bezüglich /usr/local/httpd/cgi-bin/ wird die Option ExecCGI zu den geltenden Optionen hinzugefügt. ScriptAlias /cgi-bin/ AddHandler cgi-script .cgi <Directory /usr/local/httpd/cgi-bin/> Options +ExecCGI </Directory> /usr/local/httpd/cgi-bin/ Abbildung 9.5: mod cgi 9.9 PHP Bei den statischen Webinhalten sind die HTML-Seiten, welche der Webserver ausliefern soll, üblicherweise als Datei abgelegt. Der Webserver liefert einfach die komplette Datei aus, wenn ein Client die entsprechende Resource anfragt. Bei den dynamischen Webinhalten dagegen wird die HTML-Ausgabe erst mit Hilfe einer Skriptsprache zur Laufzeit erzeugt. Hier gibt es wieder zwei unterschiedliche Techniken, die Clientseitigen und die Serverseitigen. Die clientseitigen Skriptsprachen werden auf dem Clients selbst ausgeführt. Hierzu zählt zum Beispiel die Eingabe von Formularfeldern. Die HTML Seite, welche vom Webserver ausgeliefert wird, enthält den Quelltext der jeweiligen Skriptsprache, der dann vom Client geparst und ausgeführt wird. Das bekannteste und eines der ältesten Beispiele einer clientseitigen Skriptsprache ist Javascript. Die Auswahl wuchs im Laufe der Zeit, so dass Flash, Java oder ActiveX inzwischen von vielen Browsern oder ihren Erweiterungen unterstützt werden. Damit der Client den Quelltext ausführen kann, ist natürlich die Unterstützung 12 siehe Kapitel 9.5.1 9.9. PHP 139 der Skriptsprache erforderlich. Dies geschieht mit Hilfe von Plugins, die der Benutzer im Client installieren muss. Hier fangen dann oft die Probleme an: • Die Performance ist da ein entscheidender Faktor. Bei den clientseitigen Skriptsprachen muss der Client selbst die Rechenleistung, welche für die Ausführung des Codes notwendig ist, bereitstellen. • Unter Sicherheitsaspekten schneiden clientseitige Implementierungen oft schlecht ab, da ein Skript auf dem Client-Rechner oft beliebigen Code ausführen kann und damit auch Manipulationen am System selbst vornehmen könnte. • Die Browserunterstützung zählt zu den weiteren Problemen, mit welchem sich die clientseitigen Skriptsprachen befassen müssen. Denn nicht für jeden Web-Browser existiert ein passendes Plugin. • Der Netzwerktraffic schafft oft ein weiteres Problem. Man stelle sich vor, dass man ein clientseitiges Flash-Skript, welches mehrere Megabyte groß ist, hat. Auch wenn man nur einen kleinen Teil des Flashskriptes benötigt, muss man das komplette Skript vor der Ausführung herunterladen, was einen u.U. unverhältnismässig hohen Netzwerktraffic mit sich bringt, der gerade für kleine mobile Endgeräte problematisch sein kann. Diese Art der Probleme tritt nicht auf, wenn man auf serverseitige Skriptsprachen setzt. Diese verändern oder generieren die HTML-Seite noch vor der Auslieferung an den Client. Wird also eine Anfrage an einen Webserver gestellt, dann wird der Quelltext des Skripts noch auf dem Webserver geparst und ausgeführt. Die serverseitigen Skriptsprachen können wiederum ihre Daten aus Datenbanken beziehen, wie das oft bei den Content Management Systemen (CMS) der Fall ist. Ist das komplette Skript abgearbeitet, dann wird die erzeugte HTML-Seite an den Client ausgeliefert. Hier wird natürlich die Unterstützung der Skriptsprache durch den Webserver vorausgesetzt. Das bedeutet, dass nur Netztraffic in Höhe der generierten Seite anfällt und sich die Sicherheitsrisikten für die Endanwender in Grenzen halten. Sie bekommen ja statisches HTML zu sehen. Diese Erweiterungen werden üblicherweise durch Module integriert. Bekanntestes Beispiel dürfte bei den serverseitigen Skriptsprachen PHP mit deinem Apache Modul mod php4 sein. Weitere gängige serverseitige Programmiersprachen stehen mit ASP und JSP zur Verfügung. Auch bei serverseitigen Skriptsprachen sollten einige Aspekte beim Einsatz beachtet werden. Das permanente Generieren von Seiten ”on-demand” kann die komplette Rechenleistung auf dem Webserver beanspruchen, was je nach Zugriffscharakteristik zu Einbußen in der Performance führen kann. 9.9.1 Das Apache-PHP-Modul Das Modul mod php bietet die Möglichkeit, PHP-Code innerhalb von HTML-Seiten auszuführen. Für Dateien, die vom PHP-Interpreter geparst werden sollen, muss eine Endung definiert werden (Abbildung 9.6). Der PHP-Interpreter gibt den eingelesen HTML-Code unverändert an den Client weiter. PHP-Code wird interpretiert und das Ergebnis direkt an den Client weiter gegeben. Für den Client sieht das so aus, als würde er eine reine HTML-Seite erhalten. 140 KAPITEL 9. WEBSERVER <IfModule mod_php4.c> AddType AddType AddType </IfModule> application/x-httpd-php application/x-httpd-php application/x-httpd-php-source .php .php4 .phps Abbildung 9.6: mod php <html> <body> <?php print ’’<h1>’’.$titel.’’ ’’.$number.’’</h1>’’; ?> .. . Abbildung 9.7: PHP-Code 9.10 SSI (Server Side Includes) Apache stellt mit SSI eine Möglichkeit zur Verfügung, Internetseiten mit dynamischen Inhalten zu versehen. Um SSI verfügbar zu machen, muss zumindest für einen Teil der Dateihierachie innerhalb von DocumentRoot die Option Include (siehe Kapitel 9.5.1) gesetzt sein. Ausserdem muss ein Dateityp an die Funktionalität gebunden werden (Abbildung 9.8). <Directory /home/www/ssi_here/> AddHandler server-parsed AddType text/shtml Options +Include </Directory> .shtml .shtml Abbildung 9.8: mod ssi SSI-Befehle werden innerhalb des HTML-Codes mit <!--# eingeleitet und mit --> abgeschlossen. SSI-Dateien werden vom Server geparst und die SSI-Befehle entsprechend interpretiert. Das Ergebniss der Interpretation wird an der Stelle des Befehls in die HTML-Seite eingesetzt. SSI definiert eine Vielzahl von Umgebungsvariablen, bietet die Möglichkeit Systemprogramme auszuführen und beinhaltet Befehle zur Flusskontrolle (Abbildung 9.9). Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur eine Teilmenge der TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache des modernen WWW. Der für den Anwender sichtbare Vorgang des Abrufs eines Dokuments besteht in der Regel aus der Eingabe einer URI oder dem Anklicken eines Links, gefolgt von der Darstellung der Daten oder einer Fehlermeldung. Diese einfache Art und Weise der Benutzung hat viel zur breiten Akzeptanz des Internets beigetragen. 9.11. ÜBERBLICK 141 <html> <!--#echo "$DOCUMENT_NAME last modified: $LAST_MODIFIED" --> ... <!--#exec cmd="ls -la" --> ... </html> Abbildung 9.9: SSI-Code 9.11 Überblick Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll der Applikationsschicht HTTP spielen einige Bezeichnungen eine Rolle: • Ressource - ist die Quelle eines Webinhalts, der durch eine URI identifiziert werden kann. Der einfachste Typ der Ressource ist eine statische Datei im Filesystem des Web-Servers. Typ und Inhalt der Datei sind beliebig. Außerdem kann die Ressource auch ein Programm sein, welches bei Aufruf einen bestimmten Inhalt generiert und ausliefert. • URI - Uniform Resource Identifier bezeichnet den weltweit eindeutigen Name für eine Ressource. z.B http://www.goe.net/index.php) • URL - Uniform Resource Locator ist eine Unterart von URI, lokaler Name für die Ressource, sie bleiben anhand ihres Pfades voneinander unterscheidbar. • URN - Uniform Ressource Name, ein spezialer Typ von URI, auch weltweiter eindeutig. z.B. urn:isbn:0-596-00962-3 Die Enwicklung des WWW begann mit HTTP/0.9, einer Prototyp-Version, die von Tim Berners-Lee am CERN in den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard wurde. Es kamen Versionsnummern, HTTP-Header, zusätzliche Methoden (Head, Post, DELETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten hinzu. Das Nachrichtenformat von Antworten und Anfragen wird genauer spezifiziert. HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich jedoch nur um eine rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen wird und der Server sich dem Client gegenüber nicht authentifizieren kann. Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich auf die Korrektur der Designfehler, das Spezifizieren von Semantik, einigen PerformaceOptimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Antworten pro TCP-Verbindung gesendet werden. Für ein HTML-Dokument mit eingebetteten Bildern wird so nur eine TCP-Verbindung benötigt, wo vorher für jede Resource eine separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads fortgesetzt werden. Über Cookies in den Header-Informationen können Anwendungen realisiert werden, die Statusinformationen (Benutzereinträge, ...) zuordnen können. Dadurch können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfordern, realisiert werden. Auch eine Benutzerauthentifizierung ist möglich. Die Methoden sind auch weiter entwickelt. HTTP/1.1 bietet eine TRACE-Methode, mit der man den Weg zum Webserver überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver 142 KAPITEL 9. WEBSERVER über die verschiedenen Proxies hinweg zu ermitteln, ein Traceroute auf Anwendungsebene. HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen und Entwicklungen, die in den späten neunziger Jahren waren. 9.12 HTTP-Kommunikation Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur eine Teilmenge der TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache des modernen WWW. Der für den Anwender sichtbare Vorgang des Abrufs eines Dokuments besteht in der Regel aus der Eingabe einer URI oder dem Anklicken eines Links, gefolgt von der Darstellung der Daten oder einer Fehlermeldung. Diese einfache Art und Weise der Benutzung hat viel zur breiten Akzeptanz des Internets beigetragen. 9.13 Überblick Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll der Applikationsschicht HTTP spielen einige Bezeichnungen eine Rolle: • Ressource - ist die Quelle eines Webinhalts, der durch eine URI identifiziert werden kann. Der einfachste Typ der Ressource ist eine statische Datei im Filesystem des Web-Servers. Typ und Inhalt der Datei sind beliebig. Außerdem kann die Ressource auch ein Programm sein, welches bei Aufruf einen bestimmten Inhalt generiert und ausliefert. • URI - Uniform Resource Identifier bezeichnet den weltweit eindeutigen Name für eine Ressource. z.B http://www.goe.net/index.php) • URL - Uniform Resource Locator ist eine Unterart von URI, lokaler Name für die Ressource, sie bleiben anhand ihres Pfades voneinander unterscheidbar. • URN - Uniform Ressource Name, ein spezialer Typ von URI, auch weltweiter eindeutig. z.B. urn:isbn:0-596-00962-3 Die Enwicklung des WWW begann mit HTTP/0.9, einer Prototyp-Version, die von Tim Berners-Lee am CERN in den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard wurde. Es kamen Versionsnummern, HTTP-Header, zusätzliche Methoden (Head, Post, DELETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten hinzu. Das Nachrichtenformat von Antworten und Anfragen wird genauer spezifiziert. HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich jedoch nur um eine rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen wird und der Server sich dem Client gegenüber nicht authentifizieren kann. Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich auf die Korrektur der Designfehler, das Spezifizieren von Semantik, einigen PerformaceOptimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Antworten pro TCP-Verbindung gesendet werden. Für ein HTML-Dokument mit eingebetteten Bildern wird so nur eine TCP-Verbindung benötigt, wo vorher für jede Resource eine separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads fortgesetzt werden. Über Cookies in den Header-Informationen können Anwendungen realisiert werden, die Statusinformationen (Benutzereinträge, ...) zuordnen können. Dadurch 9.14. HTTP-KOMMUNIKATION 143 können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfordern, realisiert werden. Auch eine Benutzerauthentifizierung ist möglich. Die Methoden sind auch weiter entwickelt. HTTP/1.1 bietet eine TRACE-Methode, mit der man den Weg zum Webserver überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver über die verschiedenen Proxies hinweg zu ermitteln, ein Traceroute auf Anwendungsebene. HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen und Entwicklungen, die in den späten neunziger Jahren waren. 9.14 HTTP-Kommunikation Viele Internet-Benutzer sehen dieses nur als WWW. Jedoch ist es nur eine Teilmenge der TCP/IP-Suite. Das Protokoll des World Wide Web heisst HTTP. Es ist die Standardsprache des modernen WWW. Der für den Anwender sichtbare Vorgang des Abrufs eines Dokuments besteht in der Regel aus der Eingabe einer URI oder dem Anklicken eines Links, gefolgt von der Darstellung der Daten oder einer Fehlermeldung. Diese einfache Art und Weise der Benutzung hat viel zur breiten Akzeptanz des Internets beigetragen. 9.15 Überblick Im Zusammenhang mit WWW und dem dafür hauptsächlich zuständigen Protokoll der Applikationsschicht HTTP spielen einige Bezeichnungen eine Rolle: • Ressource - ist die Quelle eines Webinhalts, der durch eine URI identifiziert werden kann. Der einfachste Typ der Ressource ist eine statische Datei im Filesystem des Web-Servers. Typ und Inhalt der Datei sind beliebig. Außerdem kann die Ressource auch ein Programm sein, welches bei Aufruf einen bestimmten Inhalt generiert und ausliefert. • URI - Uniform Resource Identifier bezeichnet den weltweit eindeutigen Name für eine Ressource. z.B http://www.goe.net/index.php) • URL - Uniform Resource Locator ist eine Unterart von URI, lokaler Name für die Ressource, sie bleiben anhand ihres Pfades voneinander unterscheidbar. • URN - Uniform Ressource Name, ein spezialer Typ von URI, auch weltweiter eindeutig. z.B. urn:isbn:0-596-00962-3 Die Enwicklung des WWW begann mit HTTP/0.9, einer Prototyp-Version, die von Tim Berners-Lee am CERN in den Jahren 1990/1991 entwickelt wurde. HTTP /0.9 kennt lediglich die GET-Methode. HTTP/1.0 war die erste Version, die weit entwickelt zum Standard wurde. Es kamen Versionsnummern, HTTP-Header, zusätzliche Methoden (Head, Post, DELETE, LINK, UNLINK) und die Behandlung von Multimedia-Inhalten hinzu. Das Nachrichtenformat von Antworten und Anfragen wird genauer spezifiziert. HTTP/1.0 ermöglicht die Beschränkung des Zugriffes auf Ressourcen. Es handelt sich jedoch nur um eine rudimentäre Authentifizierung, da das Passwort unverschlüsselt übertragen wird und der Server sich dem Client gegenüber nicht authentifizieren kann. Die Weiterentwicklung endete 1997 mit HTTP/1.1. Diese Version konzentrierte sich auf die Korrektur der Designfehler, das Spezifizieren von Semantik, einigen PerformaceOptimierungen. So können jetzt im Gegensatz zur Version 1.0 mehrere Anfragen und Ant- 144 KAPITEL 9. WEBSERVER worten pro TCP-Verbindung gesendet werden. Für ein HTML-Dokument mit eingebetteten Bildern wird so nur eine TCP-Verbindung benötigt, wo vorher für jede Resource eine separate aufgebaut wurde. Zudem können bei HTTP/1.1 abgebrochene Downloads fortgesetzt werden. Über Cookies in den Header-Informationen können Anwendungen realisiert werden, die Statusinformationen (Benutzereinträge, ...) zuordnen können. Dadurch können Webanwendungen, die Status- bzw. Sitzungseigenschaften erfordern, realisiert werden. Auch eine Benutzerauthentifizierung ist möglich. Die Methoden sind auch weiter entwickelt. HTTP/1.1 bietet eine TRACE-Methode, mit der man den Weg zum Webserver überwachen kann. Mithilfe dieser Methode gibt es die Möglichkeit, den Weg zum Webserver über die verschiedenen Proxies hinweg zu ermitteln, ein Traceroute auf Anwendungsebene. HTTP/1.1 umfasste auch die Unterstützung für die höher entwickelten Netzanwendungen und Entwicklungen, die in den späten neunziger Jahren waren. 9.16 HTTP-Kommunikation 9.17 Dokumentation Eine umfangreiche und gut strukturierte Dokumentation findet man unter: http://www.apache.org. Der wohl am meisten verbreitete Webserver (nicht nur in der Linux-/Unixwelt) ist der Apache httpd. Er unterstützt eine ganze Reihe von Skriptsprachen, wie Perl und PHP über Module, Sicherungsmechanismen, wie SSL und weitere Plugins. Die Konfigurationsdateien (Hauptdatei: httpd.conf und SSL-Keys sind unterhalb von /etc/httpd zu finden. Kapitel 10 Mail Elektronische Post (E-Mail) ist sicher eine der wichtigsten und beliebtesten Anwendungen im Internet. Der Austausch von Nachrichten ist dabei gleichzeitig einer der ältesten Dienste im Netz. Um mit einer Linux-Maschine Mail versenden und empfangen zu können, reicht es im einfachsten Fall aus, die passenden Einstellungen in einem der vielen Mail-Clients vorzunehmen. Inzwischen stehen hierfür eine ganze Reihe von Programmen zur Verfügung; angefangen mit den ausschliesslich konsolenbasierten Programmen, wie pine oder mutt bis hin zu ”ausgewachsenen” grafischen Anwendungen, wie kmail, thunderbird bzw. mozilla oder evolution. Diese Programme, die zum Einliefern von Mails an Server und zum Empfang dienen, werden als MUA (Mail User Agent) bezeichnet. Manchmal findet man noch die Bezeichnung MRA (Mail Retrieval Agent). Dieses sind Programme die automatisiert Mails von einem Server holen und für den lokalen Zugriff auf dem System des Benutzers ablegen. Hierzu zählt beispielsweise fetchmail. Serverpgrogramme, die Mails weiterverschicken und in den lokalen Mailboxen der Emfänger ablegen, nennt man MTA (Mail Transfer Agent). Für letzteres kommen oft externe Programme zum Einsatz, die dann MDA (Mail Delivery Agent) heissen. MTAs lassen sich selbstverständlich mit Linux als Server aufsetzen. Es stehen dabei mehrere Implementierungen des SMTP (Simple Mail Transfer Protocol) zur Verfügung. Das älteste und umfangreichste Paket ist sicherlich ”Sendmail” (sendmail), wobei wegen der kryptischen Bedienbarkeit sich weitere Implementationen, wie ”Exim” (exim) oder auch ”ProcMail” (procmail) durchsetzen konnten. Dies ist jedoch nur die eine Seite des Postamtes. Der User holt sich seine ”postlagernden” Sendungen entweder mit POP3 (Post Office Protocol) ab und sieht sie ein bzw. verwaltet sie mit IMAP4. • SMTP (Simple Message Transfer Protocol) Es ist das Übertragungsprotokoll der Server untereinander und wird von den Clients zun Einliefern der Post benutzt. • POP (Post Office Protocol; derzeit aktuell in der Version 3) Die Clients benutzen es, um ihre Post vom Server abzuholen. Entgegen dem SMTP besteht dabei die Möglichkeit, die Mail auch teilweise auf dem Server zu verwalten (allerdings nur in beschränktem Maße). • IMAP (Internet Mail Access Protocol; derzeit aktuell in der Version 4) IMAP wird wie POP 3 von den Clients benutzt, um Mails vom Server abzuholen. Es bietet aber gegenüber POP wesentlich mehr Flexibilität bei der Verwaltung der Post, so z.B. die Möglichkeit, Eingangskörbe auf dem Server zu verwalten oder auch Roaming Users, also Anwender, die von verschieden Orten aus auf den Server zugreifen wollen. 145 146 KAPITEL 10. MAIL • LDAP (Lightweight Directory Access Protocol) Eine “leichte” Variante des DAP (Directory Access Protocol), welches von X.500 für den Zugriff auf die Datenbasis benutzt wird. LDAP wird derzeit von den neueren Mailclients (Outlook, Netscape) unterstützt, um auf globale Verzeichnisdienste zuzugreifen (Netcenter, VeriSign, Bigfoot etc.) 10.1 SMTP Im Folgenden geht es um das Prinzip hinter Mail Transfer Agents - Programme, die E-Mail entgegennehmen und weiterleiten. SMTP (Simple Mail Transfer Protokol) ist ein Protokoll zur Übertragung von E-Mail zwischen zwei MTAs. Ein MTA kann als Client (SMTP-Client) oder als Server (SMTP-Server) an einer SMTP-Kommunikation beteiligt sein1 . Der SMTPClient baut über Netzwerk eine Verbindung zu dem SMTP-Server auf, um an diesen EMail zu übertragen. Das Übertragen einer E-Mail, inklusive der relevanten Daten, wird als Mailtransfer bezeichnet. Eine abgeschlossene Kommunikation per SMTP wird als SMTPSitzung bezeichnet. Während einer SMTP-Sitzung können mehrere E-Mails übertragen werden. SMTP definiert Befehle und Antwort-Codes. Befehle werden vom SMTP-Client an den SMTP-Server gesendet. Mit diesen SMTP-Befehlen kann der Client die Kommunikation steuern. Antwort-Codes werden vom SMTP-Server als Reaktion auf die empfangenen Befehle an den SMTP-Client gesendet. SMTP enthält mittlerweile deutlich mehr Funktionalitäten, als zum einfachen Übertragen von E-Mail nötig sind. HELO hostname|domain Mit HELO leitet der SMTP-Client die Kommunikation ein. Als Parameter soll der Hostname des Clients gesendet werden. Der Parameter muss vorhanden sein, wird aber nicht überprüft. 2 EHLO hostname|domain Identisch zu HELO, nur dass der Client damit zu verstehen gibt, dass er einen erweiterten SMTP-Befehlssatz (des ESMTP) unterstützt. Der Server soll daraufhin mitteilen, welche Erweiterungen des Befehlssatzes für die Kommunikation zur Verfügung stehen. MAIL Dieser Befehl leitet das Übertragen einer E-Mail ein. Als Parameter muss die Absenderadresse übergeben werden. RCPT Dieser Befehl kann beliebig oft auf MAIL folgen. Mit jedem Aufruf wird eine Empfängeradresse übergeben. Es muss mindestens ein Aufruf von RCPT erfolgen. DATA Mit DATA signalisiert der SMTP-Client, dass er den Inhalt (Mail-Body) der EMail übertragen möchte. Nach einer positiven Antwort des Servers wird die E-Mail zeilenweise übertragen. Ein Zeile, die ausschliesslich einen Punkt (’.’) enthält, beendet die Übertragung des Inhalts der E-Mail. QUIT Um die Kommunikation zu beenden, sendet der SMTP-Client den Befehl QUIT. Eine erschöpfende Beschreibung von SMTP liefert RFC 2821. RFCs (Requests for Comments) sind öffentlich zugängliche Dokumente, die Standartprotokolle (in IP-basierten Net1 2 siehe Client-Server-Modell Zu den Begriffen Host und Domain siehe Kapitel DNS. 10.1. SMTP 147 zen) definieren. Diese Dokumente werden von der Internet Engineering Task Force (IETF) veröffentlicht und sind über verschiedene Webseiten verfügbar3 . Die Übertragung von E-Mail ist einer der ältesten und meist genutzten NetzwerkDienste. 1971 entwickelte Ray Tomlinson ein Verfahren zur Übertragung von Textnachrichten über ein Netzwerk. Mit den Programmen SNDMSG und READMAIL war die erste Komunikation per E-Mail möglich. Im Laufe der Jahre entwickelte sich das Verfahren stark weiter. Jonathan B. Postel veröffentlichte 1981 die erste Spezifikation von SMTP als RFC 788. 1982 wurde diese durch RFC 821 (auch von Postel) ersetzt. Anfang der 90er Jahre (19931995) wurden mehrere Erweiterungen zu SMTP spezifiziert, die 2001 schliesslich zu RFC 2821 führten, welches die vorherigen ersetzt. 10.1.1 E-Mail-Adresse Eine E-Mail-Adresse besteht aus einem Local Part und einem Domain Part. Beide werden durch ein ’@’-Zeichen voneinander getrennt. Der Local Part besteht aus dem - auf dem empfangenden System bekannten - Namen des Empfängers. Der Domain Part bezeichnet die Empfänger-, bzw. die Absenderdomain. Er besteht aus einer weltweit eindeutigen Domainbezeichnung. Diese Domainbezeichnung identifiziert das empfangende System und muss über DNS auflösbar sein (siehe DNS). (RFC 2142) 10.1.2 Versenden einer E-Mail Am Versand einer E-Mail sind mehrere sogenannte Agenten beteiligt. Ein Programm zum Lesen und Verfassen von E-Mail wird als Mail User Agent (MUA) bezeichnet. Eine EMail kann während des Transfers mehrere Mail Transfer Agents (MTA, siehe Kapitel SMTP) durchlaufen. Als Mail Delivery Agent (MDA) bezeichnet man ein Programm, das E-Mail lokal für den Empfänger verfügbar macht. Ein MDA bekommt eine E-Mail von dem lokalen MTA übergeben und speichert diese in der Inbox4 des Empfängers. Als Outgoing-SMTP-Server einer Domain bezeichnet man einen MTA, an den alle zu versendenden E-Mails einer Domain per SMTP übertragen werden. Dieser übernimmt die weitere Auslieferung. Ein Mailexchanger ist ein MTA, der für die Annahme von E-Mail für eine bestimmte Domain zuständig ist. Der Name und damit die IP-Adresse des Mailexchangers einer Domain muss über DNS in einem MX-Record verfügbar sein (siehe Kapitel DNS). Der Mailexchanger verfügt über Informationen zur weiteren Auslieferung einer E-Mail innerhalb seiner Domain. Diese kann per SMTP an einen weiteren MTA oder an einen lokalen MDA erfolgen. Eine in einem MUA verfasste E-Mail wird an den lokalen MTA übergeben, der sie per SMTP an den Outgoing-SMTP-Server seiner Domain übermittelt5 . Dieser wiederum sendet sie an den Mailexchanger der Empfängerdomain, welcher für die lokale Zustellung der E-Mail in die Inbox des Empfängers zuständig ist. Tabelle 10.1 zeigt eine typische einfache SMTP-Sitzung zum Übertragen einer E-Mail. Der SMTP-Client nimmt Kontakt zum SMTP-Server auf, der die Kontaktaufnahme mit dem Antwort-Code 220 und Informationen über sich selbst bestätigt. Daraufhin leitet der Client die Kommunikation mit HELO ein. Die mit HELO übergebene Zeichenkette soll der Identifikation dienen, wird aber an dieser Stelle ungeprüft übernommen. Wie es sich für 3 http://www.ietf.org/rfc, http://www.faqs.org/rfcs u.a. Im Deutschen oft einfach als Posteingang bezeichnet. 5 Viele MUAs sind in der Lage, die Aufgabe eines SMTP-Clients selbst zu übernehmen. 4 148 KAPITEL 10. MAIL Server: Client: S: C: S: C: S: C: S: C: 220 golem.ehlers-schwichtenberg.info ESMTP Postfix HELO schwichtenberg.net 250 golem.ehlers-schwichtenberg.info MAIL FROM: <fschwic@schwichtenberg.net> 250 Ok RCPT TO: <fschwic@ehlers-schwichtenberg.info> 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> Der Mail-Body . S: 250 Ok: queued as C1AD92BC346 C: QUIT S: 221 Bye Tabelle 10.1: Einfache Übertragung eine E-Mail mit SMTP einen höflichen Server gehört, antwortet dieser mit seiner eigenen Identifikation. Mit dem Befehl MAIL wird die Übertragung der eigentlichen E-Mail - der Mailtransfer - begonnen. Als Parameter werden ’FROM:’ und die Absenderadresse in spitzen Klammern übergeben. Nun kann der Client wiederholt Empfängeradressen mit dem Befehl RCPT und ’TO:’ und der Empfängeradresse in spitzen Klammern übertragen. Sowohl der Befehl MAIL als auch jeder Aufruf von RCPT wird bei Erfolg von dem Server mit dem Antwort-Code 250 OK beantwortet. Einige SMTP-Server überprüfen die Existenz der Absenderadresse. In jedem Fall sollte der Server überprüfen, ob er für die Zustellung von E-Mail für die Empfängeradressen zuständig ist. Bei negativem Ergebnis sendet der Server einen Fehler-Code, um die Annahme der E-Mail abzulehnen. 4xy bezeichnet einen temporären Fehler; der Client kann zu einem späteren Zeitpunkt erneut versuchen, die Mail an diesen Server auszuliefern. 5xy bezeichnet einen permanenten Fehler; der Client braucht keine erneute Zustellung dieser Mail an diesen Server zu versuchen. Einen SMPT-Server, der E-Mail für jegliche Empfängeradresse annimmt, bezeichnet man als Open-Relay (siehe Kapitel 10.1.5). Sind alle Empfängeradresse übermittelt, wird die eigentliche Nachricht, der Mail-Body (siehe Kapitel 10.1.3) übertragen. Der Client teilt dem Server mit dem Befehl DATA mit, dass er den Mail-Body übertragen möchte. Der Server sendet den Antwort-Code 354, um zu signalisieren, dass der Client mit dem zeilenweisen Übertragen der Nachricht fortfahren kann. Diese Übertragung wird mit einer Zeile, die einen einzelnen Punkt (’.’) enthält, beendet, woraufhin der Server den Empfang mit 250 OK und der Identifikationsnummer, unter der er die Mail verwaltet, bestätigt. Damit ist der Mailtransfer beendet. Nun kann der Client mit MAIL einen weiteren Mailtransfer einleiten oder die Verbindung mit QUIT beenden. 10.1.3 Mail-Body Der Mail-Body besteht aus Headerzeilen mit Informationen über die E-Mail und - getrennt durch eine Leerzeile - dem eigentlichen Text der Nachricht. Die meisten Headerzeilen werden von MUAs nicht angezeigt6 . Die während der SMTP-Sitzung übertragen E-Mail-Adressen dienen in erster Linie den MTAs zur Auslieferung bzw. zur Rückführung einer E-Mail. 6 Meistens ist es möglich, die Darstellung des kompletten Haeders einzuschalten. 10.1. SMTP 149 Return-Path: <fschwic@schwichtenberg.net> X-Original-To: fschwic@ehlers-schwichtenberg.info Delivered-To: fschwic@golem.ehlers-schwichtenberg.info Received: from schwichtenberg.net (shani.schwichtenberg.net [10.1.1.1]) by golem.ehlers-schwichtenberg.info (Postfix) with SMTP id C1AD92BC346 for <fschwic@ehlers-schwichtenberg.info>; Tue, 9 Mar 2004 21:05:52 +0100 (CET) Message-Id: <20040309200552.C1AD92BC346@golem.ehlers-schwichtenberg.info> Date: Tue, 9 Mar 2004 21:05:52 +0100 (CET) From: fschwic@schwichtenberg.net To: undisclosed-recipients:; Der Mail-Body Tabelle 10.2: Die E-Mail aus Tabelle 10.1 Steht nach einem Mailtransfer in dem Mail-Body noch keine mit ’From:’ beginnende Zeile, kann der MTA diese Zeile mit der Absenderadresse einfügen. Date, Subject, To, From oder Äquivalente sollten in einer E-Mail von vornherein vorhanden sein (RFC 822); sie können schon bei der ersten Auslieferung der E-Mail per SMTP im Mail-Body stehen. Die SMTP-Sitzung aus Tabelle 10.1 führt dazu, dass die E-Mail aus Tabelle 10.2 in der Inbox des Empfängers abgespeichert wird, wobei der Empfänger in dem MUA, mit dem er seine E-Mail liest, normalerweise nur die Zeilen “Date: ...”, “From: ...”, “To: ...” und den Text der Nachricht angezeigt bekommt. Ein MTA fügt zu jeder empfangenen E-Mail Haederzeilen hinzu, die bei weiteren Übertragungen per SMTP Bestandteil des Mail-Body sind. 10.1.4 E-Mail Header Der Header einer E-Mail besteht aus mehreren Headerzeilen. Eine Headerzeile ist ein Eintrag, der mit einem Bezeichner gefolgt von einem Doppelpunkt und einem Leerzeichen beginnt. Besteht eine Headerzeile aus mehreren Textzeilen, so müssen die folgenden Textzeilen mit einem Whitespace beginnen. Bezeichner für Headerzeilen, die in keinem Standart definiert sind, müssen mit ’X-’ beginnen (RFC 2821). Return-Path Ein MTA, der eine E-Mail endgültig zustellt7 , muss die Zeile Return-Path: <adresse> an den Anfang der E-Mail setzen. Die einzutragende Adresse ist die während des Mailtransfers mit MAIL übergebene Absenderadresse (RFC 2821). Received Jeder MTA, der eine E-Mail angenommen hat, muss vor der weiteren Auslieferung eine Received-Zeile an den Anfang des Mail-Body schreiben. Eine solche Zeile ist in drei Bereiche 7 “final delivery”; wenn der MTA die E-Mail an einen MDA übergibt oder in anderer Form aus dem SMTP-System nimmt. 150 KAPITEL 10. MAIL unterteilt: 1. Informationen über den SMTP-Client eingeleitet mit “from”. Dieser Bereich enthält die Identifikation des Clients. In der Regel ist das die mit HELO oder EHLO übergebene Zeichenkette. Zusätzlich sollen in runden Klammern TCP-Informationen über den Client eingefügt werden. Die meisten MTAs fügen die IP-Adresse des SMTP-Client (in eckigen Klammern) und den daraus resultierenden Hostnamen ein. 2. Informationen über den SMTP-Server selbst. Beginnend mit “by” werden der Hostname des Servers und Informationen über den Empfang (meistens Art der Software, Empfangsprotokoll und Identifikationsnummer der E-Mail im Server) eingefügt. 3. Informationen über den Empfang der E-Mail mit “for”, gefolgt von der mit RCPT übergebenen Empfängeradresse und - getrennt durch ein Semikolon - der Zeitpunkt des Empfangs. Weitere Headerzeilen “Massage-Id:” soll von dem System erzeugt werden, das die E-Mail erstellt. Diese Zeile ist nicht zwingend erforderlich. Date, From, To und Subject sollen von vornherein Bestandteil einer E-Mail sein (RFC 822). Der MUA in dem die E-Mail erstellt wurde sollte diese Headerzeilen eintragen. Wenn diese nicht vorhanden sind, kann ein MTA sie einfügen. Die Einträge “X-Original-To:” und “Deliverd-To:” aus Tabelle 10.2 werden speziell von dem MTA Postfix eingefügt. Sie widersprechen dem Standart nicht, sind aber auch nicht verlangt. 10.1.5 Open-Relay Ein Open-Relay ist ein Mailexchanger oder ein Outgoing-SMTP-Server, der E-Mail von beliebigen MTAs für beliebige Empfängeradressen annimmt und weiterleitet. Da die Angabe der Absenderadressen während einer SMTP-Sitzung nur unzureichend oder gar nicht überprüft wird, ermöglicht ein Open-Relay jedermann das anonyme Versenden von E-Mail (siehe Kapitel 10.1.6). Ein Mailexchanger sollte nur E-Mail annehmen, deren Empfängerdomain in seinem Zuständigkeitsbereich liegt. Ein Outgoing-SMTP-Server sollte E-Mail nur von authorisierten MTAs zur Weiterleitung annehmen. 10.1.6 Sicherheit Die Tatsache, dass unverschlüsselt übertragene E-Mail quasi öffentlich lesbar ist, wird mittlerweile häufig diskutiert und soll hier nicht erneut aufgegriffen werden. An dieser Stelle interessant ist die Betrachtung der Zuverlässigkeit der Informationen, die in einer E-Mail vorhanden sind, wenn sie beim Empfänger ankommt (siehe Kapitel 10.1.3) und wie SMTP mißbraucht werden kann. Das Abholen von E-Mail eines Benutzers von seiner Inbox ist nicht Bestandteil der SMTP-Übertragung. Der Benutzer kann direkten Zugriff auf seine Mailbox haben oder Protokolle wie POP oder IMAP benutzen. In diesem Bereich geht es hauptsächlich darum, dass kein Unbefugter auf die Mailbox zugreifen kann. 10.1. SMTP 151 Hat ein Benutzer eine E-Mail verfasst, wird er diese in der Regel per SMTP an den Outgoing-SMTP-Server seiner Domain oder seines Providers übertragen. Die Übermittlung an einen Outgoing-SMTP-Server des Providers ist unproblematisch, da der Provider seine Kunden kennt und den Zugriff über die Kenntnis der IP-Adresse des Kundenrechners oder über die Vergabe eines Passwortes einschränken kann. Gleiches gilt für den OutgoingSMTP-Server einer Domain, wobei hier die SMTP-Kommunikation sogar über ein geschlossenes internes Netzwerk erfolgt. In Bereichen, wo eingehende E-Mail in einem internen Netzwerk verteilt werden muss, gibt es einen (oder auch mehrere) Mailexchanger, der E-Mail aus dem Internet annimmt. Die interne Weiterleitung erfolgt in einem abgeschlossenen Netzwerk, in dem sich alle Rechner vertrauen können. In den frühen Zeiten des Internet war es notwendig, E-Mail über eine Kette von SMTPServern zu übertragen, da sich nicht alle Rechner direkt erreichen konnten. Aus dieser Zeit stammt der Begriff des Mailrouting. Heutzutage ist die Entwicklung der Netzwerktechnologie und des Internet so weit, dass sich alle im Internet befindlichen Rechner gegenseitig erreichen können8 . Man kann also die sicherheitskritische Betrachtung des E-Mail-Verkehrs auf die Kommunikation zwischen Outgoing-SMTP-Server, in der Rolle des SMTP-Client, und Mailexchanger als SMTP-Server reduzieren. Es sind durchaus Systemarchitekturen denkbar, die von einem so einfachen Modell abweichen. Diese lassen sich aber darauf zurückführen. Die Angaben, die von einem SMTP-Client während einer SMTP-Sitzung gemacht werden, sind fast beliebig. Nicht einmal an Stellen, an denen eine E-Mail-Adresse erwartet wird, muss wirklich eine übertragen werden. Enthält eine Zeichenkette, die als E-Mail-Adresse interpretiert wird, kein ’@’-Zeichen, geht der SMTP-Server normalerweise davon aus, dass es sich um einen Benutzernamen innerhalb seines Systems handelt und hängt ein ’@’ gefolgt von seinem Domainnamen an. Die Identifikation des HELO oder EHLO-Befehls ist vollkommen beliebig. Empfängeradressen zu fälschen macht wenig Sinn. Jeder möchte, dass eine von ihm verschickte E-Mail irgendwo ankommt. Ein ehrlicher Benutzer hat keinen Grund, eine falsche Absenderadresse anzugeben. Er hat Interesse daran, dass der Empfänger der E-Mail ihm antworten kann und möchte auch benachrichtigt werden, wenn bei der Übertragung der Nachricht etwas schief geht. Ein Versender von unerwünschter E-Mail wird seine Identität verschleiern. Er verschickt in der Regel sehr viele solche Nachrichten. Er muss damit rechnen, dass die Empfänger auf seine Nachricht negativ antworten und so aufgrund ihrer Vielzahl sein Mailsystem lahmlegen9 . Auch wäre es unter bestimmten Bedingungen möglich, ihn juristisch zur Verantwortung zu ziehen. Alle anderen Werte einer E-Mail sind schon während der Übertragung Bestandteil des Mail-Body (siehe Kapitel 10.1.3). Der Versender einer E-Mail kann sich Werte für Absender (“From:”), Empfänger (“To:”), Betreff (“Subject:”) usw. und beliebige “Received:”-Zeilen ausdenken. Die einzigen verlässlichen Angaben sind die in der Received-Zeile des letzten MTA. Da dieser das System ist, von dem man seine E-Mail direkt bezieht, kann man diesen Einträgen 8 Rechner hinter einem maskierenden Gateway muss man durchaus als “nicht im Internet befindlich” ansehen. Und solche, die sich hinter einer Firewall befinden, sind unter Umständen nicht erreichbar, obwohl sie sich im eigentlichen Sinn im Internet befinden. Nur bedeutet die Tatsache, dass ein Rechner einen Verbindungsaufbau ablehnt, natürlich nicht, dass man ihn nicht erreichen kann. 9 Was für einen Nutzen das Versenden einer solchen Nachricht für den Absender haben kann, soll hier nicht diskutiert werden. Es reicht aus, dass sowohl die Betreiber von Mailservern als auch die Empfänger maßgeblich belästigt werden. 152 KAPITEL 10. MAIL vertrauen. Kommando HELO MAIL RCPT DATA HELP VRFY EXPN RSET NOOP QUIT Argument Systemname From: Absenderadresse To: Empfängeradresse Daten... Topic Mailadresse Mailadresse Beschreibung Beginn, Name des sendenden Systems Beginn der Übermittlung Adressat der E-Mail Brieftext, Ende durch eine Zeile mit ”.” Hilfestellung Mailadresse verifizieren Mailadresse expandieren (z. B. Liste) Senden abbrechen, Zurücksetzen nichts tun Verbindung beenden Tabelle 10.3: Grundsätzliche SMTP-Befehle 10.2 sendmail Das Paket sendmail ist eines der ältesten INTERNET-Programme und wohl auch das mit dem schlechtesten Ruf. Am Anfang war es aufgrund diverser Sicherheitslücken ein beliebtes Einfalltor für Hacker und Co.; bei den Administratoren ist es wegen seiner schwierigen Konfiguration gefürchtet. Dennoch hat es sich zum Standard für UNIX/LINUX-MTAs erhoben und verdient auf jeden Fall eine genauere Betrachtung. Mit den Jahren ist sendmail, was die Sicherheit anbelangt, wesentlich besser geworden. Da es als OpenSource zur Verfügung steht, hatten Gott und die Welt Zeit und Muße, den Quellcode auf Fehler abzuklopfen und diese auszumerzen. Sendmail ist daher bei anständiger Konfiguration nicht unsicherer als andere Dienste auf einem UNIX-Server. Was die Konfiguration angeht, so haben sich die Programmierer die Kritik zu Herzen genommen und ein Tool entwickelt, welches die Arbeit erleichtert. Dieses Tool namens IDA ist bei SuSE im sendmail-Paket bereits enthalten und wird intern von YaST aufgerufen. 10.3 exim Die Installation eines eigenen Mailservers auf einer Linux-Maschine hat den entscheidenden Vorteil, dass man die von selbst oder von anderen erstellten Mails jederzeit abschicken kann. Somit muss nicht jeder einzelne Client mit einem externen Mailserver die Verbindung aufbauen, sondern es lassen sich firmen-/organisationseigene Maildienste realisieren. Dazu muss aber zunächst z.B. exim neu konfiguriert werden (z.B. mittels eximconfig. Hierfür muss man über SuperUser-Rechte verfügen.): hermes:/# eximconfig You already have an exim configuration. Continuing with eximconfig will overwrite it. It will not keep any local modifications you have made. If that is not your intention, you should break out now. If you do continue, then your existing file will be renamed with .O on the end. [---Press return---] 10.4. POP 153 Kommando USER PASS QUIT Argument Name String Beschreibung Das Argument identifiziert eine Mailbox Der String enthält ein Mailbox-spezifisches Passwort Beendet die Verbindung Tabelle 10.4: Kommandos im ”Authorization State” Kommando Argument STAT LIST Nummer RETR Nummer DELE NOOP Nummer RSET QUIT Beschreibung Liefert die Anzahl der gespeicherten Mails und die Größe der Mailbox zurück (in Byte) Liefert die Nummer und Größe (in Bytes) aller Mails zurück Wird als Argument eine Mail-Nummer angegeben, wird nur die Größe dieser Mail ausgegeben Gibt die Mail mit der als Argument übergebenen Nummer aus Löscht die Mail mit der übergebenen Nummer Bewirkt die Antwort ”+OK”. Dient zur Aufrechterhaltung der Verbindung, ohne daß ein Time-Out auftritt Setzt die aktive Verbindung zurück. Noch nicht ausgeführte Änderungen werden verworfen Beendet die Verbindung und führt alle gespeicherten Änderungen aus Tabelle 10.5: Kommandos im ”Transaction State” 10.4 POP Für den Transport bis zum Server mit dem E-Mail Postfach findet i.d.R. das SMTPProtokoll Anwendung. Da Benutzerrechner, auch in Zeiten totaler Vernetzung, nicht permanent im Netz sind wird die Übertragung zum Client des Empfängers getrennt geregelt. Häufig findet, seiner Einfachheit wegen, das Post Office Protocol in Version 3 (POP3) Einsatz. Auf der Seite des Servers bearbeitet der POP3-Daemon, entweder durch (x)inetd oder permanenten Daemon realisiert, auf Port 110 eingehende Verbindungen und stellt die EMails eines, durch Postfachname und Kennwort authentifiziertes Postfach, den Clients zur Verfügung. Eine komfortable Verwaltung der E-Mails bereits auf dem Postfach-Server ist mit POP3 nicht möglich. So muß eine E-Mails vor dem lesen komplett vom Client geladen werden und wird in Regelfall nach der Übertragung vom Server gelöscht. Dies führt zu inkonsistenzen beim gleichzeitigen Einsatz verschiedener Clients für ein Postfach. Denn Mails, welche bereits abgerufen wurden, sind für die anderen Clients nicht mehr erreichbar. Das vollständige Abrufen aller E-Mails vom Server hat Vorteile wenn eine Verbindung per Modem realisiert ist, da diese nach erfolgter Übermittlung wieder getrennt werden kann und keine weitere Kosten verursacht. Da das POP3 Protokoll sehr einfach aufgebaut ist kann man ein Postfach ggf. auch per Telnet bedienen: user@linux:/> telnet pop3.postfachserver.de 110 Trying a.b.c.d... <-- IP Adresse des POP3-Servers Connected to pop3.postfachserver.de. Escape character is ’^]’. +OK (rwcrpxc13) POP3 server USER username <-- Nutzer-/ Postfachname 154 +OK PASS password +OK Maildrop ready LIST KAPITEL 10. MAIL <-- Kennwort <-- Liste der E-Mails im Postfach anfordern +OK scan listing follows 1 961 <-- Laufende Nummer der E-Mails 2 3452 und deren Gr201ı̈¿ 21 [7m201ı̈¿ 21 in Byte . RETR 1 <-- Anfordern von Mail Nummer 1 +OK Message follows Return-Path: <user@absender.net> Received: from mail.postfachserver.de ([unix socket]) by srv1 (Cyrus v2.1.15) with LMTP; Mon, 10 May 2004 12:05:43 +0200 X-Sieve: CMU Sieve 2.2 Received: from absender.net (absender.net [a.b.c.d]) by pop3.postfachserver.de (8.12.10/8.12.6/SuSE Linux 0.6) with ESMTP id i4H55hqd028136 for <user@postfachserver.de>; Mon, 10 May 2004 12:05:43 +0200 Message-ID: <40A845E4.4070400@sender.de> Date: Mon, 17 May 2004 06:56:04 +0200 From: "Nutzername" <user@absender.net> User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113 X-Accept-Language: de-de, en-us MIME-Version: 1.0 To: user@postfachserver.de Subject: test Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, hits=-4.6 required=4.8 tests=AWL,BAYES_10,USER_AGENT_MOZILLA_UA version=2.55 X-Spam-Level: X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp) test . STAT +OK 2 4413 DELE 1 +OK message deleted LIST +OK scan listing follows 2 3452 . QUIT +OK Connection closed by foreign host. <-- Anzahl der E-Mails im Fach und deren Gesamtgröße <-- Löschen von E-Mail Nummer 1 <-- Liste der E-Mails im Postfach <-- Verbindung beenden Verbleibt noch die Nennung der Befehle RSET, welches Markierungen (als gelesen) einzelner E-Mails rückgängig macht, und TOP #msg #lines (optional) um von #msg die #lines angezeigt zu bekommen. An dieser Stelle ist auch ersichtlich, dass Benutzername und Kennwort in Klarschrift übertragen werden. Um das Postfach über eine verschlüsselte Verbindung abzurufen kann POP3 über SSL/TLS, auf Port 995, realisiert werden. 10.5. IMAP 155 Auf dem Server werden die E-Mails in zwei Ablageformaten verwaltet. Entweder im Mailbox-Format, wo alle Mails in einer fortlaufenden Datei je Nutzer im Verzeichnis /var/spool/mail gehalten werden oder im Maildir-Format, wo i.d.R. in einem Verzeichnis im Homevezeichnis des Nutzers je einer Datei pro E-Mail abgelegt wird. Das Mailbox-Format kann viele kleine E-Mails, wie dies in der vorkommerziellen Ähra des Internets noch üblich war, ohne große Belastung der Server-Festplatten verarbeiten, verbraucht aber bei großen E-Mails viel Speicher. Beim Maildir-Format sind die Ansprüche an die Massenspeicher höher dafür die Speicherbelastung geringer, da nur einzelne Dateien verarbeitet werden müssen. Um mit POP3-Servern eine Filterung der Mails zu ermöglichen muß dies beim MTA implementiert werden. Denn der MTA stellt ankommende E-Mails direkt in die lokale Mailbox. 10.5 IMAP Für eine komfortable Verwaltung von E-Mails bereits auf dem Postfach-Server wurde das Internet Message Access Protocol (IMAP) entwickelt. Im Gegensatz zu POP3 verbleiben die E-Mails auf dem Server. Damit kommt IMAP vorallem den Bedürfnissen mobiler Benutzern entgegen, denn auch bei gleichzeitiger Verwendung verschiedener Mail-Client-Software und/oder Webfrontend bleiben die Daten konsistent. Die aktuelle Versionsnummer ist 4 und hat einen Komplexitätsgrad erreicht, welcher durch kaum einen IMAP-Client vollständig unterstützt wird. Um die E-Mails eines Postfaches lesen zu können wird, analog dem zum POP3 Protokoll, eine Verbindung zum Server aufgebaut. Bei IMAP werden im ersten Schritt nur die Headerinformationen der Mails im Postfach abgerufen und erst bei Bedarf, wenn der Inhalt der Mail beim Nutzer von Interesse ist (angezeigt durch Auswahl), der Body nachgeladen wird. Dies hat den Vorteil, dass eine E-Mail mit großem Anhang nicht unnötig über eine langsame Modemleitung gesendet wird, denn bei Bedarf kann eine große E-Mail von einem Terminal mit schnellerer Netzanbindung geladen werden ohne auf die Verwaltung und Beantwortung der verbleibenden Mails verzichten zu müssen. Ein weiterer Vorteil ist die Organisation des Postfaches mittels Unterverzeichnisse. Für IMAP sind Erweiterungen möglich, so z.B. der Zugriff auf Ordner durch verschiedene Nutzer. Damit lassen sich Arbeitsprozesse für Gruppen vereinfachen und Datenaufkommen durch Versenden von Kopien vermeiden. Diese Methode läßt sehr differenzierte administrative Einstellungen zu. Der Preis des Komforts ensteht durch aufwendige Serverimplementationen mit deutlich höheren Anforderungen an CPU und Speicher gegenber POP3-Servern. Desweiteren dauert eine IMAP-Sitzung bis der Nutzer diese beendet (oder Time-outs beim Server die Verbindung trennen). Damit sind die Kosten für Einwahlverbindungen i.d.R. höher. Dies läßt sich aber durch den Wechseln zwischen POP3 und IMAP, was durch die meisten IMAP-Server unterstützt wird, kompensieren. Drei der beliebtesten IMAP-Server fr Unix/Linux sind Courier-, Cyrus- und UW-IMAP. Alle bieten sehr umfangreiche Funktionen und Erweiterungsmöglichkeiten und sind für eine große Anzahl an Postfächern (¿20k) geeignet. So lassen sich z.B. die Postfach-Nutzer von den Systemnutzern trennen, Mailfilter-Sprachen einbinden und Quotas festlegen (was dringend empfohlen wird, da die Nutzer die Mailboxen meist als privaten File-Server missbrauchen). Es gibt daneben auch noch imap-Daemonen welche IMAP, sehr rudimentär und ohne Funktionen welche über POP3 hinaus gehen, bereitstellen. 156 KAPITEL 10. MAIL Leider unterstützt kaum ein Client die Funktionen z.z. vollständig. Mulberry und pine sind zwei der seltenen Ausnahmen mit sehr umfangreichen IMAP-Funktionen. Die E-Mails werden entweder in einem Verzeichnis im Homeverzeichnis des Servers bereitgestellt oder unter /var/spool/imap in Nutzerverzeichnissen. Im Gegensatz zu POP3 ist nicht der MTA für die Abspeicherung neuer Mails zuständig, sondern der IMAP-Server selbst. Deshalb hat i.d.R. auch nur der IMAP-Server zugriff auf die entsprechenden Verzeichnisse, welche dieser u.a. mit separaten Index- und Quota-Tabellen für schnelleren Zugriff verwaltet. Die Haltung der E-Mails als quasi File-Server stellt erhöhte Ansprüche an die Festplatten und Speicherausstattung. Zum Einen müssen die Speicherkapazitäten wachsen, da die durchschnittlich auf dem Server gehaltenen Datenmenge gegenber POP3 drastisch ansteigt. Zum Anderen sind die Zugriffzeiten ausschlaggebend für die Gesamtperformance des Servers, da die Anzahl der Dateien steigt. Dies sind ausschlaggebenden Gründe warum IMAP-Server immer noch selten betrieben werden. Der Standard-Port für IMAP ist 443 und für IMAPS, die Variante über SSL/TLS, ist 993 reserviert. 10.6 Aufgaben 10.6.1 Dienste 1. Welche IP Adresse hat der Server www.stud.uni-goettingen.de? Womit wird diese ermittelt? 2. Wie heisst der Server 134.76.62.220 mit vollständigem Rechner- und Domainnamen? 3. Welche TCP und UDP Ports sind auf dem Dozentensystem offen? Welchen Diensten sind diese zuzuordnen? Kapitel 11 Fileserver 11.1 Unix-Netzwerkdateisystem - NFS NFS, das Network File System, ist wahrscheinlich der populärste und am häufigsten eingesetzte RPC basierende Netzwerkdienst. Er erlaubt, entfernte Verzeichnisse auf anderen Hosts so zu benutzen, als lägen diese Dateien lokal vor. Dies wird durch eine Mischung aus Kernel-Funktionalität auf der Client- und Server-Seite realisiert. Der Dateizugriff ist für den Client völlig transparent und funktioniert für eine ganze Reihe von Server- und Host-Architekturen. NFS bildet jede Art des Zugriffs auf Verzeichnisse und Dateien über einen Remote Procedure Call ab. Das erlaubt auf der einen Seite den gemeinsamen schreibenden Zugriff von mehreren Clients auf ein Dateisystem. Auf der anderen Seite generieren die verschiedenen Remote Procedure Calls gerade auf kleinen Dateien einen nicht unerheblichen Overhead. Dieses kann man sehr leicht ausprobieren in dem man einfach mal die Zeit misst, die es braucht ein Verzeichnis mit sehr vielen kleinen Dateien auf einer NFS-Quelle zu kopieren oder dasselbe mit einer einzigen gleichgrossen Datei anzustellen. NFS wird traditionell über das Transportprotokoll UDP abgewickelt, die Version 3 erlaubt eine alternative Verwendung von TCP. Es arbeitet als Remote Procedure Call (RPC) Dienst und erfordert für seinen Einsatz das Vorhandensein des Portmap-Daemonen (portmap). Die beiden ”alten” Daemonen, die im Userspace agieren, heissen deshalb auch rpc.nfsd und rpc.mountd. Sie werden üblicherweise über ein gemeinsames Startskript bei SuSE /etc/init.d/nfsserver gestartet, welches bei seiner Einrichtung darauf achtet, dass der Portmapper vorher aufgerufen wird. Die Daemonen des Kernelspaces werden mittels analogen Startskriptes aufgerufen, wobei für den NFS-Daemon standardmäßig vier Threads gestartet werden. Die Zahl kann für hohe Anforderungen jedoch stark gesteigert werden. In den wenigsten Fällen lassen sich beide NFS-Implementationen problemlos nebeneinander installieren, da gemeinsame Dateien, wie das Startskript einge wesentliche Unterschiede aufweisen. Für wechselnde Experimentierumgebungen mit beiden Servertypen sind Anpassungen mindesten der Init-Skripten notwendig. Die Unterstützung für das Network Filesystem muss sowohl im Server- Kernel als auch im Kernel der Clients aktiviert sein. Im Kernel des Servers sollte für Test- und Überwachungszwecke auch die Clientunterstützung aktiviert sein. So kann über ein einfaches Loopbackmounten von NFS-Freigaben sehr leicht überprüft werden, ob diese korrekt eingerichtet sind. NFS bietet eine Reihe nützlicher Features: • Daten, auf die von allen Benutzern zugegriffen wird, können auf einem zentralen Host gehalten werden - zentraler Fileserver für Home-Verzeichnisse. Clients mounten dieses 157 158 KAPITEL 11. FILESERVER Verzeichnis während der Bootphase bzw. wärend des Logins des Benutzers. • Daten, die sehr große Mengen an Plattenspeicher einnehmen, können auf einem einzigen Rechner vorgehalten werden. So könnten etwa die Office-Pakete Star- oder OpenOffice an einer Stelle gespeichert und administriert werden. • Administrative Daten können auf einem Host gehalten werden. So kann die Mühe entfallen bestimmte Datensätze nach ihrer Aktualisierung auf viele Homeverzeichnisse. Clients mounten dieses Verzeichnis während der Bootphase bzw. wärend des Logins des Benutzers. Die besondere Stärke liegt hier in der Verbindung mit NIS. So können sich die Benutzer dann an jedem System einloggen und arbeiten dennoch mit nur einem Satz von Dateien. • Daten, die sehr große Mengen an Plattenspeicher einnehmen, können auf einem einzigen Rechner vorgehalten werden. So könnten etwa die Office-Pakete Star- oder OpenOffice an einer Stelle gespeichert und administriert werden. • Administrative Daten können auf einem Host gehalten werden. So kann die Mühe entfallen bestimmte Datensätze nach ihrer Aktualisierung auf viele Rechner zu verteilen. NFS kann sowohl auf das Transportprotokoll UDP als auch TCP zurückgreifen. Die Verwendung von TCP ist jedoch erst in den neueren Versionen 3 und 4 ünterstützt. Es arbeitet als Remote Procedure Call (RPC) Dienst und erfordert deshalb für seinen Einsatz das Vorhandensein des Portmap-Daemonen (portmap). Die Daemonen zur Bereitstellung von NFS-Diensten werden üblicherweise über ein gemeinsames Startskript, bei SuSE /etc/init.d/nfsserver gestartet, welches bei seiner Einrichtung darauf achtet, dass der Portmapper vorher aufgerufen wird. Die Zahl der NFS-Daemonen liegt standardmäßig bei vier Threads. Die Zahl kann für hohe Anforderungen jedoch stark gesteigert werden. Die Unterstützung für das Network Filesystem muss sowohl im Server-Kernel als auch im Kernel der Clients aktiviert sein. Alternativ zur statischen Variante kann die NFS-Fähigkeit des Kernels auch mittels Module nachgeladen werden. Sein Alter merkt man NFS jedoch auch an: Es verfolgt ein generalistischen Ansatz und versucht es jedem Anwendungszweck einigermassen recht zu machen. Bis einschliesslich Version 3 muss das Sicherheitskonzept von NFS als weitgehend nichtexistent bezeichnet werden, da die IP-basierte und überhaupt nicht nutzerbasierte Authentifizierung, Angriffe auf die Daten in Benutzer-Homeverzeichnissen kaum abhalten konnte. 11.1.1 NFS im Einsatz Eine Freigabe, bei NFS ”export” genannt, definiert man auf dem Server in der Datei /etc/exports: /home /home 10.18.40.0/255.255.254.0(rw,async) *.my-domain.site(rw,async) Im Beispiel wurde das Home-Verzeichnis aller Benutzer für alle Maschinen im Subnetz 10.18.40.0 mit der Netzmaske 255.255.254.0 freigegeben. Freigaben lassen sich auf einzelne Maschinen oder auch auf Rechnernamen vornehmen. Letzteres zeigt die zweite Freigabe an alle Rechner deren IP-Adresse aufgelöst Mitglied der Domain my-domain.site sind. Der Beispielexport legt fest, dass das Clients auf der Freigabe schreiben dürfen, der Benutzer ”root” jedoch davon ausgenommen ist. Für alle Schreibvorgänge wird eine sofortige Bestätigung 11.1. UNIX-NETZWERKDATEISYSTEM - NFS 159 angefordert. Mit der Option async für asynchrones Schreiben kann man das Schreib- und Leseverhalten verbessern, jedoch sinkt damit die Datensicherheit beim Schreiben. Dass der Systemadministrator vom Zugriff ausgeschlossen wurde, ist jedoch nur eine minimale Hürde Angreifern gegenüber. Es hindert keiner diese daran, einfach die passenden Benutzer-IDs auf seinem lokalen System anzulegen und sich dann mit diesen IDs in den interessierenden Verzeichnissen zu bewegen. Ein NFS-Server muss je nach Einsatzgebiet und Anzahl der zugreifenden Clients einges leisten. Von ihm hängt die Performance des Zugriffs auf entfernt liegende Dateien auf den Clients ab. Eine leistungsfähige CPU, viel Hauptspeicher, nicht zu langsame Festplatten und eine gute Netzwerkverbindung sind entscheidende Faktoren. Mit der heute üblichen Leistung auch der Einstiegsprozessoren, die man auf vielen Clients finden wird, kann eine 100 Mbit-Leitung durchaus bis an ihre theoretische Transfergrenze von über 10 Mbyte/s ausgelastet werden. Soll es nicht zu unnötigen Wartezeiten auf den Clients kommen, sollte der Server über ein oder mehrere Gigabit-Netzwerkinterfaces verfügen, die idealerweise an der Switch angeschlossen sind, welche die Verteilung an die Endgeräte übernimmt. Damit nicht alle Daten erneut von der Festplatte in den Hauptspeicher und dann über das Netzwerk geschaufelt werden müssen, macht ein großer Arbeitsspeicher Sinn. Durch diesen wird ein Cache häufig angeforderter Festplattenblöcke angelegt, welche dann direkt aus dem Hauptspeicher an den anfragenden Client ausgeliefert werden können. 11.1.2 NFS und Portmapper Das Network File System benötigt Remote Procedure Calls (RPC). Der Portmapper - repräsentiert durch den Dienst portmap - ordnet RPC-Anfragen den korrekten Dienste zu. RPC-Prozesse benachrichtigen portmap, wenn sie starten. Des Weiteren teilen die Anfragen die überwachte Port-Nummer sowie die Nummern des RPC-Programms mit, die aufgerufen werden. Der Client kontaktiert den Portmapper auf dem Server mit einer bestimmten RPC-Programmnummer. Dieser leitet dann den Client zur richtigen Port-Nummer um, damit er mit dem gewünschten Dienst kommunizieren kann. Da RPC-basierte Dienste für die Verbindungen mit ankommenden Client-Anfragen von portmap abhängig sind, muss er gestartet sein, bevor einer dieser Dienste gestartet wird. Andernfalls beobachtet man sehr lange Wartezeiten zum Beispiel bis zum Abschluss eines NFS-Mounts. Für die Zugriffssteuerung auf RPC-basierte Dienste des Servers kann man die Host-Zugriffsdateien (/etc/hosts.allow und /etc/hosts.deny) verwenden. Will man im Bereich RPC-Dienste debuggen, ist eine Zugeordnung der Portnummern sehr nützlich. Der Befehl rpcinfo zeigt jeden RPC-basierten Dienst mit Port-Nummer, RPC-Programmnummer, Version und dem Typ des Transport-Protokolls (TCP oder UDP) an. Die Ausgabe im folgenden Beispiel-Listing zeigt den Portmapper auf einer Maschine, die den kernelbasierten NFS-Dienst verwendet: s01:~ # rpcinfo -p program vers proto 100000 2 tcp 100000 2 udp 100003 2 udp 100003 3 udp 100227 3 udp 100003 2 tcp 100003 3 tcp 100227 3 tcp 100024 1 udp port 111 111 2049 2049 2049 2049 2049 2049 34607 portmapper portmapper nfs nfs nfs_acl nfs nfs nfs_acl status 160 KAPITEL 11. FILESERVER 100021 100021 100021 100024 100021 100021 100021 100005 100005 100005 100005 100005 100005 1 3 4 1 1 3 4 1 1 2 2 3 3 udp udp udp tcp tcp tcp tcp udp tcp udp tcp udp tcp 34607 34607 34607 32778 32778 32778 32778 783 786 783 786 783 786 nlockmgr nlockmgr nlockmgr status nlockmgr nlockmgr nlockmgr mountd mountd mountd mountd mountd mountd Die erste Spalte gibt die Dienstnummer an, wobei dem Portmapper mit 100000 die niedrigste zugeordnet ist. Der NFS-Dienst erhielt die Nummer 100003 und der MountDienst die 100005. Diese Zahlen sind so festgelegt. Die zweite Spalte gibt Auskunft über die verwendete Protokollversion des Dienstes. Die gleiche Versionsnummer taucht zweimal auf, wenn der Dienst auf zwei verschiedenen Transportprotokollen, UDP und TCP, angeboten wird. Dabei hat die Protokollnummer des Portmappers nichts mit den Protokollnummern der anderen Dienste zu tun. Die Dienste selbst müssen jedoch in der Lage sein, mit dem jeweiligen Port-Mapper zusammenzuarbeiten. Der NFS-Server unterstützt die Versionen 2 und 3, der Mount-Server zusätzlich NFSVersion 1. Da Letzterer seine Dienste sowohl auf TCP als auch auf UDP anbietet, taucht er sechsmal in der Liste auf. Die Art des Transportprotokolls, auf dem ein Dienst arbeitet, kann der dritten Spalte entnommen werden. Die vierte Spalte liefert die Portnummer und die fünfte den Namen des gestarteten Dienstes, wie er auch in der Prozesstabelle (z.B. durch ps aux) angezeigt werden würde. Das nächste Beispiel zeigt eine Maschine, die NFS über den klassischen UserspaceDienst ausschließlich in den NFS-Protokollversionen 1 und 2 anbietet. Solche Maschinen wird man jedoch zunehmend seltener finden, da die Implementierung von NFS im LinuxUserspace nicht mehr weiterentwickelt wird. Zusätzlich läuft ein weiterer RPC-Dienst zur NIS-Authentifizierung, der aber ebenfalls kaum noch irgendwo Verwendung findet. s05-alt:~ # rpcinfo -p Program Vers Proto Port 100000 2 tcp 111 100000 2 udp 111 100021 1 udp 32768 100021 3 udp 32768 100021 4 udp 32768 100007 2 udp 803 100007 1 udp 803 100007 2 tcp 806 100007 1 tcp 806 100005 1 udp 829 100005 2 udp 829 100005 1 tcp 833 100005 2 tcp 833 100003 2 udp 2049 100003 2 tcp 2049 100011 1 udp 855 portmapper portmapper nlockmgr nlockmgr nlockmgr ypbind ypbind ypbind ypbind mountd mountd mountd mountd nfs nfs rquotad 11.1. UNIX-NETZWERKDATEISYSTEM - NFS 100011 100011 100011 11.1.3 2 1 2 udp tcp tcp 855 858 858 161 rquotad rquotad rquotad NFS-Clients Ein Client versucht, ein Verzeichnis von einem entfernten Host an sein lokales Verzeichnis zu mounten, genau wie er dies mit einem physikalischen Gerät machen würde. Allerdings ist die für ein entferntes Verzeichnis zu verwendende Syntax anders. Soll zum Beispiel das Verzeichnis /opt/applix vom Host ”server” an /opt/office auf der Maschine gemountet werden, führt man folgenden Befehl aus: mount -t nfs -o ro,rsize=8192 server:/opt/openoffice /opt/office 11.1.4 NFS-Server Die Freigaben, welche der NFS-Server zur Verfügung stellen soll, werden in der Datei /etc/exports definiert: /usr /opt/applix /tmp/users 172.19.100.0/255.255.255.0(ro) 172.19.100.0/255.255.255.0(ro) 10.10.156.0/255.255.255.0(rw,no_root_squash) Der jeweilige NFS-Server muss je nach Einsatzgebiet und Anzahl der angeschlossenen Clients einges leisten. Von ihm hängt die Performance der Anwendungen auf den plattenlosen Geräten ab, da alle Zugriffe auf Dateien, Bibliotheken und Programme über ihn abgewickelt werden. Eine leistungsfähige CPU, viel Hauptspeicher, nicht zu langsame Festplatten und eine gute Netzwerkverbindung sind entscheidende Faktoren. Mit der heute üblichen Leistung auch der Einstiegsprozessoren, die man auf vielen Clients finden wird, kann eine 100 Mbit-Leitung durchaus bis an ihre theoretische Transfergrenze von über 10 Mbyte/s ausgelastet werden. Soll es nicht zu unnötigen Wartezeiten auf den Clients kommen, sollte der Server über ein oder mehrere Gigabit-Netzwerkinterfaces verfügen, die idealerweise an der Switch angeschlossen sind, welche die Verteilung an die Endgeräte übernimmt. Damit nicht alle Daten erneut von der Festplatte in den Hauptspeicher und dann über das Netzwerk geschaufelt werden müssen, macht ein großer Arbeitsspeicher Sinn. Durch diesen wird ein Cache häufig angeforderter Festplattenblöcke angelegt, welch dann direkt aus dem Hauptspeicher an den anfragenden Client ausgeliefert werden können. 11.1.5 NFS und (Un)Sicherheit Der Einsatz von NFS bis einschliesslich Version 3 ist unter Sicherheitsaspekten nicht problemfrei. Die Überprüfung ob ein bestimmtes Gerät auf den NFS-Server zugreifen darf oder nicht erfolgt lediglich anhand der IP-Nummer. Es werden keinerlei andere Credentials, wie Benutzerkennung oder Passwort abgefragt. Das vereinfacht den Einsatz von NFS im Umfeld von Diskless Clients oder zur Verteilung gemeinsamer Daten in nur lesbarem Zugriff. Sensible Daten sollten deshalb nicht mittels NFS-Freigaben bis zur Version 3 bereitgestellt werden. Hierfür sollten andere Netzwerkdateisysteme, wie Samba oder das Andrew File System (AFS) eingesetzt werden. Die Weiterentwicklung von NFS in der Version 4 bringt einige Fortschritte in Richtung Authentifizierung und Verschlüsselung der Daten. 162 KAPITEL 11. FILESERVER Auf jeden Fall sollten Administratoren nur NFS-Freigaben in das lokal zu bedienende Sub-Netz einrichten und einen NFS-Server nicht gleichzeitig als Gateway ins Internet oder ähnliches einsetzen. NFS-Zugriffe kann man nur teilweise per Firewall beschränken, da NFS und zusätzliche Dienste we gen der RPC-Architektur nicht mit bestimmten fest vorgegebenen Portnummern verknüpft sind. 11.2 Andrew Filesystem (AFS) 11.2.1 Die Clientseite Das Kürzel AFS steht für Andrew File System oder A distributed File System. AFS wurde ursprünglich von der Carnegie-Mellon University entwickelt. Kommerzialisiert wurde AFS später von Transarc. Diese Firma wurde 1994 von IBM gekauft. IBM ihrerseits stellte im Jahre 2000 AFS als Open Source zur Verfügung. Seit dieser Zeit wird AFS von der OpenAFS Community gepflegt. AFS wird nicht mehr offiziell von IBM weiterentwickelt. Das Andrew File System (AFS) ist ein Netzwerk-Dateisystem, welches Dateien netzwerk- und weltweit zur Verfügung stellen kann. Dieses Dateisystem arbeitet nach dem Client-Server-Prinzip: Daten werden auf dem Fileserver gespeichert, der Zugriff erfolgt von Seiten der Clients. Die AFS-Unterstützung wird über ein Kernelmodul realisiert, welches alle benötigten Bibliotheksfunktionen zur Verfügung stellt. Zu diesem Modul werden Kernelprozesse gestartet, welche die Netzwerkinteraktion realisieren. Ausschnitt der Anzeige aller geladenen Module und AFS-Prozesse: linux:~/test # lsmod Module Size Used by Tainted: PF [...] nls_cp437 4316 1 (autoclean) nls_iso8859-1 2812 1 (autoclean) smbfs 34384 1 (autoclean) snd-pcm-oss 45888 1 (autoclean) snd-mixer-oss 13560 0 (autoclean) [snd-pcm-oss] videodev 5600 0 (autoclean) libafs 442528 2 [...] linux:~/test # ps aux | grep afs root 2001 0.0 0.0 0 0 ? SW Aug11 0:08 [afs_rxlistener] root 2003 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_callback] root 2005 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_rxevent] root 2007 0.0 0.0 0 0 ? SW Aug11 0:00 [afsd] root 2009 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_checkserver] root 2011 0.0 0.0 0 0 ? SW Aug11 0:01 [afs_background] root 2013 0.0 0.0 0 0 ? SW Aug11 0:01 [afs_background] root 2015 0.0 0.0 0 0 ? SW Aug11 0:00 [afs_cachetrim] AFS besitzt gegenüber anderen verteilten Dateisystem wie z.B. Samba oder NFS einige Vorteile. Es arbeitet plattformunabhänig und verwendet zur Beschleunigung des Zugriffs auf jedem Client ein Cache von bis zu 2 GByte. Dieser dient zur Entlastung des Netzwerkes, zur Beschleunigung von Zugriffen und zur Überbrückung von Schwankungen, da AFS auf die Verwendung in Wide Area Networks angelegt ist. Für eine grössere Ausfallsicherheit können Volumes über mehrere Fileserver repliziert werden. Der Integrationsaufwand in das jeweilige Betriebssystem fällt jedoch höher aus, als für die meisten bereits genannten Filesysteme. Es existieren Implementationen für Win- 11.2. ANDREW FILESYSTEM (AFS) 163 dows1 , MacOS X und diverse UNIXe inklusive Linux. AFS kennt einen weltweit eindeutigen Namensraum. Egal wo und an welcher Maschine ein Benutzer arbeitet, der Pfad für einen Benutzer stellt sich immer identisch dar. Der Pfadname beginnt mit /afs (dem sogenannten Top Level). Auf der nächsten Hierarchieebene (Second Level) kommt der sogenannte Cell-Name. Die Zellennamen für bereits bestehende AFS-Zellen finden sich auf: www.central.org/dl/cellservdb/CellServDB. Für die darin enthaltenen Unterverzeichnisse darunter existieren ebenfalls Konventionen, die eingehalten werden sollten. vgl. hierzu Tabelle 11.2.1 auf S. 163 Name common public service sys type usr wsadmin Beschreibung Systemunabhängige Daten Öffentliche Daten Koordination und Konfiguration der Zelle Systemspezifische Daten z.B. i586 linux Home-Verzeichnisse für Benutzer Konfiguration von Clients Jedem Benutzer kann ein eigenes Volume zugeordnet werden. Sie bilden die Basis des ganzen Konzeptes, ihre Lage ist für den Client völlig transparent. Die Volumes können während des Betriebes von Fileserver zu Filserver verschoben werden. Auf diesem Volume wird ein Quota definiert. AFS implementiert eine ausgefeiltere Kontrolle über die Zugriffsberechtigungen mit Access Control Lists (ACLs), die anstelle der Unix-Rechte-Bits auf Verzeichnisebene zum Einsatz kommen. Jeder Benutzer kann eigene Gruppen erzeugen und verwalten. Wenn ein normaler Benutzer ohne Systemrechte eine Gruppe erzeugen will, muss er als Präfix seinen eigenen Namen verwenden. Dieses kann so aussehen: user:group Ausserdem sind die folgenden drei SystemGruppen schon definiert: system:anyuser, system:authuser und system:administrators, diese Gruppen sind in allen AFS Systemen vorhanden. system:anyuser sind alle Benutzer (mit oder ohne gültigem Token), system:authuser alle Benutzer mit gültigem Token und system:administrators Benutzer mit Administrator-Privilegien. Eine weitere Eigenschaft von AFS ist, dass es einen eigenen Login für die Freigabe seines Inhaltes benötigt. NFS in den Versionen 2 und 3 arbeitet mit einer IP-basierten Freigabe, die wenig Einschränkungen gegen geplanten Missbrauch bietet. Durch die Verwendung von Kerberos 4 bzw. 5 Authentifizierung kann es deshalb bedenkenloser als andere Netzwerkdateisysteme zur weltweiten Verteilung eingesetzt werden. Kommando kpasswd klog tokens pts fs Beschreibung wird benutzt um das AFS-Passwort zu ändern Erwerben eines Tokens Überblick der gültigen Tokens kann Benutzer und Gruppen anzeigen und verwalten kann ACLs und Quotas anzeigen/verwalten Tabelle 11.1: Einige wichtige AFS-Kommandos Mit der Authentifizierung gegenüber AFS, beim Login über PAM oder durch das Kommando klog <afs-username> erhält der angemeldete Benutzer ein Token. Dieses Token gestattet den Zugrif auf das AFS-Filesystem. Das Token hat aber nur eine begrenzte Gültigkeitsdauer. Nach Ablauf der Gültigkeit ist der Zugrif auf die AFS-Dateien wieder gesperrt. 1 für die “Consumerwindows” - Spielkonsolen Win95/98/ME - jedoch nur der Client 164 KAPITEL 11. FILESERVER Mit dem Befehl tokens kann man anschauen, welche Token gerade gehalten werden und wie lange die einzelnen Token noch gültig sind. Die Syntax der AFS-Kommandos ist etwas ungewohnt, da im Gegensatz zu den StandardUNIX Kommandos die AFS-Kommandos nicht nur einem Zweck dienen, sondern mehrere Kommandos zu sogenannten Command Suites zusammenfassen. Die Syntax ist bei allen AFS Kommandos identisch: command suite operation code -switch <value> -flag Kommando fs help fs lq <dir> fs la <dir> fs sa <dir> <user> <rights> fs q Beschreibung erklärt alle zur Verfügung stehenden Optionen zeigt definiertes Quota für ein Verzeichnis an listet die gesetzten Rechte setzt Rechte für ein Verzeichnis Prozentangabe der Quotaauslastung Tabelle 11.2: Setzen und Ansehen der Zugriffsrechte Zur Anzeige der Rechte auf ein AFS-Verzeichnis (nur auf diese können AFS-Rechte gesetzt werden, auf einzelne Dateien nicht) verwendet man folgendes Kommando: dirk@lsfks02:/afs/.uni-freiburg.de/www/ks/htdocs/systeme> fs la Access list for . is Normal rights: webadmins rlidwka system:administrators rlidwka www rl www.ks rl dsuchod rlidwka Die Ausgabe zeigt, dass die Benutzer-IDs der eingeloggten Person an der Maschine nicht zwingend mit der AFS-Benutzer-ID übereinstimmen müssen. An der Linux-Maschine ist dirk eingeloggt, mit dem Kommando klog dsuchod und anschliessender Passwort-Eingabe hat sich der angemeldete Benutzer ein AFS-Token für den Zugriff auf die dsuchod freigeschalteten AFS-Bereiche geholt. Durch Eingabe des Kommandos fs quota oder kürzer fs q im AFS-Baum bekommt man die Meldung, wieviel Prozent des eigenen Quotas aufgebraucht sind: dirk@login02:/afs/.uni-freiburg.de/www/ks/htdocs/> fs q 74% of quota used. Eine ausführlichere Information mit Angabe des zur Verfügung stehenden und verbrauchten Speicherplatzes bekommt man mit: dirk@login02:/afs/.uni-freiburg.de/www/ks/htdocs/> fs lq Volume Name Quota Used %Used Partition www.ks 400000 295334 74% 73% Die Zugriffsberechtigungen von AFS beziehen sich immer auf ein ganzes Verzeichnis und alle darin enthaltenen Dateien. Sie beziehen sich nicht automatisch auf enthaltene Unterverzeichnisse. Wenn die Zugriffsberechtigung für eine einzelne Datei geändert werden soll, muss diese ein anderes Verzeichnis mit den gewünschten Zugriffsrechten verschoben werden. Die Zugriffsberechtigung wird dabei vom übergordneten Verzeichnis geerbt. AFS definiert insgesammt sieben Rechtearten, dabei beziehen sich vier Zugriffsrechte auf das Verzeichnis. Drei weitere Berechtigungen beziehen sich auf die Dateien innerhalb des Verzeichnisses 11.2. ANDREW FILESYSTEM (AFS) Kürzel AFS-Recht a administer d delete i insert l lookup r read w k write lock 165 Beschreibung die ACLs ändern Dateien und Verzeichnisse löschen oder verschieben Neue Dateien und Verzeichnisse anlegen Inhalt des Verzeichnis kann aufgelistet werden und ein Wechsel in dieses Verzeichnis ist erlaubt Inhalt der Dateien lesen. Dazu gehört z.B. auch ls -l Ändern von Dateien Ermöglicht das Ausführen von Programmen die über Systemcalls Dateien sperren (locks) Tabelle 11.3: AFS Rechteschema Beim Setzen des Rechtelevels lookup kann in das Verzeichnis gewechselt werden. Der Inhalt der Dateien kann nur dann auch gelesen werden, wenn ebenfalls die Berechtigung read zur Verfügung steht. Die wichtigsten Berechtigungen lassen sich zusammenfassen, wie in der Tabelle zur AFS Rechtegruppierung gezeigt. Zusammenfassung all none read write Beschreibung alle Berechtigungen (rlidwka) keine Berechtigung nur lesen (rl) lesen und schreiben (rlidwk), d.h. alle ausser a Tabelle 11.4: AFS Rechtegruppierung Ein nettes Feature ist, dass Rechteinhaber im AFS selbst Verzeichnisse für andere Benutzer bzw. Gruppen freigeben können. Hierzu dient zuerst einmal das Kommando pts. pts creategroup dsuchod:systeme group dsuchod:systeme2 has id -754 pts adduser user01 dsuchod:systeme fs sa testdir dsuchod:systeme rliwka Das Ergebnis des Gruppenanlegens ist eingerückt dargestellt. Anschliessend kann ein User (hier: user01) oder mehrere dieser Gruppe hinzugefügt werden. Mit dem AFS-Kommando fs sa testdir dsuchod:systeme rliwka wird dann ein Rechtemuster auf das Verzeichnis testdir für die Gruppe dsuchod:systeme eingetragen. Dieses Kommando muss entsprechend für alle gewünschten Verzeichnisse wiederholt werden. Dabei sollte man bedenken, dass auch übergeordnete Verzeichnisse zumindest ein Lookup-Recht für die Gruppe bekommen sollten. Das Anzeigen der Rechte im Verzeichnis testdir liefert dann folgendes: dirk@linux02:/afs/.uni-freiburg.de/www/ks/htdocs/systeme> fs la Access list for . is Normal rights: dsuchod:systeme rliwka 166 KAPITEL 11. FILESERVER webadmins rlidwka system:administrators rlidwka www rl www.ks rl dsuchod rlidwka 11.3 File Transfer Protocol 11.3.1 Dateiarchiv - FTP-Server Eine der ältesten Internet-Anwendungen ist der Transport von Dateien. Hierfür wurde ein eigenes Protokoll geschaffen. FTP-Server haben heutzutage die Aufgabe große Datenmengen, meistens Softwarebestände einfach zugänglich zu machen. Meistens wird unter Linux der proftpd eingesetzt. Dieser wird über die Datei /etc/proftpd.conf eingerichtet. Der FTP-Server kann als standalone Prozess immer im Hintergrund laufen oder über den Internet-Superdämon inetd oder xinetd bei Bedarf gestartet werden. Ersteres bedeutet höheren Speicherverbrauch, die zweite Lösung benötigt durch den Start mehr Resourcen und braucht etwas längere Antwortzeiten. 11.3.2 FTP-Clients Nach dem Einloggen befindet man sich auf der Kommandoebene von FTP. Hier steht nicht der gesamte UNIX-Befehlswortschatz, sondern nur einige Befehle zur Dateiverwaltung und zum Datentransport zur Verfügung. Im folgenden sei mit Arbeitsrechner der Rechner gemeint, auf dem FTP gestartet wurde, und Zielrechner sei der Rechner, mit dem man per FTP die Verbindung hergestellt hat. 11.4 Das Minimal-FTP (TFTP) Das Trivial File Transfer Protocol (TFTP)2 dient in erster Linie zur Übertragung von zu bootenden Netzkernels3 oder eines PXE-Bootimages4 für spezielle Programme zu einem sehr frühen Zeitpunkt des Rechnerstarts. Das Protokoll wird zu Beginn des Bootvorganges ausgeführt und muss meistens neben der BOOTP-Implentation auf einem 16 kByte bzw. 32 kByte EPROM Platz finden. Deshalb ist es auf geringen Codeumfang optimiert. tftp, die Client-Applikation, braucht man inzwischen häufiger mal wieder auf seiner Maschine, da viele Embedded Devices einen eingebauten TFTP-Server zum Update ihres Flash-ROMs haben. Es lässt sich ählich wie ftp interaktiv bedienen, wenn auch der Funktionsumfang vorgebenermassen ziemlich eingeschränkt ist. 2 TFTP wird in den folgenden RFCs beschrieben: • RFC1350 : ”The TFTP Protocol (REVISION 2)”, Juli 1992 • RFC2090 : ”TFTP Multicast Option”, Februar 1997 • RFC2347 : ”TFTP Option Extension”, Mai 1998 • RFC2348 : ”TFTP Blocksize Option”, Mai 1998 • RFC2349 : ”TFTP Timeout Interval and Transfer Size Options”, Mai 1998 3 Welche Optionen dieser enthalten muss, welche Anpassungen notwendig sind und wie man ihn mit einer entsprechenden Bootsignatur versieht, wird in den folgenden Abschnitten erklärt 4 Die notwendigen Erweiterungen von TFTP im Zusammenhang mit PXE finden sich im RFC2349 11.4. DAS MINIMAL-FTP (TFTP) Kommando cd Verzeichnis mkdir Verzeichnis rmdir Verzeichnis lcd Verzeichnis dir ldir !Kommando put Dateiname mput Dateiname(n) get Dateiname mget Dateiname(n) ascii bin ? oder help quit Funktion Verzeichnisse wechseln Verzeichnisse anlegen Verzeichnisse löschen auf dem Zielrechner Verzeichnis auf Arbeitsrechner wechseln zeigt das Directory des Zielrechners an zeigt das Directory des Arbeitsrechners an aktiviert eine Shell auf dem Arbeitsrechner und führt Kommando aus kopiert Dateiname auf den Zielrechner wie put, nur sind hier die Wildcards ** und ? erlaubt kopiert Dateiname vom Zielrechner auf den Arbeitsrechner entspricht get mit Platzhaltern schaltet auf den für den Transport von ASCII-Dateien notwendigen ASCII-Modus um, Voreinstellung von MickeyFTP schaltet auf den für den Transport von binären Daten notwendigen Binärmodus um zeigt eine Liste der zur Verfügung stehenden Befehle an beendet FTP Tabelle 11.5: Einige wichtige FTP-Kommandos 167 168 KAPITEL 11. FILESERVER In aktuellen Linux-Distributionen stehen oft mehrere Implementierungen zur Auswahl. Der in.tftpd ist die klassische Version, der atftpd kann mehr und kommt besser mit PXE klar. Die optimale Konfiguration in der jeweiligen Umgebung bekommt man wohl am besten durch Tests heraus. Es kann jedoch immer nur ein Dienst gleichzeitig auf einem Port betrieben werden. Der TFTP-Standard-Port ist UDP 69. TFTP bietet keinen Schutz durch Passwortauthentifizierung und sollte deshalb mit Vorsicht, d.h. mindestens durch Beschränkung des Hauptverzeichnisses auf den benötigten Bereich, aufgesetzt werden. Dazu kann durch den (x)inetd ein TFTP-Root angegeben werden, was einen Zugriff auf höhere Verzeichnis-Ebenen des Servers verhindert. Zur Illustration dienen die nachfolgenden Ausschnitte aus den jeweiligen Konfigurationsdateien. Der folgende Ausschnitt zeigt ein Teil der /etc/inetd.conf. [...] # # Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers". # tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /boot bootps dgram udp wait root /usr/sbin/bootpd bootpd -c /nfsroot # [...] Oder: (Ausschnitt der /etc/xinetd.conf) [...] # disabled = bootps # disabled = tftp [...] service tftp { socket_type = dgram protocol = udp wait = yes user = nobody only_from = 172.16.0.0/16 10.0.0.0/8 server = /usr/sbin/in.tftpd server_args = /nfsroot } Eine moderne Implementation von TFTP ist der atftpd, welcher auch im StandaloneBetrieb eingesetzt werden kann. Die Einstellungen erfolgen in den neueren Linux-Distributionen mittels Sysconfig-Datei: /etc/sysconfig/atftpd. Hier entnimmt das Runlevel-Skript üblicherweise die Startoptionen. Der erfolgreiche Start des TFTP-Servers (/etc/init.d/atftpd start) zeigt sich im System-Logfile auf diese Weise: Oct 6 21:50:39 hermes atftpd[25183]: Advanced Trivial FTP server started (0.7) ... Oct 6 21:55:12 hermes atftpd[25184]: Serving /nfsroot/10.0/boot/vmlinuz to \ 10.20.0.1:41470 Angenommen, das Kernel-Image liegt im Verzeichnis /nfsroot/10.0/boot und trägt den Namen vmlinuz. Dann könnte der Test auf ein funktionierendes TFTP so aussehen: 11.5. WEITERE FILESERVER-KONZEPTE 169 rechner02:~ # atftp bootserver.mydomain.site tftp> get /nfsroot/10.0/boot/vmlinuz tftp> quit rechner02:~ # ls -lha vmlinuz -rw-r--r-1 root root 1.5M Oct 6 17:38 vmlinuz Liegt dann der Kernel in der richtigen Größe in dem Verzeichnis, aus dem man den TFTPClient heraus gestartet hat, ging alles glatt. Der Eintrag im Logfile sieht dann wie oben gezeigt aus. 11.5 Weitere Fileserver-Konzepte Die Idee, Festplattenkapazitäten zu zentralisieren und einer ganzen Reihe verschiedener Maschinen übers ein Netzwerk zu Verfügung zu stellen, existiert schon lange. Im kommerziellen Umfeld haben sich neben den Lösungen mit sogenannten Network Attached Storage (NAS), die dateibasierte Dienste wie NFS oder SMB bereistellen, Storage Area Networks (SAN) etabliert, die meistens auf einer eigenen vom klassischen LAN unabhängigen Fibre-Channel Fabric basieren. Die Preise der einzelnen Komponenten liegen dabei weit über dem Gewohnten im privaten Bereich. Für den Anschluss von preiswerteren und leistungsärmeren Endgeräten versucht die Industrie den iSCSI-Standard zu verbreiten. Linux-Maschinen können iSCSI benutzen, da der Kernel die notwendige Treiberunterstützung mitbringt. Der Overhead ist für den einfachen Standardarbeitsplatz jedoch immer noch sehr hoch, weshalb sich die Verbreitung noch sehr in Grenzen hält. Die Abbildung zeigt, dass Dateien oder Blöcke auf Server Anwendung Netzwerk ftp, scp, http VFS Client Anwendung VFS LUFS Dateisystem Blockgerät NFS, SMB iSCSI, AoE, NBD Dateisystem Blockgerät Abbildung 11.1: Arbeitsweise von Blockgeräten und Dateisystemen verschiedenen Ebenen ausgetauscht werden können. Es wird hier nicht berücksichtigt wo Server und Client letztendlich implementiert sind, sondern auf welcher Ebene sie die Daten interpretieren. Das Linux Userland Filesystem (LUFS) spielt eine Sonderrolle - es kann beispielsweise die Dateien eines FTP-Servers als Dateisystem einhängen. Dieser durchaus sinnvolle Ansatz lässt sich mit einigen Einschränkungen auch weitaus günstiger realisieren. Parallel zu den kommerziellen Implementierungen von SANs haben sich Kernel-Entwickler darangemacht, Ähnliches auch für Linux zu implementieren. Seit vier Jahren liegt der Code für das Network Block Device dem Mainstream-Kernel bei. Ausgehend von diesem hat es weitere Entwicklungen auch für durchaus besondere Anforderungen gegeben. 170 KAPITEL 11. FILESERVER 11.6 Network Block Devices Netzwerkblockgeräte und Netzwerkdateisysteme unterscheiden sich deutlich voneinander, selbst wenn der Einsatzzweck am Ende recht ähnlich sein kann. Dateisysteme kümmern sich um den Zugriff auf Dateien - Blockgeräte abstrahieren in der Regel Hardware (z.B. Festplatten) und erlauben den Datenaustausch in Blöcken. Eine Verbindung zwischen beiden ergibt sich, wenn gewöhnliche Dateisysteme auf blockbasierte Geräte aufgebracht5 werden, um die Dateien in Form von Blöcken festzuhalten. Ein modernes Betriebssystem steigert die Performance, indem es Blocktransfers zwischenspeichert, d.h. Blöcke werden nicht sofort auf Platte geschrieben, sondern zuerst noch im Speicher festgehalten. In dem sich ein Administrator auf ein Netzwerkdateisystem festlegt, bestimmt er die erlaubten Dateienarten, -größen und Zugriffssteuerungen. So kennt beispielsweise Samba in der Default-Konfiguration keine speziellen Unix-Dateien wie Sockets und Named Pipes, welches einige Applikationen und grafische Linux-Desktops stolpern lässt. Blockdevices erlauben prinzipiell den Einsatz beliebiger blockbasierter Dateisysteme, völlig unabhängig davon, ob sie lokal eingebunden werden oder per Netzwerk zur Verfügung stehen. Das erweitert die Auswahl ganz erheblich und erlaubt es speziellen Anforderungen, wie Kompression der Daten, zu berücksichtigen. Netzwerkblockgeräte lassen sich wie Netzwerkdateisysteme sowohl nur lesbar als auch schreibbar exportieren. Der wesentliche Unterschied ergibt beim gemeinsamen Schreiben auf eine Ressource. Netzwerkdateisysteme stellen hier beispielsweise Locking-Mechanismen bereit oder koordinieren Dateizugriffe so, dass keine Daten beschädigt werden. Netzwerkblockgeräte betreiben deutlich weniger Aufwand, d.h. ein Block wird gelesen oder geschrieben. Sicherheitsmechanismen beschränken sich darauf, dass Blocktransfers atomar durchgeführt werden. Blockgeräte interessieren sich insbesondere nicht dafür, ob die Blöcke mit einem Dateisystem in Verbindung stehen, d.h. sie haben keine Ahnung von der darüberliegenden Datenschicht und ihrer Organisation, was der verteilten Nutzung eines Netzwerkblockgeräts zusammen mit einem gewöhnlichen blockbasierten Dateisystem einige Schwierigkeiten bereit. Würden mehrere Clients gemeinsam ein Netzwerkblockgerät ausgestattet mit einem Dateisystem beschreiben, so gäbe es keine Instanz, die den verteilten Zugriff regelt. Die Dateisysteme, die letztendlich ein gemeinsames Blockgerät benutzten, wüssten nichts von ihrer gegenseitigen Existenz und keines davon würde es ”begreifen” bzw. berücksichtigen, dass sich Blöcke plötzlich wie von Zauberhand verändern. Durch lokales Caching (und damit noch weniger Synchronisation) ist dann das Wirr-Warr perfekt und die Dateisysteme auf den unterschiedlichen Clients sehen bald nur noch uninterpretierbaren Müll, welches in den meisten Fällen fatale Auswirkungen haben dürfte. Dieses Problem spielt jedoch für spezielle Szenarien, wie beispielsweise den Betrieb von Linux Diskless Clients nur eine untergeordnete Rolle. Bei Netzwerkdateisystemen werden viele dieser Probleme vom Kernel abgenommen. Die Server für die ”einfachen” Netzwerkdateisysteme, wie NFS oder Samba operieren direkt auf den normalen Verzeichnissen, wie sie an irgendeiner Stelle im Serverdateisystem eingehängt wurden. Damit kann ein und dasselbe Unterverzeichnis in verschiedenen Arten über das Netzwerk exportiert werden. Oft findet man diese Anwendung bei der Bereitstellung von Home-Verzeichnissen für Windows- und Unix-Clients. Das hat den wesentlichen Vorteil, dass Schreibvorgänge sowohl auf dem Server als auch unterschiedlichen Clients transparent sichtbar werden. So kann der Admin auf dem Server beispielsweise ein Software-Update 5 Dieser Vorgang wird gemeinhin als ”formatieren” (einer Festplatte oder Partition, ...) bezeichnet 11.7. NBDS IM EINSATZ 171 einspielen, welches sich recht schnell auf alle angeschlossenen Clients auswirkt. 11.7 NBDs im Einsatz Zu den ältesten netzwerktransparenten Blockgeräten zählt das Network Block Device NBD, welches seit dem späten 2.1er Kernel in den Code-Baum aufgenommen wurde. In den modularen Kernels der meisten Mainstream-Distributionen ist NBD deshalb üblicherweise als Modul enthalten. Es lässt sich einfach mit modprobe nbd laden. Es sollte keine Fehlermeldung erscheinen, andernfalls ist es nicht korrekt installiert. Die notwendigen Userspace-Tools liefern die meisten Distributionen als eigenes Paket mit. hermes:~ # modprobe nbd hermes:~ # which nbd-server /usr/bin/nbd-server hermes:~ # rpm -q nbd nbd-2.7.4-2 11.7.1 Erste Versuche mit NBD Um Netzwerkprobleme auszuschliessen, führt man Tests zuerst am besten auf derselben Maschine durch. Am einfachsten operiert man mit einer weiteren Partition auf der nicht das Root-Filesystem des Servers liegt. Hat man diese nicht zur Verfügung kann man alternativ eine Container-Datei anlegen und diese mit einem Dateisystem der Wahl, welches vom Serverkernel unterstützt wird, formatieren. Erfolgreich getestet wurden an dieser Stelle die Dateisysteme ReiserFS, ext2 und XFS. Jedes Formatwerkzeug weist darauf hin, dass es sich bei der Datei nicht um ein Blockgerät handelt, was aber ohne Folgen ignoriert werden kann. hermes:~ # mkdir /exports hermes:~ # dd if=/dev/zero of=/exports/nbd-export bs=1024 count=100000 100000+0 Datensätze ein 100000+0 Datensätze aus 102400000 bytes (102 MB) copied, 0,987222 seconds, 84 MB/s hermes:~ # mke2fs nbd-export mke2fs 1.38 (30-Jun-2005) /exports/nbd-export ist kein spezielles Block-Gerät. Trotzdem fortsetzen? (y,n) y Dateisystem-Label= OS-Typ: Linux Blockgröße=1024 (log=0) [ ... ] hermes:~ # nbd-server 5000 /exports/nbd-export hermes:~ # nbd-client 127.0.0.1 5000 /dev/nbd0 Negotiation: ..size = 100000KB bs=1024, sz=100000 hermes:~ # mount /dev/nbd0 /mnt hermes:~ # ls /mnt . .. lost+found hermes:~ # df Dateisystem 1K-Blöcke Benutzt Verfügbar Ben% Eingehängt auf [ ... ] /dev/nbd0 96828 13 91815 1% /mnt hermes:/ # time dd if=/dev/zero of=/mnt/text count=8192 bs=1024 8192+0 Datensätze ein 8192+0 Datensätze aus 172 KAPITEL 11. FILESERVER 8388608 bytes (8,4 MB) copied, 0,038112 seconds, 220 MB/s real user sys 0m0.046s 0m0.008s 0m0.036s Im Beispiel agiert der NBD-Server auf einer 100 MByte grossen Datei. Er bietet seine Dienste auf Port 5000 an. Die Portnummer kann frei gewählt werden. So lassen sich auch mehrere Server für verschiedenen Container starten. Der NBD-Client setzt das geladene Kernelmodul voraus und benötigt als Parameter beim Aufruf die IP-Adresse und Portnummer des Servers gefolgt vom Namen des lokal anzusprechenden Blockdevices. Zum (Performance-)Vergleich kann man die Datei einfach ”loopback” mounten: hermes:/ # mount -o loop /exports/nbd-export /mnt hermes:/ # time dd if=/dev/zero of=/mnt/text count=8192 bs=1024 8192+0 Datensätze ein 8192+0 Datensätze aus 8388608 bytes (8,4 MB) copied, 0,034517 seconds, 243 MB/s real user sys 0m0.040s 0m0.008s 0m0.024s Der Performance-Verlust, zugegebenermaßen ist die Messmethode eher grob, hält sich bei der Verwendung des Netzwerkblockgerätes in Grenzen. Wenn alles auf einer Maschine geklappt hat, kann man darangehen und auf einer entfernten Maschine das Blockdevice einbinden. Dazu muss im Aufruf lediglich die Localhost-Adresse gegen die IP-Adresse des Servers getauscht werden. Möchte man eine Partition oder ein LVM-Volume an Stelle einer Datei exportieren, tauscht man den Dateinamen gegen den Namen des speziellen Devices aus: linux01:/ # nbd-server 5001 /dev/sda4 Nachdem der Server läuft, kann sich der Client auf diesen mit IP-Adresse und Portnummer verbinden. Die Verbindung wurde erfolgreich initialisiert, wenn nbd-client keine Fehlermeldung ausgibt. Die Verbindung zum Server kann vom Client durch den Aufruf von nbd-client -d /dev/nbd0 gelöst werden. Vorher sollte jedoch das eingehängte Blockdevice ausgemountet werden: linux01:/ # umount /mnt linux01:/ # nbd-client -d /dev/nbd0 NBD ist recht einfach gestrickt: Es überlässt die Integritätsprüfung der übertragenen Daten dem darunterliegenden TCP. 11.7.2 NBD und Filesysteme In der bisher geschilderten Anwendung des Blockdevices gelten die identischen Einschränkungen für eine Festplatte bzw. eine Partition auf dieser: Nur eine Maschine kann gleichzeitig lesend und schreibend darauf zugreifen. Es gibt anders als bei Netzwerkdateisystemen keinen eingebauten Mechanismus der sich um Locking oder den Abgleich der Buffer der verschiedenen Maschinen kümmert. Nun spielt dieses Szenario des gemeinsamen schreibenden Zugriffs in vielen Fällen, wie beispielsweise für das Root-Filesystem von Diskless Clients oder das Bereitstellen eines gemeinsamen Applikationsverzeichnisses keine Rolle. Dann kann man den Blockdevice-Server 11.7. NBDS IM EINSATZ 173 mit der Option ”-r” im nur lesbaren Modus starten: Nun kann kein Client Änderungen am Blockdevice vornehmen. Bei Verwendung dieser Option sind Journaling-Filesysteme ausgeschlossen. Weder ext3, noch ReiserFS oder XFS liessen sich per nur lesbarem Blockdevice erfolgreich mounten. Die Fehlermeldungen fielen dabei je nach Dateisystem unterschiedlich harsch aus: hermes:~ # mount -t reiserfs /dev/nbd0 /mnt Kernel call returned: Connection reset by peerClosing: que, sock, done mount: wrong fs type, bad option, bad superblock on /dev/nbd0, missing codepage or other error In some cases useful info is found in syslog - try dmesg | tail or so hermes:~ # mount -t xfs /dev/nbd0 /mnt/ Kernel call returned: Connection reset by peerClosing: que, sock, done mount: /dev/nbd0: Konnte den Superblock nicht lesen Auch der Einsatz der Mount-Option ”-o ro” brachte keine Entspannung. Die Dateisysteme SquashFS und ext2 hatten jedoch keine Schwierigkeiten. Eine Alternative beschreiben die Autoren mit der Option ”-c”. Dann kann der NBDServer ein Copy-on-Write ausführen. Dazu legt er für jeden Client eine Datei an, in die alle Änderungen geschrieben werden. hermes:~ # nbd-server 5000 /exports/nbd-export -c hermes:~ # nbd-client 127.0.0.1 5000 /dev/nbd0 hermes:~ # mount -t xfs /dev/nbd0 /mnt hermes:~ # ls -al /exports insgesamt 100008 drwxr-xr-x 2 root root 60 2006-04-03 12:39 drwxr-xr-x 23 root root 4096 2006-03-25 21:16 -rw-r--r-1 root root 102400000 2006-04-03 12:33 -rw------1 root root 270336 2006-04-03 12:39 . .. nbd-export nbd-export-127.0.0.1-7812.diff Hier sieht man nun, dass eine separate Datei für die Änderungen angelegt wird. Nach einem Disconnect des Clients gehen diese Änderungen verloren, obwohl die Datei selbst erhalten bleibt. Macht man nun das Experiment das Blockdevice unter einem der JournalingDateisysteme Readonly einzubinden, sieht man, dass trotzdem etwas auf das Device geschrieben wird. Das erklärt die vorher beschriebenen Probleme. Die ”-c” Option wird von den Entwicklern des Network Block Device als nicht besonders performant beschrieben, weshalb sich hier besser clientseite Lösungen, wie UnionFS oder das COW-Modul anbieten. Generell muss auch beim NBD gesagt werden, dass das Sicherheitskonzept alles andere als ausgefeilt ist. Ähnlich zu NFS, jedoch deutlich unflexibler, kann man eine Liste von Rechnern angeben, denen der Zugriff auf das Device gestattet wird. Abhilfe könnten hier verschlüsselte Dateisysteme schaffen. Andernfalls hat man zumindest auf der Ebene der Sicherheit gegenüber einem NFS der Version 2 oder 3 nichts gewonnen. 11.7.3 DNBD - eine spezialisierte Alternative Neben NBD gibt es weitere freie Implementierung eines Netzwerkblockgeräts, wie beispielsweise ENBD, GNBD oder ANBD. Da die jeweiligen Blockgerätetreiber aber (noch) nicht Bestandteil des Kernels sind, sucht man ein installierbares Paket bei vielen Distributionen oft vergeblich. In diesem Fall müssen die Quellen von den unten angegeben Adressen selbst bezogen werden. Für den Mehraufwand bekommt man beispielsweise bei ENBD eine Fehlerbehandlung mit dem automatischen Wiederaufbau einer abgebrochenen Verbindung, der gleichzeitigen Benutzung mehrerer Kanäle und vieles mehr. 174 KAPITEL 11. FILESERVER Für ein recht spezifisches Umfeld, nämlich für den Diskless-Betrieb in Funknetzen, gibt es DNBD, welches hier auftretende Probleme auf besondere Art und Weise handhabt. In einem typischen Funknetz-Szenario assozieren sich Clients mit einem Access Point und benutzen dabei dieselbe Frequenz, was natürlich bedeutet, dass für eine funktionierende Kommunikation nur ein Client zu einem bestimmten Zeitpunkt senden darf. Hinzu kommt die niedrige Bandbreite, die bei den heute verwendeten Technologien, wie dem IEEE 802.11b/a/g Standard, auf 54 Mbit/s begrenzt ist. Manche Hersteller versprechen zwar Datenraten von 108 Mbit/s - bei allen ist der effektive Durchsatz aber meist viel niedriger. Unabhängig von der Datenrate sind aber die Kosten für neue Clients, was die Größe der transferierten Datenmengen betrifft. Verdoppelt man die Anzahl der Clients, so lässt im Durchschnitt in einem bestimmten Zeitintervall nur noch die halbe Datenmenge je Client übertragen. Die Frage ist nun, ob es denn überhaupt möglich und sinnvoll ist, das Konzept festplattenloser Rechner zum Beispiel auf mobile Pools in Funknetzen auszuweiten. Das Problem der begrenzten Bandbreite und schlechten Skalierbarkeit zusammen mit dem Wunsch einer Fehlerbehandlung (z.B. mit Failover auf replizierte Server) und das in unzuverlässigen Netzen mit Paketverlusten, sprechen nicht gerade für einen solchen Einsatz. DNBD versucht deshalb, im Unterschied zu den bisher vorgestellten Netzwerkblockgeräten anfallende Datenmengen so weit wie möglich zu minimieren und dabei die Besonderheiten eines Funknetzes auszunutzen. Zuerst wird für ein vereinfachtes Protokoll auf Locking-Mechanismen verzichtet und nur lesbarer Zugriff erlaubt, was clientseitig beispielweise mit cowloop wieder aufgehoben werden kann. Zweitens werden Blöcke, die von einem Client angefordert werden und schließlich vom Server geliefert werden, von anderen Clients gecachet, falls diese später selbst Bedarf dafür haben sollten. Drittens wird UDP als verbindungsloses Protokoll verwendet und Paketverluste und andere Kommunikationsprobleme werden von DNBD selbst bearbeitet. Jetzt stellt sich nur noch die Frage, wie Blöcke abgefangen und gecachet werden können. Das gemeinsam benutzte Medium bei Funknetzen erlaubt zwar prinzipiell das Mithören der Kommunikation anderer Clients - leider unterstützen aber nicht alle Karten einen so genannten Promiscuous- bzw. Monitor-Modus. Und falls doch, so muss dieser für die jeweiligen Chipsätze meist auf unterschiedliche Art und Weise aktiviert werden. DNBD benutzt deshalb IP-Multicast, um eine Gruppe von Clients gleichzeitig zu adressieren. Eine IP-Multicast-Adresse liegt hier im Netz 224.0.0.0/4 - für Experimente sollte das Netz 239.0.0.0/8 benutzt werden. Bevor bei DNBD ein Client auf ein Netzwerkblockgerät zugreifen kann, versucht er vorhandene Server zu finden, indem er bestimmte Pakete an die gegebene Multicast-Adresse schickt. Die Server beantworten die Anfrage und liefern gleichzeitig Informationen über das vorhandene Blockgerät. Die Clients benutzen diese Daten zu Konfiguration und können fortan Blöcke anfragen. Die komplette Kommunikation funktioniert mit UDP aus mehreren Gründen: Das einfach gestrickte UDP (im Vergleich zu TCP) ist völlig ausreichend um Blöcke anzufordern und bietet die Möglichkeit eigene (meist zeitgesteuerte) Methoden für den Datenfluss etc. zu realisieren; außerdem ist Multicast mit TCP beim Linux-Netzwerkstack nicht implementiert und seine Verwendung wäre überhaupt nicht möglich gewesen. Für eine hohe Verfügbarkeit lassen sich Server zusätzlich replizieren. Neue Server werden von den Clients dabei automatisch gefunden, indem dauernd statistische Daten gesammelt werden, und Server mit niedrigen Antwortzeiten ausgesucht werden. Für den Einsatz von DNBD in kabelgebundenen Netzen wird wegen des Overheads der MulticastKommunikation allerdings noch abgeraten bis DNBD auch Unicast-Kommunikation unterstützt. 11.8. SPEZIELLE BLOCKDEVICE-ERWEITERUNGEN 175 Natürlich werden immer für sinnvolles Caching Lokalitätseigenschaften vorausgesetzt, d.h. in unserem Fall sollten unterschiedliche Clients in einem gewissen Zeitraum auf dieselben Blöcke zugreifen. Dies ist zum Beispiel beim simultanen Start von verschiedenen Diskless Clients in Funknetzen gegeben. Eine weitere Anwendung ist die Bereitstellung von Multimedia-Inhalten in Funknetzen: Mehrere Clients können eine DVD über ein WLAN abspielen, wobei dank des Caches auch Zeitdifferenzen erlaubt sind, ohne dass ein neuer Stream gestartet werden muss. 11.8 Spezielle Blockdevice-Erweiterungen In Umgebungen von Diskless Clients spielt die Beschreibbarkeit des Dateisystems eine besondere Rolle. Einerseits soll das Dateisystem auf dem Server ”sauber” bleiben, d.h. Clients bekommen keinen Zugriff, Systemdateien zu verändern. Andererseits setzen Clients voraus, dass Dateien, die für den Betrieb notwendig sind, angelegt oder verändert werden können, z.B. /etc/resolv.conf. Bei einem nur lesbaren Blockgerät ergibt sich hier eine Möglichkeit, indem es mit cowloop (Copy-on-Write-Loopback Device) schreibbar gemacht wird. Geänderte Blöcke werden getrennt in einem so genannten ”sparse file” aufbewahrt, welches sich wiederum in einer Ramdisk befinden kann. Anders als bei UnionFS, wo selbst bei kleinsten Änderungen an einer Datei diese schon komplett in die beschreibbare Schicht kopiert werden muss, geht cowloop sparsamer mit dem Platz um und vermerkt nur wirklich geänderte Blöcke. Es setzt dafür jedoch ein schreibbares Dateisystem voraus: Ein mit dem RO-Filesystem SquashFS formatiertes Netzwerkblockgerät wird auch durch spezielle Write-Loopback-Devices nicht veränderbar. Ein Nachteil bei dieser Benutzung von Netzwerkblockgeräten ist, dass sich die Clients nicht transparent updaten lassen. Änderungen am Blockdevice auf dem Server erfordern einen Neustart der Clients oder zumindest einen komplizierten Remount Mechanismus. Da Änderungen am System in der Praxis meist nur bei Sicherheitsupdates oder einem Umstieg auf eine neuen Ausgabe der Distribution wirklich notwendig sind, hält sich der Aufwand in Grenzen. Wurde ein Network Block Device wie im letzten Abschnitt beschrieben aufgesetzt, so lässt sich cowloop wie folgt einsetzen: linux01:~ # linux01:~ # /dev/cow/0 linux01:~ # linux01:~ # modprobe cowloop cowdev -a /dev/nbd0 /tmp/nbd.cow mkdir /mnt/nbd-rw && mount /dev/cow/0 /mnt/nbd-rw umount /mnt/nbd-rw && cowdev -d /dev/cow/0 In diesem Beispiel wird ein Netzwerkblockgerät mit der schreibbaren Datei /tmp/nbd.cow verknüpft und das neue Blockgerät dann gemountet. Schreibvorgänge in nbd-rw wirken sich deshalb nicht auf das zu Grunde liegende Netzwerkblockgerät aus. Falls sich cowloop über ein fehlendes /dev/cow/ctl oder /dev/cow/0 beschwert, so hilft linux01:~ # mkdir /dev/cow && mknod /dev/cow/ctl b 241 255 linux01:~ # ln -s /dev/cowloop0 /dev/cow/0 176 KAPITEL 11. FILESERVER Dateisystem copy-on-write Blockgerät Lesen nur lesbares Blockgerät Lesen und Schreiben schreibbare Datei Abbildung 11.2: Das Cowloop-Blockgerät basiert auf einem weiteren Blockgerät und hält geänderte Blöcke in einer Datei fest Kapitel 12 Samba 12.1 Samba - Brücke zwischen Microsoft- und Unix-Welt Für viele gehören Samba und Linux einfach zusammen - der Anteil von Samba an der Popularisierung von Linux ist nicht zu unterschätzen. Samba bildet eine der wichtigsten Brücken zwischen der Linux/Unix und Windowswelt. Dieses beginnt bei einfachen Verzeichnis- und Druckerfreigaben und läßt sich fortsetzen bis zu Single-Password- oder Single-Sign-OnLösungen und komplexen Domaincontroller-Aufgaben, die ein Linux-Rechner übernehmen kann. ”Samba” steht für die freie Implementierung eines Server Message Block Protokollservers. Samba spricht sich einfach besser aus und klingt netter als die Abkürzung des Protokollnamens ”SMB”. Microsoft-Rechner benutzen dieses Protokoll untereinander, um auf Dateien und Drucker über ein Netzwerk zuzugreifen. In dieses Netzwerk können sich auch Linux oder Unixrechner dank Samba einklinken. Sie können dabei dank Samba als Client agieren oder auch tragendere Rollen übernehmen. Samba ist ein Open-Source-Projekt welches im Jahre 1991 von Andrew Tridgell an der Canberra University in Australien gestartet wurde. Entsprechend steht der in C geschriebene Source-Code jedem zur Verfügung. Jeder kann ihn anpassen, untersuchen und testen. Für Administratoren in Firmen und Organisationen das Wichtigste: Samba ist frei. Anders als für jede Microsoft Installation fallen für das Aufsetzen eines Samba-Servers oder die Benutzung der Samba-Dienste unter Linux keinerlei Lizenzgebühren an. 12.1.1 Einsatzgebiete von Samba SMB beschränkt sich nicht auf die Funktion als Netzwerkdateisystem oder Remote-Printer. Allein schon für diese beiden Aufgaben gibt es in der Unixwelt zwei verschiedene Dienste: Beispielsweise LPD für Drucker und NFS für Netzwerkdateisysteme. SMB kann eine ganze Menge mehr: • Das Samba-Paket enthält SMB-Clients, mittels derer Unix-Rechner auf freigegebene Dateien oder Drucker anderer SMB-Server zugreifen können. Ein Linuxclient kann so Druckjobs an einen Windowsdrucker absetzen oder ein gemeinsames Dokumentenverzeichnis von einer Windowsmaschine einbinden. Diese Funktionalität stellt eine Bibliothek zur Verfügung, die von anderen Programmen genutzt werden kann, bsp. dem KDE-Konqueror. Für die Kommandozeile liefert Samba die Tools smbmount, smbclient und mount.cifs mit. • Samba realisiert einige Erweiterungen des SMB-Dateisystems, damit bestimmte UnixDateien auf entfernten SMB-Freigaben abgelegt werden können. 177 178 KAPITEL 12. SAMBA • Samba kann die Aufgaben des Windows-Namens-Dienstes (WINS) übernehmen: Als NetBIOS-Nameserver kann es Namen auf IP-Nummern und umgekehrt abbilden. Zusätzlich unterstützt es NetBIOS-Browsing und Browse-Master-Auswahl. • Samba kann ein Single-Sign-On realisieren: Der Zugriff auf den Linux-Account und die Einbindung des Linux-Homeverzeichnisses unter Windows laufen mit identischen IDs und Passwort. • Samba kann als primärer Domänen-Controller für Windows-Clients eingesetzt werden. • Samba bringt Werkzeuge für entfernte Administrationsaufgaben für Windows-NTund Samba-Server mit. 12.2 Erste Versuche Wenn Samba schon auf der Maschine installiert ist, kann der Anwender schonmal erste Schritte wagen. Wenn nicht, überspringt er diesen Abschnitt und kümmert sich ersteinmal um die Installation. Samba funktioniert in ”beide Richtungen”: Es stellt Client- und Serverfunktionalität bereit. Für viele, die von der Windows-Seite her kommen, ist es bekannt, wie Freigaben unter Windows erfolgen. Man gibt einfach mal ein Unterverzeichnis mit Klicken der rechten Maustaste auf den Ordner frei. Dann definiert man die Einstellungen in der Registerkarte ... Abbildung 12.1: Freigeben eines Verzeichnisses unter WindowsXP und Setzen der Zugriffsrechte 12.2.1 Windows-Server - Linux-Client Diese Freigabe oder ”Share” kann nun von Linux aus eingebunden werden. Hierzu gibts das Kommando smbmount oder sein Nachfolger mount.cifs. Mounts können aus Sicherheitsgründen unter Linux nur vom Benutzer ”root” ausgeführt werden. Jedoch gibt es auch Möglichkeiten dieses normalen Usern zu erlauben. In der Standardinstallation liefert smbmount bei unpriveligiertem Aufruf die Fehlermeldung smbmnt must be installed suid root for direct user mounts (500,500). Dem kann man unter 12.2. ERSTE VERSUCHE 179 Verzicht auf etwas Sicherheit abhelfen: chmod u+s /usr/bin/smbmnt /usr/bin/smbumount. Anschliessend bindet der Aufruf smbmount //10.8.4.204/SharedFiles win -o username=dirk die Windows-Freigabe ”ShraredFiles” an das Unterverzeichnis win. Die Verbindung erfolgt mit der Windows-UserID ”dirk”, das Passwort fragt smbmount dann interaktiv ab. Anschliessend gibt das Kommando mount das eingebundene Verzeichnis in seiner Liste mit an: dirk@linux:~> mount /dev/hdb2 on / type ext3 (rw) proc on /proc type proc (rw) tmpfs on /dev/shm type tmpfs (rw) devpts on /dev/pts type devpts (rw,mode=0620,gid=5) /dev/hdc2 on /home type ext3 (rw) //10.8.4.204/SharedFiles on /home/dirk/win type smbfs (0) Der Inhalt des Verzeichnisses win sind die Dateien, die sich auf der Windows-Maschine im freigegebenen Ordner befinden. Es gibt jedoch einige Einschränkungen: Dateien und Ordner kann der Nutzer wie gewohnt anlegen. Die Dateien gehören immer ihm, das UnixRechtemuster wird nur zum Teil abgebildet. Nicht möglich sind spezielle Dateien, wie Links, Sockets oder Named Pipes. Der Vorteil von Samba: Anders als mit NFS oder Geräten muss kein passender Eintrag in der /etc/fstab stehen, um Benutzern das Einbinden von WindowsFreigaben zu erlauben. Umgekehrt wird der Nutzer das eingebundene ”Share” durch den Befehl smbumount wieder los: smbumount win meldet die Freigabe ab und die Liste des Mount-Kommandos reduziert sich um den entsprechenden Eintrag. Für diese kleinen Experimente ist es nicht notwendig, dass die beiden Samba-Dämonen smbd und nmbd gestartet sind. Mit der Weiterentwicklung von Windows und Samba wird das lange Zeit vorherrschende SMB-Filesystem (smbfs) zunehmend durch das mächtigere CIFS (Common Internet File System) ersetzt. Dieses drückt sich auch im Mount-Kommando für die Client-Seite aus: mount.cifs //10.8.4.204/SharedFiles win -o username=dirk bindet mit identischer Syntax ein Windows-Share an ein Linuxverzeichnis. Bisher ist dieses jedoch nur ”root” vorbehalten oder man räumt auch hier mittels SUID-Bit Usern das Recht ein. Leider fehlt dazu noch ein passendes Pendant zum Ausmounten. Das Eintrag in der Mount-Liste sieht ein wenig anders aus: //10.8.4.204/SharedFiles on /home/dirk/SharedFiles type cifs (rw,mand,nosuid,nodev) Ein weiteres Tool ist smbclient. Es kann neben anderen Funktionen dem Nutzer ein FTPähnliches Interface zum Verbinden auf SMB-Dienste bieten. dirk@linux:~> smbclient -U dsuchod //dsuchod.files.uni-freiburg.de/windows Password: Domain=[PUBLIC] OS=[Unix] Server=[Samba 3.0.9-2.3-SUSE] smb: \> ls . D 0 Mon Sep 26 18:02:51 2005 .. D 0 Sat Sep 24 01:44:53 2005 .AbiSuite D 0 Sat Jun 5 02:41:49 2004 [ ... Haufen weitere versteckte Dateien mit Punkt am Anfang ... ] Bilder D 0 Thu Apr 21 13:32:38 2005 Desktop D 0 Thu Jun 30 22:28:19 2005 Eigene Bilder D 0 Tue Aug 16 11:35:58 2005 Eigene Musik D 0 Wed Sep 8 17:27:06 2004 GNUstep D 0 Thu Jan 8 12:46:33 2004 180 KAPITEL 12. SAMBA IM01OLYM D 0 Mon Nov 17 16:37:14 Mail D 0 Mon Sep 26 18:07:45 OpenOffice.org1.1 D 0 Wed Oct 20 09:44:31 PDFs D 0 Mon Jan 10 19:06:34 PostScripts D 0 Wed Mar 31 13:41:28 Slides D 0 Fri Sep 10 14:28:28 artikel D 0 Wed Dec 22 14:48:45 [ ... Haufen weitere Dateien und Verzeichnisse ... ] 32784 blocks of size 262144. 8028 blocks available smb: \> smb: \> put einstieg.txt putting file einstieg.txt as \einstieg.txt (1488,4 kb/s) (average 1488,5 kb/s) smb: \> get ToDo 2003 2005 2004 2005 2004 2004 2004 Dieses Beispiel benutzt einen Standard-Fileserver auf Samba-Basis. Eine Die Verbindung zu einer Freigabe erfolgt in der bekannten Windows-Syntax: //Rechnername/Freigabe oder //IP-Adresse/Freigabe, wobei einfach die Backslashes in Slashes umgeändert werden. Erstere haben in der Shell eine besondere Bedeutung. Wenn die Verbindung unter einer vorgegebenen UserID erfolgen soll, kann der Anwender diese mit der Option -U mitteilen. Bei der Verbindungsaufnahme fragt dann smbclient nach dem Passwort. Eine Verbindung auf eine Windows-Maschine unterscheidet sich bis auf die Statuszeile nicht: dirk@linux02:~> smbclient -U dirk //10.20.90.60/SharedFiles Password: Domain=[MYLAPTOP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager] smb: \> quit Nach erfolgter Verbindung liefert das Kommanod ls Dateien und Verzeichnisse in der Freigabe. Der Verzeichniswechsel erfolgt wie gewohnt mit cd. Mit put lassen sich Dateien auf das ”Share” hochladen, mit get welche in das lokale Verzeichnis kopieren, von wo aus smbclient gestartet wurde. Am Ende verlässt man die Samba-Shell mit quit. 12.2.2 Linux-Server - Windows-Client Dieser Fall ist der in der Realität sicherlich häufigere: Warum im Serverraum eine Maschine mit aufwändiger grafischer Benutzeroberfläche und nicht zu vernachlässigenden Lizenzkosten stellen, wenn es stabile und günstige Alternativen gibt? Die Serverfunktionalität stellen zwei Hintergrundsdienste, die Dämonen smbd und nmbd bereit. Letzterer kümmert sich dabei um den Windows-Namensdienst (WINS) und muss nicht zwingend laufen. Der Administrator konfiguriert beide Dienste mit der gemeinsamen Datei smb.conf. Diese befindet sich je nach Distribution üblicherweise im Unterverzeichnis /etc/samba. Für einen ersten Test legt der Admin eine Minimalkonfiguration dieser Datei an oder ändert die Vorgabe der liefernden Distribution passend ab. Für erste Versuche soll das Verzeichnis vorher frisch angelegte Verzeichnis /win-export benutzt werden. Auf dieses sollen die beiden Benutzer ”test1” und ”test2” nach Eingabe ihres Passworts zugreifen können. [global] workgroup = SAMBA netbios name = MYSMB os level = 2 unix extensions = Yes encrypt passwords = Yes map to guest = nobody socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY hosts allow = ALL 12.3. WEITERGEHENDE KONFIGURATION 181 log level = 10 [winshare] comment = Testfreigabe fuer Windows-Clients path = /win-export locking = No read only = Yes valid users = test1 test2 create mask = 0600 directory mask = 0750 Nach aussen bietet sich die Freigabe mit dem Namen ”winshare” an. Dieser Name muss in keiner Weise mit dem Verzeichnis, welches exportiert wird, übereinstimmen. Im Übrigen ist die Groß- oder Kleinschreibung in der smb.conf mit Ausnahme der Pfadangaben unter Linux irrelevant. Die beiden Benutzer ”test1” und ”test2” müssen lediglich als System-Accounts existieren. User benötigen für Samba nicht zwingend Linux-Loginrechte oder einen Eintrag in der /etc/shadow. Da Linux und Windows verschiedene Verschlüsselungsverfahren für Passwörter benutzen, muss selbst bei Existenz eines gültigen Linux-Passworts ein neues Windows-Passwort generiert werden. Dieses triggert der Systemadministrator durch: linux:/win-export # smbpasswd -L -a test1 New SMB password: Retype new SMB password: Passwörter, die auf diese Weise generiert wurden, landen in der Datei /etc/samba/smbpasswd. Anschliessend steht der (Neu-)Start des Dienstes durch rcsmb restart oder /etc/rc.d/smb restart an. Anschliessend greift sich der Anwender eine Windowsmaschine, die mit dem gleichen Netzwerk, wie der frisch aufgesetzte Linux-Samba-Server verbunden ist und versucht am besten erstmal durch Eingabe der IP-Nummer die neue Freigabe unter Windows einzubinden. Wenn der Nutzer unter einer anderen UserID an seiner Windows-Maschine angemeldet ist, kann er diesen bei Windows-XP beim Anmelden an die Freigabe wechseln. Auch das Passwort muss nicht mit dem der Windows-Anmeldung übereinstimmen. Soll der Samba-Server automatisch beim Start der Linuxmaschine hochfahren, kann der SuSE-Admin diesen Dienst durch insserv smb,start=3,5; insserv nmb,start=3,5 für die Runlevel 3 und 5 aktivieren. Alternativ können auch Links in den entsprechenden Runlevel-Unterverzeichnissen /etc/init.d/rc3.d und /etc/init.d/ rc5.d angelegt werden. Der Sambaserver sollte dann auch im ”Microsoft Windows-Netzwerk” auftauchen (Abb. xpsambatestnetz). Wenn der Anwender dann auf ”Samba” klickt, sieht er in diesem Netz mindestens den Samba-Server ”Mysmb”. Im Kommentar steht die Versionsbezeichnung von Samba. Wenn da etwas anderes erscheinen soll, fügt der Admin server string = Kommentar mit seinem Kommentar in der [global] Sektion ein. 12.3 Weitergehende Konfiguration Im gezeigten ersten Beispiel bekamen die beiden Benutzer ”test1” und ”test2” ein Verzeichnis auf einer Linux-Maschine nur lesend nach Eingabe ihres Benutzernamens und Passwortes zur Verfügung gestellt. Soll eine Anmeldung für diese Freigabe auch ohne Passwort möglich sein, kann der Admin das Schlüsselwort ”public = Yes” definieren. Dann sollte er jedoch die Option ”valid users” leeroder weglassen. Im Fall von Fehlern und zur Kontrolle des korrekten Starts des Samba-Servers sollte der Admin das Logfile des Dienstes kontrollieren. Standardmäßig wird dieses bei einer SuSE-Distribution unterhalb von /var/log/samba angelegt. Das Logfile des smbd heisst einfach log.smbd, das des nmbd entsprechend. [2004/11/10 16:09:36, 0] smbd/server.c:main(757) smbd version 3.0.4-SUSE started. Copyright Andrew Tridgell and the Samba Team 1992-2004 182 KAPITEL 12. SAMBA Abbildung 12.2: Durch die direkte Eingabe der IP-Nummer umgeht der Anwender eventuelle Probleme bei der Windows-Namensauflösung [2004/11/10 16:09:36, 5] lib/debug.c:debug_dump_status(369) INFO: Current debug levels: all: True/10 tdb: False/0 printdrivers: False/0 lanman: False/0 smb: False/0 rpc_parse: False/0 rpc_srv: False/0 rpc_cli: False/0 passdb: False/0 sam: False/0 auth: False/0 winbind: False/0 vfs: False/0 idmap: False/0 quota: False/0 acls: False/0 doing parameter veto files = /*.eml/*.nws/riched20.dll/*.{*}/ [2004/11/10 16:09:36, 2] param/loadparm.c:do_section(3396) Processing section "[winshare]" doing parameter comment = Testfreigabe fuer Windows-Clients doing parameter path = /win-export doing parameter locking = No doing parameter read only = Yes 12.3. WEITERGEHENDE KONFIGURATION 183 doing parameter valid users = test1 test2 doing parameter create mask = 0600 doing parameter directory mask = 0750 [2004/11/10 16:09:36, 4] param/loadparm.c:lp_load(3913) pm_process() returned Yes [2004/11/10 16:09:36, 7] param/loadparm.c:lp_servicenumber(4026) lp_servicenumber: couldn’t find homes [2004/11/10 16:09:36, 3] param/loadparm.c:lp_add_ipc(2363) adding IPC service [2004/11/10 16:09:36, 3] param/loadparm.c:lp_add_ipc(2363) adding IPC service [ ... ] Mit dem im Beispiel eingestellten Loglevel von 10 ist der Dienst ziemlich geschwätzig. Das macht bei funktionierendem Normalbetrieb weniger Sinn. Je nach Sicherheits- und Informationsbedürfnis genügt ein Loglevel von 0 bis 3 für die wichtigsten Ereignisse. Meldungen über Fehler in der Konfigurationsdatei landen in jedem Fall hier. Eine weitere Möglichkeit der Überprüfung des Server-Zustandes bietet das Kommando smbstatus. Einfach aufgerufen liefert es eine Liste der aktuell gültigen Verbindungen: linux:~ # smbstatus Samba version 3.0.9-SUSE PID Username Group Machine ------------------------------------------------------------------30208 test2 testgroup zxs (10.8.4.160) Service pid machine Connected at ------------------------------------------------------winshare 30208 zxs Wed Sep 21 18:33:58 2004 No locked files 12.3.1 Homeverzeichnisse für Windows und Linux Sollen Benutzer ein gemeinsames Homeverzeichnis unter Linux und Windows benutzen, erlaubt dieses die spezielle Sektion [homes] in der Konfigurationsdatei /etc/samba/smb.conf: [homes] comment = Home Directories valid users = %S browseable = Yes read only = No create mask = 0640 directory mask = 0750 Möchte man einer Benutzergruppe das gemeinsame Zugriffsrecht auf eine Freigabe einräumen, muss diese vorher in /etc/group definiert sein. [gruppenfreigabe] comment = Beispiel einer Gruppenfreigabe read only = No browseable = No valid users = @testgroup force group = testgroup path = /gruppenfreigabe create mask = 0770 force create mode = 0770 directory mask = 0770 force directory mode = 0770 184 KAPITEL 12. SAMBA In diesem Beispiel dürfen alle Mitglieder der Gruppe ”testgroup” sich mit dem Share verbinden. Alle Dateien und Verzeichnisse werden so angelegt, dass nur Gruppenmitglieder sie ändern dürfen. Die Maske 0770 erzwingt Gruppenschreibrechte und verhindert gleichzeitig, dass Dateien nur vom Erzeuger selbst geändert werden dürfen. Die Option browseable = No sorgt dafür, dass die Freigabe nicht in der Netzwerkumgebung auftaucht. 12.3.2 Druckerfreigaben Bis zu diesem Punkt wurden verschiedene Arten der Verzeichnisfreigaben diskutiert. Das SMB-Protokoll erlaubt es aber auch, Drucker im Netz gemeinsam zu benutzen. Hierzu gibt es die Sektion [printers] in der /etc/samba/smb.conf. [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No writable = yes public = yes Viele der Optionen sind nun schon von den anderen Beispielen bekannt. Die Pfadangabe dient nun nicht als Freigabe, sondern als Spoolverzeichnis. In diesem landen die abzuarbeitenden Jobs der berechtigten Benutzer. In den Globaleinstellungen der smb.conf sind zwei weitere Variablen zu definieren. Der Admin legt fest, welches Drucksystem Verwendung findet. Auf modernen Distributionen greift er üblicherweise auf das Common Unix Printer System (CUPS) zurück: printing = CUPS printcap name = CUPS Der Dienst CUPS muss vor Samba gestartet werden. Dieses überprüft insserv beim Anlegen der Runlevel-Links. Die Installation von Druckern unter Linux erledigt der Admin am einfachsten mit den mitgelieferten Konfigurationswerkzeugen, beispielsweise YaST2 von SuSE. Nach einem Neustart von Samba stehen die frisch definierten Druckerwarteschlangen auch Windows-Clients zur Verfügung. 12.3.3 Nachrichtendienst auf Linux-Clients Der Windows-Nachrichtendienst ist bei Anwendern, die mit ihrer Windows-Maschine direkt ins Internet gehen vielleicht etwas in Verruf geraten. Vielfach meldeten sich unaufgefordert explizite Damen, um ihre Services irgendwo im Netz anzubieten. Im abgeschlossenen privaten Netz kann der Dienst jedoch ganz nützlich sein. Damit auch ein LinuxClient Windows-Nachrichten empfangen kann, muss ein Samba laufen. Dieses wurde in der [global]-Sektion um den Eintrag message command = sh -c ‘/opt/kde3/bin/kpopup ’’%s’’ ’’%f’’‘ erweitert. Das Programm kpopup ist meistens ein eigenes Paket, welches unter Umständen nachinstalliert werden muss. Je nach Distribution können Pfad und Paketname variieren. 12.4 Die zentrale Samba-Konfigurationsdatei In den bisherigen Abschnitten kamen schon Beispiele für mögliche Varianten der smb.conf vor. Da es eine ziemlich große Zahl an Konfigurationsparametern, sollen die wichtigsten hier zusammengestellt werden. Eine gute Hilfe ist auch die Manpage (man smb.conf). 12.4. DIE ZENTRALE SAMBA-KONFIGURATIONSDATEI 12.4.1 185 Struktur Die Datei smb.conf wird durch Konfigurationsblöcke strukturiert. Der Block [global] - er steht am besten immer am Anfang der Datei - ist immer vorhanden und definiert generelle Servereinstellungen. Daneben existiert eine weitere Gruppe von optionalen Blöcken, deren Namen fest vorgegeben sind. Der Block [homes] definiert die Freigabe der Homeverzeichnisse der auf einem Linuxsystem eingetragenen Benutzer. So können Admins dafür sorgen, dass ihre Nutzer sowohl unter Linux als auch unter Windows auf das selbe Homeverzeichnis zugreifen können. Mit [printers] erfolgt die Freigabe der auf einem Linuxrechner verfügbaren Drucker. [print$] ist eine spezielle Freigabe, die es Administratoren erlaubt, Druckertreiber bereit zu stellen. So müssen diese dann nicht mittels CD eingespielt werden, wenn ein Windows-Client auf einen Linuxdrucker zugreift für den dieser noch keinen Treiber installiert hat. Die Sektion [netlogon] spielt dann eine Rolle, wenn Samba über Datei- und Druckerfreigaben hinaus reichende Aufgaben übernehmen soll. Zusätzlich kann ein Samba-Administrator weitere Blöcke definieren. Die Namen dieser Blöcke entsprechen den Freigabenamen, die ein Windows-Client sieht oder anspricht. Die Zuweisung von Inhalten an eine Konfiguration erfolgt mittels simplem ”=” - links steht der Variablenname und rechts die Zuweisung. Zuweisungen von mehr als einem Wert sind durch einfache Abstände voneinander getrennt. 12.4.2 Wichtige Optionen in der Sektion [global] • workgroup = SAMBA - ordnet den Linux-Samba-Server in die Windows-Arbeitsgruppe oder Domain ”SAMBA” ein. Diese Maschine erscheint sodann in der Windows-Netzwerkumgebung in einem Unterordner mit diesem Namen. • netbios name = MYSMB - legt fest, dass die Maschine unter dem Windows-Namen ”MYSMB” in der Netzwerkumgebung auftaucht und angesprochen werden kann. Dieser Name muss nicht identisch zum FQDN des TCP/IP Domain Name System sein. Soll Samba einfach den Linux-Rechnernamen benutzen, kann dieser Eintrag entfallen. • os level = 64 - bestimmt darüber mit welchem Wert sich Samba für Browse-Wahlen anbietet. Das entscheidet beispielsweise über die Chance ein lokaler Masterbrowser einer Arbeitsgruppe zu werden. • unix extensions = Yes - dieser Parameter stellt ein, ob Samba die CIFS Extensions für Unix unterstützt. Damit stehen dann Symbolische Links, Hard Links, ... zur Verfügung. Nur interessant für Unix-Clients. • encrypt passwords = Yes - neuere Windows-Clients erwarten verschlüsselte Passwörter. Deshalb kann nicht die klassische Unix-Shadow zum Einsatz kommen. Damit Samba korrekt authentifizieren kann, hat es entweder Zugriff auf eine lokale smbpasswd Datei oder kann gegen einen entsprechenden Dienst authentifizieren. • log file = /var/log/log.%m - überschreibt die einkompilierte Default-Position des Logfiles. %m wird durch den Dienst nmbd oder smbd ersetzt, welcher Log-Informationen generiert. • log level = 10 - steigende Werte generieren umfangreichere Logfiles. Es können einzelnen Komponenten unterschiedliche Loglevel zugeordnet werden: log level = 3 passdb:4 auth:8 winbind:3. 186 KAPITEL 12. SAMBA • bind interfaces only = Yes - definiert, auf welchen Netzwerkschnittstellen der Samba-Server seine Dienste anbietet. Diese Option arbeitet mit der folgenden eng zusammen. • interfaces = 127.0.0.1 10.8.4.254/24 - legt fest, dass sowohl das LoopbackInterface und das Interface mit der IP 10.8.4.254 bedient werden. Letzeres umfasst ein Netzwerk von 256 Maschinen (Netzmaske 255.255.255.0). • hosts allow = All - legt keine Beschränkungen auf bestimmte Maschinen fest. Hier könnte sonst auch eine leerzeichengetrennte Liste von IP-Nummern stehen, die auf den Service zugreifen dürfen. • message command = /bin/bash -c ‘/usr/X11R6/bin/xterm -T ’’WinPopup Message’’ -e /usr/bin/vim %s; rm %s’ & - erlaubt es unter Linux ebenfalls Windows-Popup-Messages zu empfangen. Die Nachrichten reicht Samba an ein externes Programm - hier ein einfaches xterm mit vi weiter. %s enthält den Inhalt der Nachricht, %t ist der Zielname, an den die Nachricht ging. %f bezeichnet den Client, von dem die Nachricht kam. 12.4.3 Wichtige Optionen der anderen Abschnitte • comment = All Printers oder comment = Gemeinsame Daten - setzen ein Kommentar für eine Freigabe fest, die an die Clients übermittelt wird. • path = /win-export - legt für Dateifreigaben fest, welches Verzeichnis im LinuxDateibaum Samba bereitstellen soll. Für Drucker definiert diese Variable das Spoolverzeichnis. • create mask = 0600 - definiert das Rechtemuster beim Anlegen von Dateien. Hierzu werden die Permissions vom Mapping von DOS oder Linux bestimmt und diese dann mit dem Muster UND-verknüpft. Das Muster entspricht dem von chmod bekannten. • force create mask = 0600 - erzwingt das Setzen eines bestimmten Bitmusters für die Zugriffsrechte. Im Bespiel würde eine Datei auf jeden Fall die Rechte -rw-----bekommen. • directory mask = 0750 - stellt das Analogon zu ”create mask” dar. Es legt fest mit welchem Rechtemuster Samba neu angelegte Verzeichnisse versieht. Auch hier gibt es die Option ”force directory mask”. • valid users = test1 test2 - nimmt eine Leerzeichenseparierte Liste von Benutzern auf, die auf diesen Dienst verbinden dürfen. In der Sektion [homes] findet man hier valid users = %S. %S wird durch den Namen des sich anmeldenden Nutzers automatisch ersetzt. Deshalb muss nicht für jeden der vielleicht viele hundert oder tausend Benutzer umfassenden Maschine eine eigene Freigabe definiert werden. • browseable = No - kontrolliert, ob die Freigabe in einer Browse-Liste der Netzwerkumgebung angezeigt wird oder nicht. • read only = No oder writable = Yes - erlaubt dem Benutzer eines Services Dateien oder Verzeichnisse anzulegen und zu verändern. • printable = Yes - erlaubt dem Client auf das Drucker-Spooler-Verzeichnis zu schreiben. 12.5. CONTROLLER-FUNKTIONALITÄT 187 • public = Yes alternativ guest ok = Yes - legen fest, ob eine Verbindung ohne Passwort möglich ist. Die Rechte sind dann die des Gast-Accounts. 12.4.4 Virtuelle Samba-Server Der Apache-Webserver macht es seit einiger Zeit vor: Ein Server sollte in der Lage sein, mehr als eine Identität gleichzeitig anzunehmen. Auch das SMB-Protokoll kann namensbasierte virtuelle Server anzubieten. Dabei befinden sich alle in der gleichen Arbeitsgruppe. Sinn und Zweck dieser Übung - eine Maschine ist unter mehreren Namen in der Netzwerkumgebung sichtbar. Der Admin konfiguriert dieses Verhalten durch die Option netbios aliases = VIRTUAL01 VIRTUAL02 VIRTUAL03. Ein solcher Eintrag steht in der smb.conf in der Sektion [global]. Die Anzahl der Aliases (hier drei) schreibt Samba nicht vor. Kommt die Option ”netbios aliases” zum Einsatz, muss auch der ”netbios name” eingestellt sein. Das ist jetzt noch nicht besonders spannend: Schaut man sich nun in der Netzwerkumgebung auf dem Client die Freigaben von VIRTUAL01, so unterscheiden diese sich nicht von den anderen. Will man einem virtuellen Server nun eine angepasste Einstellung verpassen, braucht man eine separate smb.conf für diesen. Der Name der Datei lautet am besten auf smb.conf + Servername = smb.conf.virtual01. Hierin können nun wieder beliebige Freigaben eingestellt werden. Damit Samba weitere Konfigurationsdateien beim Start berücksichtigt, fügt man ein include Statement ein: include = /etc/samba/smb.conf.%L". %L setzt den Servernamen ein, der beim NetBIOS-Verbindungsaufbau angeforder wurde. Beim Aufsetzen der verschiedenen Dateien ist zu beachten, dass alle Freigaben der Hauptdatei auch für alle virtuellen Server gelten. 12.5 Controller-Funktionalität Die bisher vorgestellten Beispiele demonstrierten nur einen Teil der Sambafähigkeiten. Solche Konfigurationen sind eher in sehr kleinen und kleinen Netzwerken mit wenigen Rechnern und Nutzern sinnvoll. In vielen Fällen kann es für Administratoren attraktiv sein, den Samba-Server auch zur Namensauflösung als WINS-Server oder als Ersatz eines Primary Domain Controllers zu verwenden. Dann möchte er jedoch häufig auch Ziele, wie SingleSign-On verwirklichen. Hierzu läßt sich Samba mit dem Directory-Dienst LDAP verbinden. Die notwendigen Konfigurationen sind dann jedoch deutlich komplexer. 12.5.1 Der Windows Namensdienst Viele werden sich fragen, wozu ein weiterer Namensdienst, wo es doch schon das Domain Name System (DNS) gibt. DNS ist fest mit TCP/IP verknüpft - SMB jedoch nicht, auch wenn es heute kaum noch jemand anders als zusammen mit diesem einsetzt. Viele kennen das Problem: Den Namen einer Person können sich viele noch merken, mit den dazugehörigen Telefonnummern wird es schwieriger. Dann zieht diese Person um und die Nummer ändert sich. Hier möchte man ein Telefonbuch haben, welches Namen Nummern zuordnen kann. Diese Aufgabe übernimmt der Windows Internet Name Service. Dieser unterscheidet sich signifikant vom klassischen DNS. So könnte man ja mal versuchen einer WindowsMaschine per DHCP einen Hostnamen zuzuweisen, was unter Linux/Unix kein Problem darstellt. Auch habt man sicherlich schnell festgestellt, dass Microsoft unter dem Konzept ein Windows-Domäne etwas ganz anderes sieht als ein Domain-Name, wie in Web-Adressen. Der NetBIOS-Name-Service wird in den RFCs 1001 und 1002 beschrieben. Er bietet Clients eine vergleichbare Art von Dienst wie DNS. Es bestehen jedoch einige wesentliche Hauptunterschiede. NetBIOS-Namen existieren in einem flachen Namensbereich. 188 KAPITEL 12. SAMBA Das ist beim DNS völlig anders. Keiner hindert einen daran, einen Rechner in der Subdomain pool01.lehrpools.rechenzentrum.uni-freiburg.de mit dem Namen dozenten-rechnervorne-links zu betreiben. Die Namenskomponenten zwischen den Punkten dürfen 63 und der Gesamtname nicht 255 Zeichen überschreiten. Damit lassen sich einige Hierarchiestufen erreichen. Unter WindowsXP gibt es zwei Möglichkeiten einen WINS-Server einzutragen. Zum einen kann der Admin des Netzes diese Information mittels DHCP an alle Clients verteilten: Abfragen lässt sich diese Information beispielsweise mit ipconfig -all in der ”Eingabeaufforderung”. Alternativ kann man die IP für WINS auch fest bei der Alternativen Konfiguration von TCP/IP eintragen. Abbildung 12.3: Zwei Wege der Zuweisung der WINS-Server-Adresse 12.5.2 NetBIOS Namen NetBIOS-Namen bestehen aus 16 alphanumerischen Zeichen, wobei a bis z, A bis Z und ˆ 0 bis 9 erlaubt sind. Zusätzlich dürfen die Sonderzeichen !@#$%&()-’{}. vorkommen. Die ersten 15 Zeichen dienen der Benennung, das sechzehnte Zeichen ist eine Zahl von 0x00 bis 0xFF hexadezimal, die den Ressourcentyp des Namens bestimmt. Es gibt zwei Namenstypen: Entweder sie sind exklusiv einem Benutzer oder einer Maschine zugeordnet oder sie sind Gruppennamen. Letztere können gemeinsam benutzt werden. Der NetBIOS- 12.5. CONTROLLER-FUNKTIONALITÄT ID < 00 > < 03 > < 06 > < 1B > < 1F > < 20 > < 21 > < BE > < BF > 189 Bedeutung NetBIOS Name eines Rechners (Freigabename einer Workstation) Messenger Service Name - verwendet zum Empfangen und Übertragen von Nachrichten, sowohl für User- als auch Rechnernamen Routing und Remote Access Service (RAS) - Name des Servers Domain Masterbrowser Name - wird von Maschinen im Netz genutzt, um den Primary Domain Controller (PDC) einer Windows-Domain zu kontaktieren Network Dynamic Data Exchange (NetDDE) Dienst Server-Dienstname - Zugriffspunkte für freigegebene Dateien und Verzeichnisse RAS-Client Network Monitor Agent Network Monitor Utility Tabelle 12.1: Eindeutige Namen Name MYSMB< 00 > aus dem Beispiel des vorangegangenen Abschnitts ist ein eindeutiger Name. Er beschreibt den Computer ”MYSMB”. Die Bezeichnung SAMBA-TESTNETZ< 1e > hingegen ist ein Gruppenname. Ihn benutzen Browsing-Clients, um einen MasterBrowser unter sich zu bestimmen. NetBIOS-Namen spannen nur einen flachen Namensbereich auf. Trotzdem sind in einm gleichen logischen Subnetz mehrere Namensbereiche erlaubt. Diese werden durch den NetBIOS-Scope unterschieden. Der NetBIOS-Scope ist ein String, der zusammen mit dem NetBIOS-Namen 256 Zeichen nicht überschreiten darf. ID < 1D > < 1E > Bedeutung Masterbrowser-Name - wird vom Client benutzt, um auf den Masterbrowser zuzugreifen (je nach Netz lokaler Masterbrowser) Gruppenname - kommt bei der Wahl von Browse-Mastern zum Einsatz Tabelle 12.2: Gruppenressourcen Die Namensvergabe im NetBIOS geht anders als bei DNS vom Client aus: Eine Maschine versucht beim Start einen Namen zu registrieren. Dieses ist erfolgreich, wenn der Client-Rechner ein erfolgreiches Namensangebot gemacht und vom Server den Namen für sich erhalten hat. Versucht eine Maschine A einen im Scope schon vergebenen Namen zu registrieren, antwortet der Besitzer mit dem Hinweis, dass er den Namen behält. Dieses Verfahren ist eine Methode inaktive Hosts zu entdecken, die den Besitz eines Namens nicht offiziell aufgegeben haben. ID < 00 > < 1C > < 1E > < 20 > Bedeutung Zum Empfang von Browser-Broadcasts Arbeitsgruppenname - wird vom Domain Controller registriert und enthält eine Liste von Computern, die sich unter dieser Gruppe registriert haben Internet Gruppe Gleiche Bedeutung, wie bei Gruppenressourcen Identifikation eine Gruppe von Rechnern für administrative Zwecke Tabelle 12.3: Domänennamen 190 KAPITEL 12. SAMBA NetBIOS kennt zwei Methoden für die Registrierung und Auflösung von Namen: Broadcast und Point-to-Point. Die Point-to-Point-Registrierung und -Auflösung geschieht mittels eines eigenen Dienstes - NetBIOS-Nameserver (NBNS). Broadcast-Registrierung oder -Auflösung heißt, dass die Anfrage an alle Hosts im gleichen logischen Subnetz mit dem gleichen Scope gesendet wird. Router können diese Broadcasts weitergeben. Das ist in der Regel in größeren Netzen mit vielen Windwosmaschinen nicht sehr clever, da sehr viel Datenverkehr generiert wird. Diese Methode kam implizit in den Konfigurationsbeispielen der vorangegangenen Abschnitte zum Einsatz. 12.5.3 Der Nameserver (WINS) Ein WINS macht nicht nur zur Reduzierung der Menge des Broadcast-Datenverkehrs Sinn, die durch eine große Anzahl von NetBIOS-Clients erzeugt werden kann. Ein weiteres Problem in NetBIOS-Netzen ist die übliche Beschränkung der Broadcasts auf ein logisches Subnetz. Das führt dazu, dass Rechner in verschiedenen Subnetzen nicht über die Namen miteinander kommunizieren können. WINS löst beide Probleme. Die Aufgabe eines WINS übernimmt im Samba-Paket der nmbd. Die Aktivierung erfolgt durch die Option wins support = Yes. Ist bereits ein solcher Dienst im Subnetz vorhanden, steht in ”wins server” die IP des entsprechenden Rechners. ”wins support” sollte dann auf ”No” gesetzt sein. Da die Namensvergabe durch die Clients initiiert wird, sind keine wesentlichen Einstellungen neben ”workgroup” und eventuell ”netbios name” in der smb.conf notwendig. Samba erlaubt es DNS und WINS miteinander zu verknüpfen. Wenn Samba als WINSServer (wins support = Yes) agiert, kann der nmbd alle Namensanfragen im DNS versuchen zu finden, wenn er keinen entsprechenden Eintrag in der lokalen WINS-Datenbank gefunden hat. Der Parameter ”dns proxy” bestimmt dieses Verhalten. Samba befragt standardmäßig den DNS, wenn ein Name nicht in WINS gefunden wird. Dieses Verhalten entspricht: dns proxy = Yes. Gibt es kein DNS im eigenen Netzwerk, macht Sambas ”dns proxy” nicht viel Sinn. Mittels dns proxy = No läßt er sich deaktivieren. Eine Methode zur Namensauflösung in sehr kleinen Netzwerken ist der Weg über eine Textdatei. Das Konzept der lmhosts Datei kennt der Admin vielleicht schon WindowsRechnern. Sie kann auch von Samba verwendet werden und entspricht funktionell der von Linux bekannten Datei /etc/hosts. Der einzige Unterschied: Sie ordnet IP-Adressen NetBIOSNamen zu anstelle von Hostnamen. Samba schaut in der lmhosts nur für eigene Fragen nach, nicht für die Anfragen von anderen Maschinen im Netzwerk. Der Parameter ”name resolve order” bestimmt dieses Verhalten. Wenn also die Reihenfolge name resolve order = lmhosts wins eingestellt ist, würde Samba selbst keine Namensanfragen per Broadcast aussenden und nicht versuchen, Namen über den DNS aufzulösen. Es würde nur in der lokalen lmhosts Datei nachschauen und bei Misserfolg den konfigurierten WINS-Server befragen. Eine NetBIOS-Namensanfrage macht nmblookup -R -U localhost MYSMB. Die Optionen sorgen dafür, dass ein WINS-Server befragt wird, anstatt lediglich ein Broadcast in das lokale Subnetz zu machen. Sambas lmhosts Datei und eine, die von Windows-Clients verwendet wird, unterscheiden sich im Format etwas. Es kann Sinn machen hier den PDC einzutragen, da manchmal sonst eine Verbindung auf diesen über Router hinweg fehlschlägt. Unter WindowsXP liegt diese Datei in /WINDOWS/system32/drivers/etc. Üblicherweise sieht ein Eintrag so aus: 10.8.4.254 MYSMB #PRE #DOM:SAMBA Für einfache Hosts reicht die Kombination aus IP-Nummer und NetBIOS-Name. 12.6. SAMBA ALS PDC 12.6 191 Samba als PDC Zur großen Form läuft Samba auf, wenn es nicht nur einfache Freigaben bereitstellt und Namen auflöst. Windowsnetze erlauben seit Windows-NT eine zentralisierte Steuerung. So können beispielsweise Benutzer zentral an einer Maschine authentifiziert werden, ohne dass sie auf dem lokalen Endgerät eingetragen sind. Hierzu führte Microsoft das Konzept der Domäne ein. Eine Domäne definiert eine Gruppe von Rechnern, die eine gemeinsame Benutzerdatenbank verwenden. Diese Benutzerdatenbank stellen sogenannte Primary (PDC) und Backup Domain Controller (BDC) zur Verfügung. Für jedes Domänenmitglied - dieses können Benutzer und Rechner sein - wird ein zentrales Konto angelegt. Für jedes Domänenmitglied muss ein Benutzerkonto, auch Computerkonto genannt, auf dem PDC existieren. Samba kann die Rolle des PDC, bisher jedoch noch nicht die eines BDC übernehmen. Hierzu stellt der Admin in der globalen Sektion der smb.conf zuerst folgende Optionen ein: workgroup = SAMBA netbios name = MYSMB os level = 64 domain master = Yes domain logons = Yes preferred master = Yes wins support = Yes wins proxy = Yes Einige Optionen sollten aus dem bisher gesagten bekannt sein. Der hohe OS-Level sorgt dafür, dass die Maschine die Wahl der Browser gewinnt. Nun sollte der Samba-Server neu gestartet werden: rcsmb restart; rcnmb restart. Die Sache mit Win9x-Clients ist einfach: Man kann den Samba-PDC sofort ohne weitere Konfiguration als Anmeldeserver verwenden. Beim Einsatz der professionellen Windowsvarianten NT, 2000 oder XP sind noch einige Nacharbeiten notwendig. Es müssen erst Computer-Konten existieren (Im Beispiel die Maschine zxs) und ein Benutzer ”root” in die Samba-Passwort-Datenbank aufgenommen sein, bevor die Aufnahme einer solchen Maschine gelingt. useradd -d /var/tmp -s /bin/false zxs\$ smbpasswd -a -m zxs\$ smbpasswd -a root Nun sind auf der Windows-Maschine einige Schritte dran: Zuerst legt man einen Key in der Windows-Registry an. Das geschieht beispielsweise mittels Datei, die in die Registry geladen wird: Windows Registry Editor Version 5.00 [HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters] "requiresignorseal"=dword:00000000 Anschliessend startet man die Systemsteuerung und wählt dort den Unterpunkt ”System”. In den nun angezeigten Systemeigenschaften geht es zur Karteikarte mit den Computernamen. Hierin erlaubt der Knopf ”Ändern” die Aufnahme der Maschine in eine WindowsDomäne. Im nun erscheinenden Dialog legt man den NetBIOS-Namen der Maschine fest und tritt der Domäne bei. Dafür muss der Radio-Button ”Mitglied von Dommäne” aktiviert und der Name der beizutretenden Domäne daneben eingetragen werden. Nach dem 192 KAPITEL 12. SAMBA Abbildung 12.4: WindowsXP-Maschine in eine Domäne aufnehmen Bestätigen durch ”OK” erscheint ein Anmeldedialog für den Domain-Administrator. Das ist der Benutzer ”root”, dem mittels smbpasswd ein Sambapasswort verpasst wurde. Wenn nun alles glatt ging, erscheint eine kurze Willkommensmeldung, die den Domänenbeitritt bestätigt (Siehe Abb. 12.6). Anschliessend muss der Client neu starten. Nach erfolgtem Start kommt nun der klassischen Anmelde-Dialog. Unter ”Optionen” können Benutzer jetzt auswählen, ob sie sich lokal an der Maschine oder durch Authentifizierung gegen die Domain ”SAMBA” anmelden wollen. Nun können sich alle Benutzer anmelden, die Samba bekannt sind. Wenn die Beispiele aus den vorangegangenen Abschnitten beibehalten wurden, sind das die Benutzer ”test1” und ”test2”. 12.6.1 Benutzerprofile und Logon-Skripten Beim ersten Test-Login sehen die Benutzerprofile der beiden ”test1” und ”test2” noch sehr nackt aus. Es erscheint lediglich die Windows-Voreinstellung des Desktops. Damit ein Benutzer an verschiedenen Workstations stets das gleiche Profil vorfindet, läßt sich das Profil serverbasiert speichern. Es wird dann wärend des Anmeldevorganges auf die ClientMaschine kopiert, vor der der Benutzer sitzt. Dieses kann nicht einfach umgangen werden, da viele Anwendungsprogramme ein lokales Profil verlangen, das nicht einfach, wie von Linux gewohnt, im Homeverzeichnis liegt. Da sich die Einstellungen im Laufe einer Sitzung ändern können, müssen sie auch wieder zurückgesichert werden. Das geschieht beim Abmelden von der Arbeitsstation. Will der Administrator ganz neue Benutzer hinzufügen, muss er diese erst als LinuxAccounts anlegen und anschliessend mit smbpasswd -a UserID in die Samba-Benutzerdatenbank kopieren. Nun müssen noch einige Eintragungen in der smb.conf vorgenommen werden. Mit dem Eintrag 12.6. SAMBA ALS PDC 193 Abbildung 12.5: Domänen-Aufnahme - Passwortdialog logon path = \\%N \%U\profile (für NT/2000/XP) ; alternativ: logon home = \\%N \%U\profile (für Windows 9x) in der [global]-Section der smb.conf wird im Heimatverzeichnis des Benutzers ein Verzeichnis namens profile erstellt und das Profil dort gespeichert. Der Service erhält eine eigene Sektion in der Konfigurationsdatei: [profiles] comment = Network Profiles Service path = %H read only = No store dos attributes = Yes create mask = 0600 directory mask = 0700 Zur Aktivierung dieses Features ist ein Neustart des Servers erforderlich. Damit bei der Benutzeranmeldung noch Anpassungen seiner Umgebung vorgenommen werden können, kann ein Logon-Skript ausgeführt werden. Dieses definiert der Admin mittels logon script = scripts/default.bat Dieses Skript wird unter Windows ausgeführt, sollte also die richtigen Zeilenschaltungen besitzen. Entweder der Admin editiert es unter Windows selbst und kopiert es in das Netlogon-Verzeichnis. Oder man konvertiert die Datei entsprechend. Auch dieser Dienst besitzt einen eigenen Abschnitt: [netlogon] comment = Network Logon Service path = /hom/netlogon write list = @ntadmin force group = ntadmin 194 KAPITEL 12. SAMBA Abbildung 12.6: Begrüßung in der neuen Domäne create mask = 0664 directory mask = 0775 browsable = No Ein Beispielskript für NT findet sich je nach eingesetzter Linux-Distribution im SambaDoku-Paket unter: .../doc/.../samba/examples/ntlogon/ntlogon.conf. 12.7 Samba und LDAP Was in kleinen Netzen noch per Hand zu managen ist, will der Admin in großen Netzen professioneller regeln. Das Anlegen von Benutzern nach dem soeben beschriebenen Verfahren ist für große Netze mit vielen Linux- und Windows-Rechnern, an denen sich ein Nutzer anmelden kann, zu umständlich. Hier hilft eine hierarchische Datenbank weiter, die sich für solche Zwecke geradezu anbietet. LDAP - das Lightwight Directory Access Protocol (vgl. Kap. 13.3) ist ein verabschiedeter Internet-Standard. Microsoft verwendet dieses als Grundlage für seine Active Directory Service. OpenLDAP ist eine OpenSource-Implementierung, die standardmäßig bei Ihrer Linuxdistribution dabei sein sollte. LDAP arbeitet im ClientServer-Modell über TCP/IP. Samba kann als LDAP-Client agieren und alle Informationen, die es für seinen Betrieb braucht aus dem Directory beziehen und veränderte Daten wieder zurückschreiben. Diese Daten landen sonst in den *.tdb, die sich unter /etc/samba und /var/lib/samba finden. Sollte noch kein LDAP-Server auf der Samba-Maschine installiert sein, sollte man diesen Schritt nun nachholen. Neben den Basispaketen für den Server und die Client-Programme benötigt die Installation zusätzlich ”pam ldap”, ”nss ldap” und ”ldapsmb”, wenn auch die Verwaltung der Linux-Benutzer mittels LDAP erfolgen soll. 12.7. SAMBA UND LDAP 12.7.1 195 Konfiguration des LDAP-Servers Es gibt ein eigenes Kapitel dieses Skriptes 1 . Im nächsten Schritt erweitert man die Liste der standardmäßig benutzten Schemas um eines für Samba3. Dieses installiert SuSE bereits automatisch in das richtige Verzeichnis. Kümmert sich Ihre Distribution nicht darum, findet man sicherlich das Schema als Beispiel in der Dokumentation des Samba-Paketes. Minimalkonfiguration der /etc/openldap/slapd.conf inlcude [ ... ] suffix rootdn rootpw /etc/openldap/schema/samba3.schema "dc=my-domain,dc=site" "cn=Manager,dc=my-domain,dc=site" GeheiM Zusätzlich passen Sie die Benennung Ihrer LDAP-Wurzel an (suffix), definieren entsprechend den Datenbank-Manager (rootdn) und setzen für diesen ein Passwort (rootpw). Einige dieser Einstellungen finden Sie auch in der neuen smb.conf wieder (ldap *). 12.7.2 Die neue Samba-Konfiguration Für den Schritt hin zu einem LDAP-Backend sichern Sie am besten Ihre bisherige Konfiguration und starten mit einer neuen. Eine sehr gute Hilfe und Bauanleitung liefert auch der Samba-Guide, der als PDF und HTML in der Samba-Dokumentation mitgeliefert wird. [global] unix charset = LOCALE workgroup = SMB-LDAP netbios name = MYSMBLDAP passdb backend = ldapsam:ldap://132.230.4.178/ # username map = /etc/samba/smbusers log level = 1 smb ports = 139 445 domain logons = Yes preferred master = Yes wins support = Yes name resolve order = wins bcast hosts time server = Yes ldap suffix = dc=my-domain,dc=site ldap machine suffix = ou=user ldap user suffix = ou=user ldap group suffix = ou=group ldap idmap suffix = ou=idmap ldap admin dn = cn=Manager,dc=my-domain,dc=site idmap backend = ldap:ldap://10.8.4.254/ idmap uid = 10000-20000 idmap gid = 10000-20000 map acl inherit = Yes add user script = /var/lib/samba/sbin/smbldap-useradd.pl -a -m ’%u’ delete user script = /var/lib/samba/sbin/smbldap-userdel.pl %u add group script = /var/lib/samba/sbin/smbldap-groupadd.pl -p ’%g’ delete group script = /var/lib/samba/sbin/smbldap-groupdel.pl ’%g’ add user to group script = /var/lib/samba/sbin/smbldap-groupmod.pl -m ’ delete user from group script = /var/lib/samba/sbin/smbldap-groupmod.pl 1 zumindest in den meisten Kompilationen. (vgl. Kap. 13.3) Sonst gibt es das evtl. extra oder über http://goe.net per CVS zu beziehen. 196 KAPITEL 12. SAMBA set primary group script = /var/lib/samba/sbin/smbldap-usermod.pl -g ’% add machine script = /var/lib/samba/sbin/smbldap-useradd.pl -w ’%u’ logon script = scripts\logon.bat logon path = \\%L\profiles\%U logon drive = H: printcap name = CUPS printing = cups printer admin = Administrator [homes] comment = Home Directories valid users = %S read only = No inherit permissions = Yes browseable = No [profiles] comment = Network Profiles Service path = %H read only = No create mask = 0600 directory mask = 0700 store dos attributes = Yes [users] comment = All users path = /home read only = No inherit permissions = Yes [groups] comment = All groups path = /home/groups read only = No inherit permissions = Yes Vor dem Neustart des Samba-Servers mit der umgebauten Konfiguration entfernt der Admin am besten noch die alten *.tdb und *.dat Dateien aus den beiden oben angebenen Verzeichnissen. Da der Samba-Server mit dem LDAP-Server kommuniziert und Einträge anlegt, benötigt Samba das Manager-Passwort: linux2:/etc/samba # smbpasswd -w GeheiM Setting stored password for "cn=Manager,dc=my-domain,dc=site" in secrets.tdb Dann wird es Zeit die Server mit: rcsmb (re)start; rcnmb (re)start; rcldap (re)start; - oder passend zur jeweiligen Distribution - neu zu starten. Am besten wirft man einen kurzen Blick ins Logfile /var/log/samba/log.smbd, ob keine Fehler aufgetreten sind. Der Befehl smbclient -L localhost -U% sollte nun eine Serverstatusmeldung generieren. Mit dem Kommando linux2:/etc/samba # net getlocalsid [2004/11/22 19:51:17, 0] lib/smbldap.c:smbldap_search_suffix(1101) smbldap_search_suffix: Problem during LDAP search: (No such object) SID for domain MYSMBLDAP is: S-1-5-21-2420552454-2742262544-3303448865 linux2:/etc/samba # ls -la secrets.tdb -rw------- 1 root root 8192 Nov 22 19:45 secrets.tdb erzeugt man einen eindeutigen Idenfier für die Maschine. Anschliessend gibts auch wieder eine secrets.tdb. 12.7. SAMBA UND LDAP 12.7.3 197 Die IDEALX-Skripten Nun braucht mal die idealx.com Samba-LDAP-Skripten. Die muss sich der Admin meistens nicht irgendwoher organisieren. Sie sollten Bestandteil des Samba-Doc-Paketes sein. Die Autoren des Samba-Guide schlagen vor die Skripten und ein zu kompilierendes mkntpwd in ein Unterverzeichnis /var/lib/samba/sbin zu verschieben. Auf einem SuSE-Linux ist mkntpwd bereits unter /usr/sbin installiert. Der Compile-Schritt kann entfallen. Also führt man in linux2:/usr/share/doc/packages/samba/examples/LDAP/smbldap-tools # cd mkntpwd make cd .. mkdir /var/lib/samba/sbin cp *.pl *.pm mkntpwd/mkntpwd /var/lib/samba/sbin chmod 755 /var/lib/samba/sbin/smb*.pl chmod 644 /var/lib/samba/sbin/smb*.pm aus. Nun steht eine kleine Konfigurationsorgie der Datei smbldap conf.pm an. Diese im Lieblingseditor öffnen und los gehts: [ ... ] # Put your own SID # to obtain this number do: "net getlocalsid" $SID=’S-1-5-21-2420552454-2742262544-3303448865’; [ ... ] # LDAP Suffix # Ex: $suffix = "dc=IDEALX,dc=ORG"; $suffix = "dc=my-domain,dc=site"; [ ... ] # Where are stored Users # Ex: $usersdn = "ou=Users,$suffix"; for ou=Users,dc=IDEALX,dc=ORG $usersou = q(user); $usersdn = "ou=$usersou,$suffix"; # Where are stored Computers # Ex: $computersdn = "ou=Computers,$suffix"; # for ou=Computers,dc=IDEALX,dc=ORG $computersou = q(user); $computersdn = "ou=$computersou,$suffix"; # Where are stored Groups # Ex $groupsdn = "ou=Groups,$suffix"; for ou=Groups,dc=IDEALX,dc=ORG $groupsou = q(group); $groupsdn = "ou=$groupsou,$suffix"; [ ... ] # Bind DN used # Ex: $binddn = "cn=Manager,$suffix"; for cn=Manager,dc=IDEALX,dc=org $binddn = "cn=Manager,$suffix"; # Bind DN passwd used # Ex: $bindpasswd = ’secret’; for ’secret’ $bindpasswd = "GeheiM"; [ ... ] # Login defs # Default Login Shell # Ex: $_userLoginShell = q(/bin/bash); $_userLoginShell = q(/bin/bash); # Home directory prefix (without username) # Ex: $_userHomePrefix = q(/home/); 198 KAPITEL 12. SAMBA $_userHomePrefix = q(/home/); [ ... ] $_userSmbHome = q(\\\\MYSMBLDAP\\homes); [ ... ] $_userProfile = q(\\\\MYSMBLDAP\\profiles\\); [ ... ] $_userHomeDrive = q(H:); [ ... ] # Allows not to use smbpasswd (if $with_smbpasswd == 0 in # smbldap_conf.pm) but prefer mkntpwd... most of the time, it’s # a wise choice :-) $with_smbpasswd = 0; $smbpasswd = "/usr/bin/smbpasswd"; $mk_ntpasswd = "/usr/sbin/mkntpwd"; Die Einträge für $usersou und $groupsou müssen natürlich mit den Definitionen in der smb.conf übereinstimmen. Man ist jedoch nicht auf ”user” und ”group” festgelegt und können geändert werden. Ähnliches gilt für den NetBIOS-Namen des Samba-Servers und den Buchstaben für das Home-Laufwerk. Für die meisten der derzeit aktuelle Samba-Versionen und Idealx-Skripten müssen Computer und Benutzer unterhalb eines gemeinsamen LDAP-Knotens angelegt sein. In diesem Beispiel wurden die Computer in ”user” aufgenommen. Bei unterschiedlich gewählten Ablagen schlägt ein Domänenbeitritt fehl, da eine Maschine zwar sauber in den LDAP eingetragen, danach aber nicht wiedergefunden wird. Dieses Problem scheint mit den neuesten Samba-Versionen und Idealx-Skripten2 behoben. Ebenfalls entfallen die Ergänzungen der Objektklassen. Dafür muss dann jedoch die LDAP Schema-Datei von Idealx und nicht die von Samba eingesetzt werden, da sonst einige Objekte nicht korrekt initialisiert werden. Am Ende der Datei muss der Pfad zu mkntpwd stimmen. Befinden sich LDAP- und Samba-Server nicht auf einer Maschine sind für den Netzwerkzugriff des Samba auf LDAP natürlich noch IP und Port oben in der Datei anzugleichen. Generell fügt das Skript umfangreichere Informationen ein, als für ein reines Samba-Backend benötigt würden. Zusätzlich sind auch alle Informationen für Unix-Benutzer enthalten. Leider sind die Skripten je nach eingesetzter Linux-Distribution nicht ganz passend zu einigen neueren LDAP-Versionen, so dass bei smbldap-populate.pl folgende oder ähnliche Fehlermeldung mehrfach auftreten kann: failed to add entry: no structural object class provided at ./smbldap-populate2.pl line 323, <GEN1> line 8. Diese läßt sich in den Griff bekommen durch das Einfügen zweier struktureller LDAPObjektklassen in die Datei smbldap-populate.pl Zeilen 323 und folgende: dn: cn=Domain Admins,$groupsdn objectClass: posixGroup +objectClass: top +objectClass: namedObject objectClass: sambaGroupMapping gidNumber: 512 cn: Domain Admins Das Ergebnis sieht dann so aus: linux2:/var/lib/samba/sbin # ./smbldap-populate.pl Using builtin directory structure 2 www.idealx.org - Version 0.8.5, die 0.8.4 funktioniert nicht korrekt 12.7. SAMBA UND LDAP adding adding adding adding adding adding adding adding adding adding adding adding adding adding adding adding adding adding adding new new new new new new new new new new new new new new new new new new new entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: entry: 199 dc=my-domain,dc=site ou=user,dc=my-domain,dc=site ou=group,dc=my-domain,dc=site ou=computer,dc=my-domain,dc=site uid=Administrator,ou=user,dc=my-domain,dc=site uid=nobody,ou=user,dc=my-domain,dc=site cn=Domain Admins,ou=group,dc=my-domain,dc=site cn=Domain Users,ou=group,dc=my-domain,dc=site cn=Domain Guests,ou=group,dc=my-domain,dc=site cn=Administrators,ou=group,dc=my-domain,dc=site cn=Users,ou=group,dc=my-domain,dc=site cn=Guests,ou=group,dc=my-domain,dc=site cn=Power Users,ou=group,dc=my-domain,dc=site cn=Account Operators,ou=group,dc=my-domain,dc=site cn=Server Operators,ou=group,dc=my-domain,dc=site cn=Print Operators,ou=group,dc=my-domain,dc=site cn=Backup Operators,ou=group,dc=my-domain,dc=site cn=Replicator,ou=group,dc=my-domain,dc=site cn=Domain Computers,ou=group,dc=my-domain,dc=site Nach erfolgreichem Durlauf von smbldap-populate.pl muss der LDAP-Server neu gestartet werden: rcldap restart. Als nächstes benötigt der LDAP-Server ein Container-Objekt für IDMAP-Informationen. Dieser ist überlicherweise nicht vorhanden und muss per Hand erzeugt werden. Dazu legen Sie eine Datei idmap.ldif mit folgendem Inhalt an: dn: ou=Idmap,dc=my-domain,dc=site objectClass: top objectClass: organizationalUnit ou: Idmap Diese Datei liegt im sogenannten LDIF vor - ein Austauschformat zwischen LDAP-Datenbanken. Mit dem Kommando ldapadd -x -D "cn=Manager,dc=my-domain,dc=site"-w GeheiM -f idmap.ldif fügt man den Eintrag der LDAP-Datenbasis hinzu. Zur Kontrolle ob der LDAP-Server korrekt läuft und auf Requests antwortet, kann das Kommandozeilentool ldapsearch verwendet werden. Es funktioniert analog zu ldapadd zum Auslesen der Datenbank. linux2:/var/lib/samba/sbin # ldapsearch -x -b "dc=my-domain,dc=site" # extended LDIF # # LDAPv3 # base <dc=my-domain,dc=site> with scope sub # filter: (objectclass=*) # requesting: ALL # # my-domain.site dn: dc=my-domain,dc=site objectClass: dcObject objectClass: organization dc: my-domain o: my-domain [ ... ] # Idmap, my-domain.site 200 KAPITEL 12. SAMBA dn: ou=Idmap,dc=my-domain,dc=site objectClass: top objectClass: organizationalUnit ou: Idmap # search result search: 2 result: 0 Success # numResponses: 21 # numEntries: 20 Es sollte eine ziemlich lange Liste liefern. Dann wird es Zeit sich um den Name Service Switch zu kümmern, so dass dieser auch LDAP-Benutzer auflösen kann. Andernfalls kann Ihr System Samba-Usern keine System-User zuordnen. /etc/nsswitch.conf passwd: compat group: compat passwd_compat: ldap group_compat: ldap [ ... ] # oder alternativ passwd: files ldap group: files ldap Die Einstellungen in dieser Datei als auch die LDAP-Client-Konfiguration kann ebenfalls mit YaST2 vorgenommen werden (Abb. yast2-ldap-client Erreichbar in YaST2 über Netzwerkdienste LDAP-Client). # /etc/ldap.conf host 127.0.0.1 base ou=user,dc=my-domain,dc=site ldap_version 3 ssl no nss_map_attribute uniqueMember member pam_filter objectclass=posixAccount nss_base_passwd ou=user,dc=my-domain,dc=site nss_base_shadow ou=user,dc=my-domain,dc=site nss_base_group ou=group,dc=my-domain,dc=site Wenn alles geklappt hat, liefert getent nun auch die Samba-Accounts und Gruppen: linux2:/var/lib/samba/sbin # getent passwd [ ... ] Administrator:x:998:512:Netbios Domain Administrator:/home:/bin/false nobody:x:999:514:nobody:/dev/null:/bin/false linux2:/var/lib/samba/sbin # getent group [ ... ] Domain Admins:x:512:Administrator Domain Users:x:513: Domain Guests:x:514: 12.7. SAMBA UND LDAP 201 Administrators:x:544: [ ... ] Nun wäre es nur noch ein kleiner Schritt auch den Zugriff auf die Linuxmaschine mittels PAM-LDAP einzurichten. Dieses würde aber den Rahmen des hier Beschriebenen sprengen. Auf diesem Wege können Administratoren jedoch ein ”single-password” realisieren. Bisher waren nur Systembenutzer automatisch angelegt worden. Mit den entsprechenden Tools können nun weitere hingezufügt werden: linux2:/var/lib/samba/sbin # linux2:/var/lib/samba/sbin # Changing password for test1 New password : Retype new password : linux2:/var/lib/samba/sbin # linux2:/var/lib/samba/sbin # Changing password for test1 New password : Retype new password : ./smbldap-useradd.pl -m -a test1 ./smbldap-passwd.pl test1 ./smbldap-usermod.pl -u 0 Administrator ./smbldap-passwd.pl Administrator Der Administrator hat vorerst noch eine UID ungleich null. Das ändert man mit smbldapusermod.pl wie im Beispiel gezeigt. Für ihn brauchen Sie auch noch ein Passwort für den späteren Domänenbeitritt. Mittels - der im smb.conf Beispiel auskommentierten - ”username map” kann der Administrator auch auf den Unix-Admin ”root” abgebildet werden. Diese Nutzer stehen sofort auch unter Linux zur Verfügung, wie getent passwd oder id test13 zeigen. Dass der User auch für die Windowswelt sichtbar wird, zeigt: linux2:/var/lib/samba/sbin # pdbedit -Lv test1 Searching for:[(&(objectClass=sambaDomain)(sambaDomainName=SMB-LDAP))] smbldap_open_connection: connection opened Searching for:[(&(objectClass=sambaDomain)(sambaDomainName=SMB-LDAP))] smbldap_open_connection: connection opened init_sam_from_ldap: Entry found for user: test1 Unix username: test1 NT username: test1 Account Flags: [U ] User SID: S-1-5-21-3516781642-1962875130-3438800523-3000 Primary Group SID: S-1-5-21-3516781642-1962875130-3438800523-513 Full Name: System User Home Directory: \\MYSMBLDAP\homes HomeDir Drive: H: Logon Script: test1.cmd Profile Path: \\MYSMBLDAP\profiles\test1 Domain: SMB-LDAP Account desc: System User Workstations: Munged dial: Logon time: 0 Logoff time: Fri, 13 Dec 1901 21:45:51 GMT Kickoff time: Fri, 13 Dec 1901 21:45:51 GMT 3 siehe hierzu auch den Teil zur Benutzerverwaltung mit LDAP 202 KAPITEL 12. SAMBA Password last set: Password can change: Password must change: Last bad password : Bad password count : Logon hours : Tue, 23 Nov 2004 01:49:59 GMT 0 Fri, 07 Jan 2005 01:49:59 GMT 0 0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Nun könnte der Admin noch eine Gruppe ”testgroup” wie im einführenden Beispiel des letzten Abschnitts anlegen: smbldap-groupadd.pl -a testgroup. Hatte man schon das Problem, dass smbldap-polulate.pl gepatcht werden musste, bleibt es einem für smbldap tools.pm nicht erspart: Ab Zeile 283 müssen zwei Zuweisungen hinzugefügt werden: objectClass => ’top’, objectClass => ’namedObject’, die die Objektklasse ”posixGroup” ergänzen. Treten weitere Probleme mit einem der anderen Tools auf, liegt es häufig an den Einstellungen zu den LDAP-Objekten. Ein letzter Test überprüft die korrekte Zuweisung der Gruppen: net groupmap list. Damit sollte nun das Setup abgeschlossen und ein PDC mit verändertem Backend aufgesetzt worden sein. Nun können Sie die Schritte wie im Abschnitt ”Samba als PDC” beschrieben wiederholen. Die Domäne heisst nun etwas anders, um den Unterschied herauszustellen. Für den Windows-Client ändert sich nicht viel (Abb. smbldap-domain ”Einfügen einer Windows-XP Maschine in eine Domäne mit Samba/LDAP-Backend” und ”Anmeldung an der neuen Domäne” Abb. xp-sambatestnetz). 12.7.4 Fazit von Samba-LDAP-Aktionen Der Aufwand für eine solche Aktion ist deutlich höher als ohne Verwendung von LDAP, da eine ganze Reihe von Schritten durchzuführen sind. Wegen der höheren Komplexität schleichen sich schneller Fehler ein. Ein Admin braucht schon eine Menge Geduld, um eventuell nicht passende Skripten anzupassen oder Software-Bugs zu umschiffen. Nicht jede Kombination von Samba und LDAP-Skripten funktioniert. Bei vermutlich jeder Distribution ist mit händischer Nach- und Anpassungsarbeit zu rechnen. Belohnt wird der Administrator am Ende jedoch von einer komfortablen Lösung zum bequemen Management einer WindowsDomäne ohne hierfür teure Microsoft-Server-Lizenzen beschaffen zu müssen. Fast nebenbei fällt ein elegantes ”single-password” für Windows- und Linuxmaschinen ab. Zusätzlich kann LDAP dazu benutzt werden zentrale Adressbücher bereitzustellen oder eine generelle Verwaltung bestimmter IT-Ressourcen zu realisieren. Kapitel 13 Ressourcenverwaltung 13.1 Einleitung In sehr grossen Netzen mit vielen gleichartigen Maschinen und vielen Benutzern, die sich an fast allen Maschinen anmelden können, ist die klassische dezentrale Verwaltung von Benutzern und Resourcen nicht mehr leistbar. 13.2 NIS 13.2.1 Zielsetzung Wenn ein lokales Netzwerk betrieben wird, besteht ein Ziel üblicherweise darin, allen Benutzern eine Umgebung zur Verfügung zu stellen, die überall gleich konfiguriert ist. Die Benutzer sollen ein einheitliches Homeverzeichnis vorfinden und überall den gleichen Account verwenden, für den das gleiche Passwort gültig ist. Hierzu sind die lebenswichtigen Daten wie Account-Informationen zwischen allen Hosts zu synchronisieren. Darüberhinaus lassen sich auch weitere Dateien synchronisieren, wie die /etc/hosts, /etc/services, /etc/groups ... Deshalb entwickelte Sun vor einiger Zeit NIS, das Network Information System. NIS bietet einfache Datenbank-Zugriffseinrichtungen, die verwendet werden können, um Informationen, wie sie in den Dateien passwd und groups enthalten sind, an alle Hosts im Netzwerk zu verteilen. NIS basiert auf RPC (Remote Procedure Call und besteht aus einem Server, einer Bibliothek für die Client-Seite und verschiedenen administrativen Tools. Bekannt wurde NIS unter dem Namen Yellow Pages (”Gelbe Seiten”), kurz YP, der heute immer noch häufig verwendet wird. Andererseits ist ”Yellow Pages” ein eingetragenes Warenzeichen, so daß Sun den Namen fallen ließ. Da der Begriff aber gut merkbar war, bleiben manche Namen einfach hängen, und so lebt YP als Präfix für die Namen der meisten NIS-Befehle wie ypserv, ypbind, ypset etc. weiter. 13.2.2 NIS-Datenbanken NIS hält seine Datenbank-Informationen in sogenannten Maps (etwa: Zuordnungen), die Key/Value-Paare in Hashtables speichern. Die Maps werden auf einem zentralen Host vorgehalten, auf dem der NIS-Server läuft. Clients können die Informationen dann von diesem Server über verschiedene RPC-Calls abrufen. Die Maps selbst werden normalerweise aus Master-Textdateien wie /etc/hosts oder /etc/passwd generiert. Aus manchen Dateien werden mehrere Maps generiert, jeweils eine pro Suchschlüssel. Zum Beispiel können Sie die Datei hosts nach einem Hostnamen ebenso 203 204 KAPITEL 13. RESSOURCENVERWALTUNG wie nach einer IP-Adresse durchsuchen. Entsprechend werden zwei NIS-Maps daraus erzeugt: hosts.byname und hosts.byaddr. Im folgenden wird eine Aufstellung der gängigen Maps sowie der Dateien, aus denen sie generiert werden, gezeigt: Master-Datei /etc/hosts /etc/networks /etc/passwd /etc/group /etc/services /etc/rpc /etc/protocols /etc/aliases Mapfile(s) hosts.byname, hosts.byaddr networks.byname, networks.byaddr passwd.byname, passwd.byuid group.byname, group.bygid services.byname, services.bynumber rpc.byname, rpc.bynumber protocols.byname, protocols.bynumber mail.aliases Tabelle 13.1: NIS-Maps 13.2.3 NIS-Server 13.2.4 NIS-Client Die Konfigurationsdatei für NIS ist yp.conf. # Syntax: # ypserver <Name_of_ypserver> ypserver 134.76.60.23 Der NIS-Domain-String enthalten in der DHCP-Variablen ”option-domain ”dxs”;” wird mittels des Kommandos ”domainname name der nis domain” eingetragen. Alternativ kann dieser Eintrag auch direkt nach /proc/sys/kernel/domainname geschrieben werden. 13.3 Hierarchische Datenbank: LDAP 13.3.1 Intro In verteilten Umgebungen werden Informationen über Personen, Anwendungen, Dateien, Drucker und andere, über das Netz zugängliche Ressourcen oft in einer speziellen Datenbank, einem sogenannten Directory gespeichert. Ein Directory Service ist ein Name Service, der neben der Zuordnung Name-Objekt auch Metadaten enthält. LDAP ist ein Kommunikationsprotokoll, das den Zugriff auf und die Aktualisierung von Directory Informationen regelt. Es ist ein offener Industriestandard und eine vereinfachte Alternative zum X.500 Standard. Die Netzwerkkommunikation wird mittels TCP/IP standardmäßig auf Port 389 abgewickelt. Es kann Bestandteil von Browsern, wie z.B. Netscape sein. Ursprünglich wurde die Entwicklung von Netscape vorangetrieben, um den eigenen Kunden ein übergreifendes Directory für Mail- und Webanwendungen anbieten zu können. Das Protokoll arbeitet im klassischen Client-Server-Modell und verwendet Strings zur Datendarstellung. X.500 wurde 1988 von der CCITT spezifiziert als ”eine Menge offener Systeme, die gemeinsam eine Datenbank halten, in der Informationen über Objekte der realen Welt abgelegt sind”. Die CCITT spezifiziert im wesentlichen drei Protokolle: DAP (Directory Access Protocol), das zum Zugriff auf die Informationen dient, DSP (Directory Service Protocol), mit dem die Kommunikation zwischen Servern durchgeführt wird, und DISP 13.3. HIERARCHISCHE DATENBANK: LDAP 205 (Directory Information Shadowing Protocol). Allerdings setzt X.500 auf einem vollständigen ISO/OSI-Stack auf, was einen durchschlagenden Erfolg unmöglich machte. X.500 kann als vollständig bezeichnet werden: Nichts, was nicht in ihm gespeichert werden könnte. Das Verzeichnis stellt eine Objektdatenbank dar. Zu speichernde Informationen werden in Objektklassen beschrieben: Attributnamen, Typen und deren Wertebereich. Wesentliche Nachteile sind der hohe Implementationsaufwand und der ”schwergewichtige” Zugriff: die Kommunikation zwischen Client und Server erzeugt eine recht hohe Netzlast, die einer allgegenwärtigen Nutzung hinderlich ist - denn schließlich spielt ein Verzeichnisdienst erst mit der allgemeinen Verwendung seine Stärken aus. LDAP schlägt eine Brücke. 13.3.2 Was kann mit LDAP abgebildet werden LDAP speichert seine Informationen in einer Baumhierarchie. Diese Hierarchie kann diverse Informationen enthalten. Einen Überblick verschafft RFC 2307, in dem mögliche Inhalte der LDAP Hierarchie spezifiziert sind: • Benutzer • Gruppen • IP-Dienste • IP-Protokolle • RPC’s • NIS-Netzwerkgruppen • Boot-Informationen • Einhängepunkte für Dateisysteme • IP-Hosts und Netzwerke • RFC 822 konforme Mail-Aliase Hat man Daten in Datenbanken, so ist es wichtig, diese Informationen zu strukturieren. Besonders, wenn viele verschiedene Clients auf die Datenbank zugreifen wollen, zum Beispiel Netscape, Outlook und andere, muss die Struktur genau definiert sein. Wenn ein Mailclient eine eMail-Adresse braucht, muss er wissen, wie er diese bekommt. Eine zentrale Benutzerverwaltung setzt das Vorhandensein einer geeigneten Authentifizierungsinfrastruktur auf jeder Maschine voraus. Hierfür wurde ursprünglich von SUN vor inzwischen knapp 15 Jahren das Network Information System (NIS) entwickelt, welches lange Zeit den Standard einer verteilten Benutzerauthentifizierung und -verwaltung im Unix-Umfeld darstellte. Dieses wird in einem eigenen Abschnitt kurz erklärt. Mit den heute üblichen heterogenen Umgebungen, deren vielfältigen Authentifizierungsanforderungen (z.B. die Anmeldung an einem Radius-Server für Modem- oder ISDN-Einwahl) und den gestiegenen Sicherheitsforderungen konnte NIS nicht mehr mithalten. Neben den inzwischen recht umfänglichen Daten, die die Verwaltung eines Benutzers erfodert, kommen weitere Wünsche nach einer zentralisierten Organisation von Rechner-Pools hinzu. Diese Daten sollen meist ebenfalls geeignet abgelegt und komfortabel zugänglich gemacht werden. Solche Aufgaben übernehmen ab einem bestimmten Umfang der Anforderungen Datenbanken. 206 13.3.3 KAPITEL 13. RESSOURCENVERWALTUNG Das Datenmodell Bevor eine Datenbank mit Inhalten bestückt wird, sollte sich der Administrator mit ihrer Funktionsweise grob vertraut machen. Das betrifft den Aufbau und die Ablage der Daten sowie das zugrundeliegende Kommunikationsmodell. Es gibt immer eine einzige Wurzel “root” eines Directories. Diese kann später weder verschoben noch verändert werden. Unterhalb von Root kann entweder ein Country-Objekt ’c’ oder oder eine Organisation ’o’ angelegt werden. Ein Country-Objekt muss nicht, darf aber nur einmal existieren. Unterhalb von Country oder Root muss ein Organisationsobjekt ’o’ stehen. Davon kann es mehrere geben. Unterhalb von ’o’ folgen Blattobjekte, die Einträge oder Organisationsuntereinheiten ’ou’. Einzelne Einträge werden vielfach durch ihren Common Name ’cn’ bezeichnet. Alternativ zur beschriebenen Hierarchie hat sich die Bezeichnung durch Domain Components durchgesetzt. Die Wurzel wird beginnend mit der Toplovel-Domain des Domain Name Service bezeichnet, in den darunterliegenden Hierachien folgen Second-Level-Domain und vergleichbar mit den Organizational Units Sublevel-Domain-Namen. Jedes Objekt im Verzeichnis muss einen eindeutigen Namen, den “Distinguished Name” ’dn’ haben. Der ’dn’ setzt sich aus den ’dn’ von der Wurzel aus zusammen, häufig wird der Common Name zur Benennung verwendet. Einträge in einem Objekt werden als Attribute bezeichnet. Ein Attribut ist der bereits angesprochene Common Name. Für eine einfache Benutzerverwaltung benötigt ein Linux-Sytem, wenn der Common Name den Realnamen einer Person oder Dienstes bezeichnet, noch einen eindeutigen String, welcher die User-ID bezeichnet, eine eindeutige Benutzer- und Gruppennummer, ein Homeverzeichnis, eine Loginshell und eventuell ein Passwort. Zusätzliche Daten, wie Telefonnummer, Emailadresse, persönliche Webseite, Büro und weiteres können gespeichert werden, wenn aus der Datenbank auch die Adressbücher der Mitarbeiter gefüttert werden sollen. Ist der übergeordnete Container für das jeweilige Objekt bereits bestimmt, genügt zur Angabe auch ein “Relative Distinguished Name” ’rdn’. Der Distinguished Name kann mit dem Primärschlüssel einer relationalen Datenbank verglichen werden. Jeder Directory-Eintrag beschreibt ein Objekt, welches eine Person, eine Verwaltungseinheite oder auch ein Server, Drucker usw. sein kann. Jeder Eintrag hat einen ausgezeichneten bzw. herausgestellten Namen, den distinguished name abgekürzt dn. Ein Eintrag kann eine Reihe weiterer Attribute besitzen, die einen Typ und einen bzw. mehrere Werte haben. Syntax bin ces cis tel dn Bedeutung Daten im Binärformat, Bilder, Ausführbare Dateien CaseSensitive, Textfelder CaseInSensitive, Textfelder Telefonnummer Distinguished Name Tabelle 13.2: Attribute im LDAP Auf Basis dieser Attribute sind allgemeine Eintragsschemata definierbar. Hierbei implementiert LDAP folgendes Namensmodell: Jeder ausgezeichnete Name (dn) besteht aus einer Sequenz von Teilen, die als relativ ausgezeichnete Namen bezeichnet werden. Alle Einträge sind hierarchisch eingeordnet. Ein Beispiel eines dn: cn=Sandra Buchfing, ou=Informatik,o=Universität Freiburg,c=DE. Diese Informationen bzw. Teilbäume können dann über mehrere Server verteilt sein. Es gibt viele Definitionen, an die man sich halten muss, soll am Ende auch etwas funktionieren. Bei LDAP werden Objekte mit Eigenschaften verwendet. Jedes Objekt hat zunächst 13.3. HIERARCHISCHE DATENBANK: LDAP Attribute CommonName Alias cn surname sn TelephoneNumber organizationalUnit ou Organization o Country Owner c dn Syntax cis Beschreibung Name eines Eintrages cis Nachname einer Person tel Telefonnummer cis Name einer Abteilung cis Name der Organisation cis Name des Landes Ausgezeichneter cn=Sandra BuchName des Ein- fink, o=Universität tragbesitzers Freiburg,c=DE 207 Beispiel Sandra Buchfink Buchfink 01-12345 Informatik Universität Freiburg Deutschland, DE Tabelle 13.3: Beispiel einen eindeutigen Namen, an dem es von allen anderen unterschieden werden kann (“distinguished name”, kurz: DN). Die Eigenschaften eines Objekts hängen davon ab, zu welcher Klasse es gehört (es kann sogar zu mehreren Klassen gehören). Klassen von Objekten Es sind nun Klassen für Personen definiert. Zu einer Person (”person”) gehören zwingend objectClass (die Objektklasse selbst), sn (der Nachname) und cn (commonName, etwa: üblicher Name, hier wird üblicherweise Vor- und Nachname verwendet). Zusätzlich gibt es optionale Attribute, die nicht unbedingt angegeben werden müssen. Diese sind hier description (beliebige Beschreibung), seeAlso (verweist auf ein anderes Objekt), telephoneNumber (Telefonnummer), userPassword (ein Password). Da häufig noch mehr Attribute mit einer Person verknüpft sind, gibt es auch eine Objektklasse organizationalPerson. Diese hat die gleichen geforderten Eigenschaften wie Person, aber erlaubt viele optionale Eigenschaften, wie zum Beispiel Felder der Adresse und eine FAX-Nummer. Es gibt noch mehr Klassen, zum Beispiel newPilotPerson (die als optionale Eigenschaft eine eMail-Adresse mail einführt) und natürlich Klassen für Organisationen/Firmen, Abteilungen, Bilder, Dokumente, Geräte und so weiter. Eigenschaften von Klassen Wenn man also irgendwo eine Person im Verzeichnis hat, ist klar, dass diese ein cn haben muss, und eine Telefonnummer haben kann (und dass diese genau telephoneNumber heißt). Soll ein Programm eine eMail-Addresse suchen, muss es nur nachschauen, ob es ein Attribut mail gibt. Es kann eben nicht sein, dass diese Eigenschaft email oder anders heißt. mail ist vorgeschrieben, und nichts anderes. An diesem Beispiel kann man zeigen, dass eine natürliche Person zu mehreren Klassen gehört: person, organizationalPerson und newPilotPerson. Eine weitere Klasse ist top. Im Prinzip gehört so ziemlich jedes Objekt auch zur Klasse top, die lediglich vorschreibt, dass die Eigenschaft objectClass gesetzt sein muss (was bei allen Personenklassen ohnehin gefordert ist). Durch das Verwenden der Klassen definiert man, welche Eigenschaften vorhanden sein müssen, und welche vorhanden sein können. Eine Person darf zum Beispiel keine Farbtiefe haben, ein Bild hingegen schon. Verwendet man mehrere Klassen, so muss das entsprechende Objekt alle von mindestens einer Klasse geforderten Eigenschaften haben, und kann alle insgesamt erlaubten Eigenschaften haben. 208 KAPITEL 13. RESSOURCENVERWALTUNG Typen von Eigenschaften Den Eigenschaften sind Typen zugeordnet. Es gibt Typen, die eine Zeichenkette enthalten, und andere, die eine Telefonnummer enthalten. Diese Typen definieren weiterhin, wie Werte verglichen (und damit sortiert und gesucht) werden. Zeichenketten beispielsweise kann man abhängig von Groß- und Kleinschreibung vergleichen oder auch nicht. Bei Telefonnummer spielen gewisse Füllzeichen möglicherweise keine Rolle. Passwörter hingegen müssen genau übereinstimmen. Es gibt nun also Objekte (die zu bestimmten Klassen gehören). Diese werden nun anderen Objekten untergeordnet (beziehungsweise werden anderen Objekte viele zugeordnet, dies ist die richtige Reihenfolge). Diese baumartige Struktur kann man (mit etwas Phantasie) auch in der Realität finden: In Ländern gibt es Firmen, in Firmen gibt es Abteilungen und in Abteilungen letztlich Personen. So wird das in LDAP auch gesehen. Die Baumstruktur wird hier “Directory Information Tree” genannt, kurz DIT. Es gibt Länder (also Objekte der Klasse country [Land]) mit u.A. der Eigenschaft c (kurz für country), Firmen (organisations mit der Eigenschaft o), Abteilungen (Organisations Einheit, organisationalUnit mit der Eigenschaft ou). Hierbei enthalten diese Objekte normalerweise viele weitere Eigenschaften; eine Firma hat zum Beispiel eine Postanschrift. Schema Ein Schema ist eine Sammlung von Strukturdefinitionen. Dazu gehören die Beschreibungen vieler Klassen und der verwendeten Typen. Es gibt verschiedene Schemata, und es ist möglich, eigene zu definieren (oder bestehende zu erweitern) was jedoch nicht interoperabel mit anderen Diensten sein muss. Das liegt außerhalb der Betrachtungen dieses Textes. Der LDAP-Server speichert seine Informationen in einer baumartigen Struktur. Diese wird auch “Directory Information Tree” genannt, kurz DIT. Root dn: dc=local dn: dc=wg,dc=local rdn: ou=user rdn: ou=group rdn: ou=devices dn: uid=test01,ou=user,dc=wg,dc=local (rdn: uid=test01) dn: uid=test02,ou=user,dc=wg,dc=local (rdn: uid=test02) dn: uid=... Abbildung 13.1: Aufbau der LDAP-Datenstruktur für die Beispielkonfiguration Zum Speichern benutzt der LDAP-Server Objekte, die er mit Attributen versehen kann. Dadurch kann man die Struktur flexibel an die eigenen Bedürfnisse anpassen. Das RFC 2256 spezifiziert die Standard-Objekte des LDAP-Servers. Man wird zwar von niemandem gezwungen, diese Vorgaben auch zu benutzen. Um aber eine möglichst große Konformität zu erzielen, sollte man diese Vorgaben einhalten. 13.4. LDAP PRAKTISCH 13.3.4 209 Das Protokoll LDAP ist ein Kommunikationsprotokoll, das den Zugriff auf und die Aktualisierung von Directory Informationen regelt. Es ist ein offener Industriestandard und eine vereinfachte Alternative zum X.500 Standard. Die Netzwerkkommunikation wird mittels TCP/IP standardmäßig auf Port 389 abgewickelt. Es kann Bestandteil von Browsern, wie z.B. Netscape sein. Ursprünglich wurde die Entwicklung von Netscape vorangetrieben, um den eigenen Kunden ein übergreifendes Directory für Mail- und Webanwendungen anbieten zu können. Das Protokoll arbeitet im klassischen Client-Server-Modell und verwendet Strings zur Datendarstellung. Das Protokoll definiert insgesamt neun Operationen: 1. bind - Verbinden mit einem LDAP-Server 2. authenticate - Anmeldung mit einer bestimmten ID, sonst erfolgt eine anonyme Bindung (welche üblicherweise den niedrigsten Privilegienlevel hat) 3. unbind - Verbindung mit dem Server geregelt beenden 4. abandon - Verbindung mit dem Server (ungeregelt) abbrechen 5. add - Hinzufügen von Objekten und Attributen 6. search - Suchen 7. modify - Ändern von Objekten und Attributen 8. compare - Vergleich 9. delete - Löschen von Objekten oder Attributen Die ersten vier Operationen dienen zum Verbinden, Abmelden und wechseln des Benutzerlevels. Mit verschiedenen Benutzerleveln sind üblicherweise verschiedene Zugriffsrechte verknüpft. Der Datenbank-Administrator, der mit rootdn in der Konfigurationsdatei angegeben wird, hat immer alle Rechte. LDAP erlaubt die Vergabe von Zugriffsrechten auf bestimmte Einträge und Attribute seiner Datenbasis. ’None’ erteilt keine Rechte, ’compare’ erlaubt Vergleiche. Es liefert wahr oder falsch für den Passwort-Check zurück, so muss das Passwort zum Vergleich die Datenbank nie verlassen. ’search’ gestattet das Suchen. ’read’ für Lesen ist die Kombination von ’compare’ und ’search’, ’write’ erlaubt das Schreiben und ’delete’ das Löschen von Attributen und Einträgen. 13.4 LDAP praktisch 13.4.1 Server- und Clientprogramme unter Linux Es existieren eine ganze Reihe von verfügbaren Produkten, die hierarchische Verzeichnisdienste nach dem LDAP-Standard definieren. Wie bei fast allen offenen Standards existiert mit dem OpenLDAP eine freie Implementierung, welche unter der GPL zur Verfügung steht. Der Daemon unter Linux heisst slapd und findet sich je nach Distribution unterhalb des Diensteverzeichnisses /usr/sbin. Die zentrale Konfigurationsdatei des LDAP-Servers slapd.conf befindet sich üblicherweise unterhalb von /etc/openldap. Die Datenbankdateien 210 KAPITEL 13. RESSOURCENVERWALTUNG landen üblicherweise unterhalb von /var/lib/ldap. Dieses Verzeichnis wird in der slapd.conf spezifiziert und kann dort entsprechend geändert werden. Mit dem LDAP-Paket werden eine Reihe von Userspace-Utilities mitinstalliert. Die beiden Programme slapadd und slapcat eignen sich für direkte Transformation des LDIFFormats in das Datenbankformat und umgekehrt. Dazu wird kein laufender Server benötigt. Für Operationen auf der LDAP-Datenbank finden sich die Werkzeuge ldapsearch, ldapadd, ldapdelete und ldapmodify. Diese implementieren die im Abschnitt zum Protokoll genannten Operationen. 13.4.2 Eine einfache Beispielkonfiguration Damit ein erster kleiner Eindruck gewonnen werden kann wie LDAP funktioniert, folgt ein einfaches Beispiel für eine kleine Benutzerverwaltung. Dazu wird ein LDAP-Server auf der Maschine eingerichtet, auf der sich die beiden Benutzer test01 und test02 anmelden sollen. Dieses Setup erfordert keine verschlüsselten Verbindungen, da die gesamte Kommunikation über das Loopback-Interface1 abgewickelt wird. Die Serverkonfigurationsdatei /etc/openldap/slapd.conf könnte wie folgt aussehen: # LDAP Server Konfigurationsdatei: /etc/openldap/slapd.conf include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema pidfile argsfile /var/run/slapd/slapd.pid /var/run/slapd/slapd.args access to attr=userpassword by anonymous auth by self write access to attr=objectclass,entry,mail,cn,sn,loginShell,userPassword by self write by * read access to attr=objectclass,entry,uid,mail,cn,sn,uidNumber,gidNumber,\ homeDirectory,loginShell by * read access to * by users read by anonymous auth database ldbm directory /var/lib/ldap suffix "dc=wg,dc=local" rootdn "cn=Manager,dc=wg,dc=local" rootpw nicht-weitersagen Nachdem die Konfigurationsdatei angelegt, die Existenz des Datenverzeichnisses und dessen Rechte überrüft wurden, kann der Dienst einfach einmal gestartet werden: 1 Interfacename: lo, IP-Adresse: 127.0.0.1 13.4. LDAP PRAKTISCH 211 /usr/lib/openldap/slapd -f /etc/openldap/slapd.conf -h ldap://127.0.0.1:389 -u ldap -g ldap In der Log-Datei /var/log/message kann der Erfolg der Aktion überprüft werden. Hier landen Meldungen zu Fehlern in der Konfigurationsdatei. Die Datei für die Einrichtung der Clientkommandos und das PAM-Modul: /etc/openldap/ldap.conf sollte die folgenden Zeilen enthalten: # LDAP Client Konfigurationsdatei: /etc/openldap/ldap.conf BASE dc=wg,dc=local URI ldap://127.0.0.1:389 Nun verbindet sich das Suchkommando ldapsearch -x schon mit der Datenbank. Es liefert jedoch noch keine Daten zurück, solange die Datenbank noch nicht gefüllt wurde. Am schnellsten geht die Bestückung der Datenbank durch das Anlegen einer Datei im LDAPAustauschformat LDIF (Lightwight Directory Interchange Format). Die Objekte werden von der Wurzel aus folgend definiert und eingetragen: # LDIF-Datei zur Definition von zwei Beispielnutzern: user.ldif dn: dc=wg, dc=local objectClass: organization o: wg dn: ou=user, dc=wg, dc=local ou: user objectclass: organizationalUnit dn: ou=group, dc=wg, dc=local ou: group objectclass: organizationalUnit dn: cn=user, ou=group, dc=wg, dc=local objectClass: posixGroup objectClass: top cn: user userPassword: crypt gidNumber: 100 dn: uid=test01, ou=user, dc=wg, dc=local uid: test02 cn: Test-User Nr. 1 sn: Test-User 1 objectclass: person objectclass: posixAccount objectclass: shadowAccount objectclass: top userPassword: secret shadowLastChange: 11472 shadowMax: 99999 shadowWarning: 7 uidNumber: 1001 212 KAPITEL 13. RESSOURCENVERWALTUNG gidNumber: 100 homeDirectory: /home/test02 loginShell: /bin/ksh dn: uid=test02, ou=user, dc=wg, dc=local uid: test02 cn: Test-User Nr. 2 sn: Test-User 2 objectclass: person objectclass: posixAccount objectclass: shadowAccount objectclass: top userPassword: topsecret shadowLastChange: 11472 shadowMax: 99999 shadowWarning: 7 uidNumber: 1002 gidNumber: 100 homeDirectory: /home/test02 loginShell: /bin/bash Die Übertragung des LDIFs in die laufende Datenbank geschieht mittels des Kommandos: ldapadd -c -x -D ”cn=Manager,dc=wg,dc=local” -W -f user.ldif. Hier findet man den Datenbank-Manager-Account wieder, der in der Serverkonfigurationsdatei angegeben wurde. Beim Aufruf des Kommandos folgt die Frage nach dem zugehörigen Passwort. Nun liefert ldapsearch -x bereits einiges mehr. Die Daten, die zu sehen sind, sind diejenigen, welche für den anonymen Zugriff freigeben sind. Soll der vollständige Datensatz angezeigt werden, gibt man die Datenbank-Manager-Credentials mit: ldapsearch -x D ”cn=Manager,dc=wg,dc=local” -w nicht-weitersagen. Dabei fällt auf, dass die Ausgabe im bereits bekannten LDIF-Format erfolgt. Der nächste Schritt ist nun die Einrichtung der PAM-Authentifizierung gegen die frisch eingerichtete LDAP-Datenbank. Dazu wird als Beispiel das PAM-Modul für den SSH-Login angepasst: # /etc/pam.d/sshd auth required auth sufficient auth required account required password required password required password required session required session required session required session optional pam_nologin.so pam_ldap.so pam_unix2.so pam_unix2.so pam_pwcheck.so pam_ldap.so pam_unix2.so pam_unix2.so pam_limits.so pam_env.so pam_mail.so use_first_pass # set_secrpc use_authtok use_first_pass use_authtok Weiterhin muss nun noch dem Name Service Switch die alternative zu den klassischen Dateien passwd und shadow mitgeteilt werden: # /etc/nsswitch.conf 13.4. LDAP PRAKTISCH 213 [ ... ] passwd: files ldap group: files ldap [ ... ] Anschliessend benötigt der Name Service Caching Daemon (nscd) eventuell noch einen Neustart und ein einfacher Test mit einem SSH-Login-Versuch kann erfolgen. Dieses sollte nun funktionieren, jedoch steht noch kein Homeverzeichnis zur Verfügung. Die Liste der mittels LDAP zur Verfügung gestellten Benutzerkennungen kann mittels getent angezeigt werden. Diese Einträge erscheinen nach den Daten aus der /etc/passwd. 13.4.3 Absicherung durch SSL Wenn die Datenkommunikation über das Loopback-Interface direkt auf der Maschine stattfindet, ist die Sicherheit der übertragenen Daten ausreichend gewährleistet. Anders sieht es aus, wenn LDAP-Pakete über ein Ethernet gehen. Deshalb kann eine LDAP-Verbindung analog zu einer HTTP-Verbindung den Secure-Socket-Layer (SSL) verwenden. Wegen der notwendigen Zertifikats- und Schlüsselerstellung bzw. -verwaltung gestaltet sich dieses etwas aufwändiger. Der schnellste Weg ginge über die Generierung eines selbstunterschriebenen Serverzertifikats. Da jedoch eine Reihe von Fehlern auftreten können und LDAP selbstunterschriebene Zertifikate bemängelt, wird von diesem Weg abgeraten. Besitzt man bereits ein von einer Certificate Authority (CA) unterschriebenes Serverzertifikat, kann man den nächsten Schritt überspringen. Da diese Zertifikate Geld kosten und in regelmäßigen Abständen verlängert werden müssen, besitzen meistens nur Betreiber großer Webserver solche. Das OpenSSL-Paket liefert die Lösung für dieses Problem mit ein Shell-Skript führt durch die Einrichtung einer eigenen CA. Dazu wird ein eigenes Verzeichnis angelegt, z.B. /etc/LocalCA. In diesem Verzeichnis startet der Aufruf von /usr/share/ssl/misc/CA.sh -newca (der angegebene absolute Pfad kann je nach Distribution variieren) die Einrichtung der CA: CA certificate filename (or enter to create) Making CA certificate ... Using configuration from /etc/ssl/openssl.cnf Generating a 1024 bit RSA private key ...........++++++ ...........................................................++++++ writing new private key to ’./demoCA/private/./cakey.pem’ Enter PEM pass phrase: Verifying password - Enter PEM pass phrase: ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ’.’, the field will be left blank. ----Country Name (2 letter code) [AU]:DE 214 KAPITEL 13. RESSOURCENVERWALTUNG State or Province Name (full name) [Some-State]:BaWue Locality Name (eg, city) []:Freiburg Organization Name (eg, company) [Internet Widgits Pty Ltd]:WG Organizational Unit Name (eg, section) []:WG-LDAP Common Name (eg, YOUR name) []:wg.local Email Address []:. Für den Dateinamen kann mit Enter einfach ein Defaultwert übernommen werden, alle anderen Abfragen können wie oben gezeigt ausgefüllt und mit entsprechenden Werten übernommen werden. Das Passwort zur Absicherung der Schlüssel sollte sich für später gemerkt werden. Im definierten Verzeichnis finden sich unter demoCA/cacert.pem und demoCA/private/cakey.pem das Zertifikat unserer CA und der private Schlüssel. Im nächsten Schritt wird das Serverzertifikat generiert: openssl req -newkey rsa:1024 -nodes -keyout newreq.pem -out newreq.pem Using configuration from /etc/ssl/openssl.cnf Generating a 1024 bit RSA private key ............................++++++ ..........................................................++++++ writing new private key to ’newreq.pem’ ----You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ’.’, the field will be left blank. ----Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:BaWue Locality Name (eg, city) []:Freiburg Organization Name (eg, company) [Internet Widgits Pty Ltd]:WG Organizational Unit Name (eg, section) []:WG-LDAP Common Name (eg, YOUR name) []:wg.local Email Address []:. Please enter the following ’extra’ attributes to be sent with your certificate request A challenge password []:<passwort> An optional company name []:. Im großen und ganzen wiederholen sich die Abfragen der CA-Erstellung. Die zusätzlichen Attribute können leer gelassen werden. Dieses geschieht durch die Angabe eines Punktes ”.”. Als Ergebnis existiert nun eine Datei newreq.pem im aktuellen Verzeichnis. Nun muss der neuerzeugte Schlüssel noch von unserer CA signiert werden. Hierzu kommt das bereits von der CA-Erstellung bekannte Skript zum Einsatz: /usr/share/ssl/misc/CA.sh -sign Using configuration from /etc/ssl/openssl.cnf Enter PEM pass phrase:<passwort der CA> Check that the request matches the signature 13.4. LDAP PRAKTISCH 215 Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:’DE’ stateOrProvinceName :PRINTABLE:’BaWue’ localityName :PRINTABLE:’Freiburg’ organizationName :PRINTABLE:’WG’ organizationalUnitName:PRINTABLE:’WG-LDAP’ commonName :PRINTABLE:’wg.local’ Certificate is to be certified until Jun 16 09:07:05 2004 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=BaWue, L=Freiburg, O=WG, OU=WG-LDAP, CN=wg.local Validity Not Before: Jun 17 09:07:05 2003 GMT Not After : Jun 16 09:07:05 2004 GMT Subject: C=DE, ST=BaWue, L=Freiburg, O=WG, OU=WG-LDAP, CN=wg.local Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:a4:03:ef:1b:5d:20:2b:bd:03:f7:ce:9e:5a:f2: f4:58:9a:f1:7f:9c:20:fc:ab:a7:b6:b7:41:4c:7f: 14:e8:79:20:ba:1c:c6:1a:26:ad:d1:28:6e:60:99: c7:99:1f:3d:7c:9c:77:6a:f9:5a:63:f7:b1:e7:94: dc:10:66:8b:a6:8f:11:4d:17:7b:98:85:ce:a4:bc: e9:1c:24:f8:ee:eb:3e:c7:50:7f:68:53:be:b5:7a: e8:cb:d3:db:34:31:eb:04:67:96:8c:e5:6c:d0:7b: e7:cb:21:0a:a3:97:7c:e3:9c:73:53:1d:8e:c1:6d: 61:58:9c:c6:f5:df:94:f9:63 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 95:5F:39:05:C4:99:9A:FC:83:26:B2:F8:8E:2E:55:CC:D6:65:C2:9F X509v3 Authority Key Identifier: keyid:DC:B2:AA:81:3C:96:A4:1D:8A:8C:BE:A8:79:85:62:22:BF: \ F1:3B:FF 216 KAPITEL 13. RESSOURCENVERWALTUNG DirName:/C=DE/ST=BaWue/L=Freiburg/O=WG/OU=WG-LDAP/CN=wg.\ local serial:00 Signature Algorithm: md5WithRSAEncryption 64:2f:46:48:e2:2b:e9:d4:99:47:5e:35:69:d2:1c:8f:33:c5: [ ... einige weitere Zeilen ... ] 7c:9f:b2:ee:da:dc:26:fc:08:6f:2e:e6:07:4c:72:b0:88:89: d8:3a -----BEGIN CERTIFICATE----MIIDJTCCAo6gAwIBAgIBATANBgkqhkiG9w0BAQQFADBiMQswCQYDVQQGEwJERTEO MAwGA1UECBMFQmFXdWUxETAPBgNVBAcTCEZyZWlidXJnMQswCQYDVQQKEwJXRzEQ [ ... etliche Zeilen ... ] 1qZZj7c5u5UJHrngC/fRUr5nCgI0fJ+y7trcJvwIby7mB0xysIiJ2Do= -----END CERTIFICATE----Signed certificate is in newcert.pem Damit liegt nun mit newcert.pem das Server Zertifikat unterschrieben von der eigenen CA mit dem privaten Schlüssel newreq.pem vor. Nun ist alles soweit vorbereitet und das Zertifikat kann in das entsprechende Verzeichnis für den Zugriff des LDAP-Servers verschoben werden. Dazu wird das Verzeichnis /etc/openldap/certificates erzeugt und die Zertifikate dort hineinkopiert oder -bewegt. cp demoCA/cacert.pem /etc/openldap/certificates/cacert.pem mv newcert.pem /etc/openldap/certificates/servercrt.pem mv newreq.pem /etc/openldap/certificates/serverkey.pem chmod 400 /etc/openldap/certificates/serverkey.pem chown -R ldap.ldap /etc/openldap/certificates Das letzte Kommando übergibt dem LDAP-Nutzer die Rechte für das Verzeichnis, da sonst der Serverschlüssel vom LDAP-Daemon nicht gelesen werden kann. In einem solchen Fall öffnet der Server keinen SSL-Port und hinterläßt eine Fehlermeldung in der Log-Datei. Nun müssen noch drei Zeilen am Anfang der Server-Konfigurationsdatei slapd.conf eingefügt werden: TLSCertificateFile /etc/openldap/certificates/servercrt.pem TLSCertificateKeyFile /etc/openldap/certificates/serverkey.pem TLSCACertificateFile /etc/openldap/certificates/cacert.pem Der Aufruf des LDAP-Daemon sieht nun etwas anders aus: /usr/lib/openldap/slapd -f /etc/openldap/slapd.conf -h ldaps://10.8.4.254:636 -u ldap -g ldap Zum einen wird mittels ldaps://10.8.4.254:636 das abgesicherte Protokoll gewählt und zum anderen kann nun der Server für die netzweite Benutzung zur Verfügung gestellt werden. Damit wie eingangs gezeigt die LDAP-Client-Programme wieder bequem funktionieren, wird eine Anpassung der ldap.conf erforderlich: BASE ou=user,dc=wg,dc=local URI ldaps://10.8.4.254:636 SASL_SECPROPS noactive TLS hard TLS_REQCERT allow 13.4. LDAP PRAKTISCH 217 Nun liefert der Aufruf der Kommandos ldapsearch -x oder getent passwd wieder die eingangs gezeigten Ausgaben. Dabei beschränkt sich dieses nicht mehr auf den Server selbst, sondern kann von jeder beliebigen Maschine im Netzwerk geschehen, wenn die Dateien ldap.conf und nsswitch.conf entsprechend eingerichtet wurden. 218 KAPITEL 13. RESSOURCENVERWALTUNG Kapitel 14 Drucken im Netz 14.1 Einleitung Zum Drucken unter Unix gibt es verschiedene Ans”atze: • BSD-System • System V • CUPS Das BSD-System ist historisch gesehen das ”alteste und war lange bei SUN-Systemen im Einsatz. Das System V Drucksystem sollte mehr den Bed”urfnisse grosser Unternehmen gerecht werden, ist aber sehr kompliziert. Cups (Common UNIX Printing System) versucht die beiden Ans”atze zu verbinden und implementiert das Internet Printing Protocol, das als neuer Standard entwickelt wurde. 14.1.1 Anforderungen Folgende Anforderungen werden an ein Drucksystem gestellt? Zum einen sollten alle lokal anschließbaren Drucker funktionieren: • USB • Parallel • Seriell • Irda • Bluetooth Zum anderen sollten alle Drucker im Netz verwendbar sein: • Ethernet-Drucker • Lokale Drucker an anderen LINUX/UNIX/MAC-Systemen • Lokale Drucker an Windows-Systemen Desweitern sollte ein Drucker m”oglichst viele Dateiformate annehmen und direkt verarbeiten k”onnen. Hier besteht ein wesentlicher Unterschied zu MS-Windows-Systemen. Dort gibt es nur das Programm print im Kommandomodus, das direkt Textdateien ausdruckt. Das Kommando lpr unter Linux war urspr”unglich auch nur f”ur Textdateien ausgelegt, wurde aber durch Erweiterung um Filter flexibel. (s. Kap. 14.2.4) 219 220 KAPITEL 14. DRUCKEN IM NETZ 14.1.2 Grundlagen Das Linuxdrucksystem basiert auf einem Filtermechanismus, an dessen Anfang das Dokument, am Ende das Device (z. B. /dev/lp0 = parallele Schnittstelle) steht. Das Druckkommando ist lpr (Line Printer). Mit lpr textdatei wird eine Textdatei auf den Standarddrucker gedruckt. Mit export PRINTER=color wird der Standarddrucker auf color gesetzt. Falls man einen anderen als den Standarddrucker verwenden möchte, kann kann man den gewünschten Drucker beim Aufruf mitangeben: lpr -Pdruckername textdatei Aber was genau passiert nach einem solchen Aufruf? Beim Aufruf von lpr werden die angegebenen Optionen interpretiert und angewendet. Anschliessend sorgt lpr dafür, dass die Datei in das Spoolverzeichnis des angegebenen Druckers geschickt wird. Der Spooler (früher lpd, heute meist LPRng nimmt den Druckauftrag entgegen und gibt einen Druckjob aus. In diesem Prozess werden die Ausgabeformate der jeweiligen Anwendung durch die Filter in ein Druckformat umgewandelt. Welches Druckformat der Drucker verwendet geht aus der PPD-Datei (PostScript Printer Description) hervor. Die PPD-Datei ist eine Textdatei, in der die anzuwendenden Filter gelistet sind. Die PPD-Dateien werden meist schon beim Installieren des Betriebssystems zur Verfügung gestellt. Auch CUPS stellt eine Reihe von PPD-Dateien zur Verfügung. Die Arbeit der Filter besteht darin, das Ausgabeformat automatisch zu erkennen und ein geeignetes Konvertierungsprogramm aufzurufen, um die Datei in PostScript umzuwandeln. Nachdem der Spooler den Druckauftrag entgegengenommen hat und die Filter die Datei in das Druckformat umgewandelt haben, befindet sich der Druckjob in der Warteschlage, der sogenannten Queue. Mit dem Befehl lpq kann man sich alle Druckjobs ausgeben lassen. Der Drucker bekommt die Druckjobs aus der Queue und druckt den PostScript-Code. Hierzu bedarf es eines Raster-Image-Prozessors (RIP), der für die Ausgabe des PostScriptCodes sorgt. Bei PostScript-fähigen Druckern ist der RIP im Drucker integriert, bei nichtPostScript-kompatiblen Druckern wird ein Post-Script-Interpreter benötigt, der aus den PostScript-Informationen ein Datenformat erzeugt, das vom jeweiligen Drucker verstanden wird. Dieser Interpreter wird durch den druckerspezifischen Treiber zur Verfügung gestellt. Die Funktionsweise des Treibers geht aber natürlich über das Erzeugen des richtigen Datenformates weit hinaus. Aufgabe des Treibers ist es, die zu druckende Datei mit all den Informationen zu ergänzen, die für die optimale Nutzung der Hardware nötig sind. Diese Beschreibung der Funktionsweise des Drucksystems ist natürlich stark vereinfacht. Anhand der genaueren Betrachtung des CUPS (Common Unix Print System) werden die Zusammenhänge detailliert beschrieben werden. Unter den verschiedenen Systemen zur Konfiguration und Administration des Drucksystems unter Linux wird das CUPS am häufigsten verwendet. Es eignet sich sowohl für die Konfiguration von Einzelplatz Rechnern/Druckern, als auch für komplizierte Systeme im Netzwerk. 14.2 CUPS Im CUPS (Common Unix Printing System) übernimmt der cupsd die Aufgaben des lpd: Annehmen der Druckaufträge, ggf. Weiterleiten an die entsprechenden Filter, Einreihen in die Warteschlage und Aufruf des passenden Backends, das die fertigen Jobs in passender Form an den Drucker gibt. Der cupsd implementiert den neuen Standard IPP (Internet Printing Protocol) und stellt somit folgende zusätzliche Funktionalität zur Verfügung: • Authentifizierung von Benutzern 14.2. CUPS 221 • Verschlüsselung der Druckdaten bei der Übertragung • Bekanntgabe verfügbarer Drucker im Netz IPP ist ein Protokoll der Anwendungsschicht und kann für verteiltes Drucken im Interund Intranet verwendet werden. Das Protokoll definiert die Interaktion zwischen CUPSServer und -Client und ermöglicht dem Client Abfragen von Druckerinformationen. 14.2.1 Client-Server-Architektur Im CUPS ist jeder Rechner, an den ein Drucker angeschlossen ist, ein Server. Rechner, die entfernte Drucker nutzen wollen, sind Clients. Ein Standalone-Rechner, an dem ein Drucker angeschlossen ist, der mit CUPS verwaltet wird, ist sozusagen ein Client, der sein eigener Server ist. Jeder Server ist selbst für die Aufbereitung der Druckjobs zuständig, d.h. jeder Server muss sowohl die für das Druckformat des Druckers nötigen Filter, als auch den entsprechenden Treiber selber zur Verfügung stellen. Sämtliche gerätespezifischen Informationen gehen aus der PPD-Datei hervor (PostScript Printer Description), die mit dem Druckertreiber mitgeliefert wird. Durch die Verwendung des IPP, lässt sich der CUPS Dämon wie ein Webserver ansprechen. CUPS-Rechner kommunizieren über den IPP-Port 631. Der Zugriff auf das Webinterface erfolgt folglich über den Browser durch den Aufruf http://localhost:631/. An diesen Port werden nicht nur die Druckdaten geschickt, sondern auch viele weitere Informationen. Da IPP auf HTTP 1.1 beruht, ist die Konfigurationsdatei /etc/cups/cupsd.conf der httpd.conf sehr ähnlich. Die wichtigsten Einstellungen werden in Kapitel 14.2.5 erläutert. Eine weitere Besonderheit von CUPS sind die Backends. Sie sorgen für den Versand von Druckdaten zu den Ausagbegeräten oder anderen Servern. Die CUPS-Backends ermöglichen die Verbindung über verschiedene Schnittstellen und Protokolle mit dem Server. Für jedes Protokoll (parallel, seriell, USB oder Neztwerk) ist ein eigenes Backend zuständig. Die CUPS-Backends erlauben so, Druckjobs an alle herkömmlichen Drucker zu schicken. Abbildung 14.1: Cupsdiagramm 14.2.2 IPP IPP ist ein Protokoll der Anwendunsschicht und wird in erster Linie für verteiltes Drucken im Netz verwendet. Das Protokoll definiert die Interaktion zwischen IPP-Client und IPPServer, d.h. es wird definiert, wie die Daten für die Steuerung des Druckvorgangs verwendet werden, wie die Daten kodiert und wie sie transportiert werden. Der Datentransport mit IPP ist generell verschlüsselt. Desweiteren definiert IPP das s.g. Verzeichnisschema, über das ein 222 KAPITEL 14. DRUCKEN IM NETZ Verzeichnisserver nach verfügbaren Ausgabegeräten gefragt werden kann. Ausserdem bietet IPP die Möglichkeit, den Zugriff auf Drucker einzuschränken. 14.2.3 Funktionsweise Die Kommunikation zwischen Client und Server erfolgt gemäß dem bekannten RequestResponse-Verfahren. Diese Anfragen und Antworten sind durch ASCII Code definiert und werden mittels des HTTP 1.1 Postmechanismus durchgeführt. Ein Request des Clients sieht wie folgt aus: ipp:druck.server/meindrucker/meindruckauftrag und führt dazu, dass der Client eine Verbindung zu Port 631 des Servers druck.server aufbaut und folgende Daten übermittelt: POST /meindrucker/meindruckauftrag HTTP/1.1 Host: druck.server:631 Content-type: application/ipp Transfer-Encoding: chunked ... “printer-url” “ipp://druck.server/meindrucker/meindruckauftrag” ... 14.2.4 Filter Die Filter findet man in /usr/lib/cups/filter/. Meist ersieht man schon aus dem Namen der Filter, welche Konvertierung er vornimmt. CUPS erkennt automatisch, welche Filtermechanismen angewendet werden müssen, d.h. welche Filter hintereinander angewandt werden müssen. Lediglich das Ausgabeformat muss man eintragen, sofern man ein anderes Format als PostScript verwenden möchte. (PostScript ist standardmässig vordefiniert.) 14.2.5 Konfiguration Die Konfiguration von CUPS kann - wie bereits erwähnt - über den Browser durch einen Aufruf von http://localhost:631 geschehen. Eine weitere Möglichkeit zur Kofiguration des CUPS bietet Yast2. Es gibt aber auch schicke Webfrontends, die speziell für die Konfiguration von CUPS entwickelt wurden. Eine der bekanntesten Schnittstellen ist das KUPS (s. http://cups.sourceforge.net/kups/index.htm) Möchte man die Konfiguration von Hand machen, beschränkt sich dies fast ausschliesslich auf folgende Dateien: In /etc/cups: cupsd.conf und mime.types In /var/log/cups: error log page log access log (f. Netzwerke) Die zwei wichtigsten Designentscheidungen bei der Konfiguration von CUPS sind “Browsing On” und “Browse Poll”. Sofern in der cupsd.conf eines CUPS-Rechners “Browsing On” gesetzt ist, stellt der Rechener per UDP-Broadcast den Namen des Druckers, Statusinformtionen und andere Zusatzinformationen zur Verfügung. Hierbei sollte man nicht ausser Acht lassen, dass die Broadcasts (entsprechend der TCP/IP-Spezifikation) nur bis zum nächsten Router oder 14.3. ALTERNATIVEN 223 Gateway weitergegeben werden. Wenn bei einem bestimmten Client nur die BrowsingInformationen eines bestimmten Servers verwendet werden sollen, kann man das in der Konfigurationdatei des Client durch Einträge der folgenden Art erreichen: BrowseAllow 134.76.82.10, BrowseDeny 134.76.82.11. Das Gegenstück zum Browsing (per Broadcast) ist das Polling. In diesem Fall, warten die Clients nicht passsiv auf die Informationen über zur Verfügung stehende Drucker, sondern besorgen sich diese aktiv bei einem bestimmten Server. Hierzu verwendet man eine Angabe in Form von BrowsePoll 134.76.82.10:631, die dazu führt, dass der genannte Server nach verfügbaren Druckern gefragt wird, sobald gedruckt werden soll. Beim Polling gilt allerdings dieselbe Einschränkung des Broadcasts: Es könne nur Server im gleichen LAN angesprochen werden. Die Lösung diesen Problems ist, einen Router oder Gateway des eigenen LANs zum so.g. Browse-Relay zu machen. 14.3 Alternativen Zu den heute gängigen Alternativen zu CUPS zählen: • TurboPrint: Ein kommerzielles Drucksystem, mit dem man bestmögliche Druckqualität erreichen kann. Nähere Informationen unter www.turboprint.de • KDEPrint: Ein Modul der KDE-Oberfläche unter Linux. Es ermöglicht einen einfachen und intuitiven Zugriff auf sämliche CUPS-Funktionalitäten. Nähere Informationen unter printing.kde.org 224 KAPITEL 14. DRUCKEN IM NETZ Kapitel 15 Wichtige Netzwerkkommandos 15.1 Offene Dateien und Netzwerkverbindungen Das Kommando lsof (ListOpenFiles) zeigt die geöffneten Dateien (zum Lesen oder Schreiben) an und die dazugehörenden Prozesse. Weiterhin werden offene Sockets (Netzwerkverbindung mit Portadresse), sowie verwendete Pipes und Filesockets angezeigt. 15.2 netstat netstat hat sich auf das Anzeigen offener Sockets, sowohl des Filesystems, als auch von Netzwerkverbindungen spezialisiert. Die Ausgabe von netstat -a hat folgendes Aussehen, wobei die Protokolle TCP, UDP und unix (Socket im Filesystem) in dieser Reihenfolge sortiert aufgeführt werden. dirk@shuttle:~/ > netstat -a |more Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:nfs *:* LISTEN tcp 0 0 *:mysql *:* LISTEN udp 0 0 *:who *:* udp 0 0 *:nfs *:* ... Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 9 [ ] DGRAM 613 /dev/log unix 2 [ ACC ] STREAM LISTENING 3810 /tmp/.X11-unix/X0 unix 2 [ ACC ] STREAM LISTENING 6332 /tmp/.ICE-unix/1051 ... Mit netstat -M kann man sich einen Überblick verschaffen, welche Netzwerkverbindungen gerade maskiert werden: root@server:/ # netstat -M IP masquerading entries prot expire source tcp 0:40.46 1234.test.local tcp 0:45.64 1234.test.local tcp 0:49.43 1234.test.local destination 210.24.30.216 210.24.30.216 210.24.30.216 225 ports 3592 -> 2183 (64155) 3593 -> 2187 (64156) 3594 -> 2188 (64157) 226 KAPITEL 15. WICHTIGE NETZWERKKOMMANDOS tcp tcp ... 1:03.12 1234.test.local 210.24.30.216 3596 -> 2195 (64159) 0:54.57 1234.test.local 210.24.30.216 3595 -> 2192 (64158) Wird die Option “-n” beim Aufruf des Kommandos aufgeführt, wird keine Namensauflösung durchgeführt, was die Anzeige stark beschleunigen kann, gerade bei IP-Nummern, die nicht im Nameserver bekannt sind. netstat -r liefert die Kernel-Routingtabelle in ähnlicher Weise, wie sie auch vom Kommando route angezeigt wird. Wenn Sie netstat mit dem Flag -i aufrufen, gibt es die Statistiken für die gerade aktiven Netzwerk-Schnittstellen aus. Geben Sie außerdem das Flag -a mit an, werden alle im Kernel vorhandenen Schnittstellen ausgegeben, nicht nur die konfigurierten Schnittstellen. An der Konsole produziert netstat -i in etwa folgendes: root@server:/ # netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags lo 0 0 3185 0 0 0 3185 0 0 0 BLRU eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU Die Spalten MTU und Met geben die aktuelle MTU und Metrik des Interface an. Die mit RX bzw. TX überschriebenen Spalten geben an, wie viele Pakete: • RX-OK/TX-OK fehlerfrei empfangen bzw. gesendet wurden • RX-ERR/TX-ERR wie viele beschädigt waren • RX-DRP/TX-DRP wie viele wegeworfen werden mußten • RX-OVR/TX-OVR wie viele aufgrund eines Overruns verlorengingen Die letzte Spalte zeigt wieder die Liste der Flags, die für die Schnittstelle gesetzt sind. Das sind einbuchstabige Versionen der langen Flagnamen, die ifconfig ausgibt: Buchstabe B L M O P R U Bedeutung BROADCAST LOOPBACK PROMISC NOARP POINTOPOINT RUNNING UP Tabelle 15.1: Bezeichner 15.3 Systemprogramme 15.3.1 Dämonen xinit, init, rinted, nfsd, smbd, nmbd, proftpd, httpd, dhcpd 15.4. NETZWERKKONFIGURATION 15.4 227 Netzwerkkonfiguration ifconfig, route, ip, ping, nslookup, dig, tc, ifuser tcptraceroute ttcp (Throughput of UDP / TCP traffic) tcptrack (per connection bandwidth monitor) tcpstat tcpick, tcpflow, 15.4.1 Netzwerktests ping traceroute mtr netdiag Net-Diagnostics (trafshow,strobe,netwatch,statnet,tcpspray,tcpblast) Netdiag contains a collection of small tools to analyze network traffic and configuration of remote hosts (strobe). It is of invaluable help if your system is showing strange network behaviour and you want to find out what your network is doing. nictools-nopci nictools-pci Diagnostic tools for many PCI ethernet cards These tools can help you to diagnostic problems with your ethernet cards or - in some cases - give those cards the final hint, to work in your network. alta-diag : Diagnostic and setup for the Sundance ”Alta” NIC eepro100diag : Diagnostic and setup for the Intel EEPro100 Ethercards epic-diag : Diagnostics and EEPROM setup for the SMC EPIC-100 myson-diag : Diagnostic and setup for the Myson mtd803 Ethernet chip natsemi-diag : Diagnostic and setup for the NatSemi DP83815 Ethernet chip ne2k-pci-diag : Diagnostics and EEPROM setup for PCI NE2000 clones ns820-diag : Diagnostic and setup for the NatSemi DP83820 Ethernet chip pcnet-diag : Diagnostic and setup for the AMD PCnet/PCI Ethernet chip rtl8139-diag : Diagnostics and EEPROM setup for RealTek RTL8129/8139 chips starfire-diag : Diagnostic and setup for the Adaptec Starfire DuraLAN tulip-diag : Diagnostic and setup for the Digital DC21x4* Ethercards chips via-diag : Diagnostic and setup for the VIA Rhine vt86c100 and vt3043 Ethernet chips vortex-diag : Diagnostics and EEPROM setup for the 3Com Vortex series winbond-diag : Diagnostic and setup for the Winbond w89c840 ethercards yellowfin-diag: Diagnostic and setup for the Packet Engines Yellowfin chip Das Kommando ping ist Teil jeder Linux-Distribution. Das Programm sendet ein spezielles Datagramm über das Netzwerk an einen anderen Rechner. Wenn dieser eingeschaltet ist und es empfängt sendet er es wieder zurück und man weiß, dass Rechner und Netzwerk in Ordnung sind. In der einfachsten Form sieht das so aus: dirk@randy2:~/vorlesung/lak> ping login PING login (132.230.1.143) from 132.230.9.124 : 56(84) bytes of data. 64 bytes from login3 (132.230.1.143): icmp_seq=1 ttl=63 time=4.44 ms 64 bytes from login3 (132.230.1.143): icmp_seq=2 ttl=63 time=0.219 ms 64 bytes from login3 (132.230.1.143): icmp_seq=3 ttl=63 time=0.217 ms 64 bytes from login3 (132.230.1.143): icmp_seq=4 ttl=63 time=0.218 ms ^C --- login.ruf.uni-freiburg.de ping statistics --4 packets transmitted, 4 received, 0% loss, time 3030ms rtt min/avg/max/mdev = 0.217/1.275/4.448/1.831 ms 228 KAPITEL 15. WICHTIGE NETZWERKKOMMANDOS ping sucht zunächst die richtige IP-Adresse zu dem angegebenen Rechnernamen heraus1 und sendet dann in regelmäßigen Abständen ein bestimmtes Datagramm an diese Adresse. Für jeden dieser icmp echo requests wird der andere Rechner dann ein icmp echo reply als Antwort zurücksenden. Jede der Zeilen 64 bytes from ... stellt eine solche empfangene Rückantwort dar. In jeder Zeile ist auch die Adresse des Absenders dieses Paketes angegeben, die Nummer des echo requests, auf den mit diesem Paket geantwortet wurde, die time to live (Lebensdauer) sowie die round trip time, das ist die Zeit in Millisekunden zwischen Absendung des request und Empfang des entsprechenden echo reply. Damit ist dies in gewissen Grenzen ein Maß für die Geschwindigkeit des Netzwerkes. ping würde endlos weiter seine Pakete senden, deshalb muß es abgebrochen werden. Dies geschieht durch gleichzeitiges Drücken der Tasten Control (Strg) und C. Danach gibt ping noch eine Statistik der gesendeten Pakete aus. In den letzten beiden Zeilen ist es: Die Anzahl der gesendeten, empfangenen, sowie unbeantworteten Pakete. Außerdem kürzeste, längste und mittlere Antwortzeit. Eine hohe Verlustrate an Paketen deutet auf Probleme mit der Verbindung hin, diese können durch schlechte Verbindungen, überlastete Router oder Kollisionen im lokalen Ethernet verursacht werden. Man kann mit ping die schadhafte Stelle lokalisieren, indem man nacheinander alle Knotenpunkte der Verbindung an-pingt und nachsieht, ab welchem Punkt die Verlustrate stark ansteigt. Mit traceroute (auch bei jeder Distribution dabei) kann man den Weg, den die Datagramme bei einer Verbindung zwischen zwei Rechnern zurücklegen, testen und anzeigen. Wie auch ping verwendet traceroute dazu das icmp Protokoll. Es verwendet jedoch einen Trick, um von jeder durchlaufenen Knotenstelle eine Rückmeldung zu bekommen, und das geht so: Das Feld time to live eines icmp-Datagramms dient eigentlich dazu, zu verhindern, dass das Datenpaket ewig im Netz herumgeschickt wird, z.B. wenn es in eine RoutingEndlosschleife gerät. Zu diesem Zweck verringert jeder Router, der das Paket weiterleitet, den Zähler in diesem Datenfeld um eins. Wird dabei der Wert Null erreicht, so wird der Router, bei dem dies geschehen ist, eine “icmp time to live expired Meldung” an den ursprünglichen Absender des Datagramms senden um ihm mitzuteilen, dass das Datagramm ‘abgelaufen’ ist. traceroute sendet nun nacheinander Datagramme ab, deren time to live (beginnend bei eins) jeweils um eins erhöht wird. Indem es nun die eingehenden “icmp time to live expired Meldungen” auswertet, kann es genau den Weg, den die Datagramme nehmen, verfolgen - bis der wirkliche Zielrechner erreicht ist. Das sieht dann so aus: dirk@test:~/vorlesung/lak> /usr/sbin/traceroute goe.net traceroute to goe.net (134.76.60.86), 30 hops max, 40 byte packets 1 132.230.22.254 2.735 ms 5.013 ms 7.667 ms 2 132.230.223.254 0.707 ms 0.832 ms 0.721 ms 3 nsc-rz-gwn.fun.uni-freiburg.de (132.230.0.141) 0.386 ms 0.355 ms \ 0.307 ms 4 Freiburg1.Belwue.DE (129.143.15.141) 0.576 ms 0.545 ms 0.496 ms 5 Stuttgart1.BelWue.DE (129.143.1.7) 3.813 ms 4.605 ms 0.573 ms 6 Stuttgart2.BelWue.DE (129.143.1.34) 4.523 ms 4.521 ms 4.520 ms 7 Frankfurt1.BelWue.DE (129.143.1.26) 8.393 ms 8.335 ms 8.304 ms 8 ffm-b2-geth0-1.telia.net (213.248.79.41) 8.592 ms 8.668 ms 8.713 ms 9 ffm-b2-geth0-1.telia.net (213.248.68.33) 8.558 ms 8.531 ms 8.503 ms 10 ffm-bb2-pos2-3-0.telia.net (213.248.64.177) 8.745 ms 8.692 ms 8.662 ms 11 hbg-bb2-pos1-1-0.telia.net (213.248.65.2) 18.104 ms 18.057 ms 18.129 ms 12 hbg-b1-pos1-0.telia.net (213.248.68.6) 18.047 ms 18.000 ms 17.993 ms 13 dante-01616-hbg-b1.c.telia.net (213.248.103.98) 17.439 ms 17.800 ms \ 17.487 ms 14 cr-hannover1.g-win.dfn.de (188.1.18.178) 199.467 ms 199.447 ms \ 199.511 ms 1 Voraussetzung ist natürlich, dass /etc/hosts und der Nameserver richtig konfiguriert sind 15.4. NETZWERKKONFIGURATION 15 16 17 18 229 ar-goettingen1.g-win.dfn.de (188.1.88.74) 20.239 ms 20.192 ms 20.162 ms c12012-int.gwdg.de (134.76.249.201) 20.786 ms 20.738 ms 20.705 ms 134.76.249.204 20.406 ms 20.352 ms 20.323 ms stud9.stud.uni-goettingen.de (134.76.60.86) 20.806 ms 20.758 ms \ 20.730 ms Die erste Spalte gibt die ‘Entfernung’ an, also der wievielte Knoten (Hop) in der Verbindung der bezeichnete Rechner ist. Dies entspricht dem Eintrag im time to live Feld des Datagramms, das vom angegebenen Rechner als expired gemeldet wurde. Der nächste Eintrag ist der Rechnername (falls dieser anhand der IP-Adresse herausgefunden werden kann) und dessen IP-Adresse. Dann kommen drei Einträge mit den Antwortzeiten für drei aufeinanderfolgende Datagramme an diesen Rechner. Der erste Punkt in der Verbindung ist also der Rechner gw. Seine Antwortzeiten sind sehr kurz, die Verbindung ist ein lokales Ethernet. Der nächste Router ist gw.uts - von dort kommen die Datagramme sehr viel langsamer zurück als von gw. Der Grund ist hier eine sehr langsame Verbindung über eine Funkstrecke. Der nächste Knoten ist bereits der gesuchte Rechner, minnie.vk1xwt. Auch hier kommen die Antworten nur sehr langsam. Dies liegt aber daran, dass die Antwortzeit jedes Rechners natürlich die Summe der Verbindungszeiten aller dazwischenliegenden Teilstrecken ist. In diesem Falle also vom eigenen Rechner zu gw; von dort zu gw.uts; und schließlich von gw.uts zu minnie.vk1xwt. Berücksichtigt man diese Aufsummierung der Zeiten, so sieht man, dass die letzte Verbindung von gw.uts zu minnie.vk1xwt ebenfalls sehr schnell ist. Diese beiden Rechner hängen also vermutlich auch an einem lokalen, schnellen Netzwerk. Taucht bei einem traceroute Aufruf hinter den Zeiten ein !N auf so weist dies auf ein nicht erreichbares Netzwerk hin. Es ist ein Zeichen dafür, dass ein Router nicht wußte, wohin er das Datagramm weiterleiten soll. Er sendet dann ein network unreachable Datagramm an den Absender zurück. Meist deutet es darauf hin, dass eine Netzverbindung (zeitweise) zusammengebrochen ist. Anhand der letzten angegebenen Adresse vor dieser Fehlermeldung kann man die defekte Stelle lokalisieren. Ebenfalls auftauchen kann ein !H als Hinweis darauf, dass ein Rechner (Host) nicht erreicht werden konnte. Dies bedeutet i.A. dass man bis in das lokale Netzwerk des Zielrechners gelangt ist, dieser sich aber nicht meldet (weil er z.B. abgeschaltet ist). 15.4.2 Netzwerküberwachung netstat, tcpdump, ethereal, nmap, ntop, iptraf, xnetload, arpwatch, fping, ipgrab tcpdump kann die gesamte Aktivität auf dem Netzwerk überwachen indem es sämtlich Datagramme auf dem Weg in den eigen Rechner hinein oder heraus abhört. Damit lassen sich vom erfahrenen Administrator auch schwer zu identifizierende Netzwerkprobleme lokalisieren. tcpdump dekodiert jedes abgefangene Datagramm und zeigt es - in einer etwas kryptischen Form - als Text an. tcpdump bietet sich an, um Protokollfehler oder plötzliche Verbindungsabbrüche aufzuspüren. Denn man kann damit sehen, was auf dem Netzwerk passiert. Um es jedoch sinnvoll einsetzen zu können, bedarf es eines tieferen Verständnisses der Protokolle und wie sie arbeiten. Doch es kann auch einfach dazu benutzt werden, um sicherzustellen, dass z.B. Datagramme den eigenen Rechner wirklich über die richtige Schnittstelle verlassen oder, um zu überprüfen, ob irgendwelche Datagramme von außerhalb empfangen werden. Eine typische Ausgabe von tcpdump sieht etwa so aus: test2:/root # tcpdump -i eth0 tcpdump: listening on eth0 18:25:50.646507 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\ 77:52 230 KAPITEL 15. WICHTIGE NETZWERKKOMMANDOS pathcost 0 age 0 max 20 hello 2 fdelay 15 18:25:52.649154 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\ 77:52 pathcost 0 age 0 max 20 hello 2 fdelay 15 18:25:54.648119 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\ 77:52 pathcost 0 age 0 max 20 hello 2 fdelay 15 18:25:56.650810 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\ 77:52 pathcost 0 age 0 max 20 hello 2 fdelay 15 18:25:58.182266 132.230.9.254 > OSPF-ALL.MCAST.NET: OSPFv2-hello 44: rtrid 132.\ 230.200.141 backbone dr 132.230.9.254 [ttl 1] 18:25:58.183882 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.domain: 25558+ PTR? 254.9.230.132.in-addr.arpa. (44) (DF) 18:25:58.186580 dns0.fun.uni-freiburg.de.domain > randy2.rz.uni-freiburg.de.32895: 25558 NXDomain* 0/1/0 (137) 18:25:58.187051 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.domain: 25559+ PTR? 5.0.0.224.in-addr.arpa. (40) (DF) 18:25:58.189666 dns0.fun.uni-freiburg.de.domain > randy2.rz.uni-freiburg.de.32895: 25559 1/4/4 PTR [|domain] 18:25:58.207177 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.domain: 25560+ PTR? 141.200.230.132.in-addr.arpa. (46) (DF) 18:25:58.210175 dns0.fun.uni-freiburg.de.domain > randy2.rz.uni-freiburg.de.32895: 25560 NXDomain* 0/1/0 (141) 18:25:58.210747 randy2.rz.uni-freiburg.de.32895 > dns0.fun.uni-freiburg.de.domain: 25561+ PTR? 200.200.230.132.in-addr.arpa. (46) (DF) 18:25:58.213119 dns0.fun.uni-freiburg.de.domain > randy2.rz.uni-freiburg.de.32895: 25561* 1/2/2 (173) 18:25:58.649731 802.1d config 8000.00:20:da:e7:77:52.8087 root 8000.00:20:da:e7:\ 77:52 pathcost 0 age 0 max 20 hello 2 fdelay 15 14 packets received by filter 0 packets dropped by kernel Wenn tcpdump ohne Argumente gestartet wird, wird das Netzwerk-Device mit der kleinsten Nummer, das kein Loopback-Device ist, überwacht. Es kann aber - wie im Beispiel auch ein spezielles Device angegeben werden. tcpdump dekodiert dann jedes Datagramm das über diese Device übertragen wird und zeigt es in einer lesbaren Form an. Der erste Eintrag ist - wie leicht zu ersehen - der Zeitpunkt, zu dem das Datagramm gesendet oder empfangen wurde. Der weitere Inhalt der Zeile hängt dann von der Art des Datagramms ab. Die ersten beiden Zeilen im Beispiel zeigen, einen arp request. tcpdump gibt dabei auch die genaue Art des icmp Datagramms an. Das Größer-Zeichen (¿) gibt die Richtung an, in der das Datagramm übermittelt wurde (es zeigt vom Sender zum Empfänger). Die restlichen Zeilen protokollieren den Aufbau einer telnet Verbindung von albert.vk2ktj zu gw.vk2ktj Die Zahl am Ende jeden Rechnernamens gibt die verwendete Socket Nummer an, zu diesem Zweck wertet tcpdump die Datei /etc/services aus. Beispiel: tcpdump -i eth1 host 1.2.3.4 and not port ssh Zwei Kommandos spielen mit tcpdump zusammen: Wenn man mit tcpdump -w capture.log ein Logfile in einem speziellen Binärformat geschrieben hat, kann man dieses später mit tcptrace oder tcpflow auswerten. Beispiel: tcptrace -n -r capture.log > session.file Kapitel 16 Netzwerküberwachung 16.1 Überblick Inzwischen ist der Rechnerarbeitsplatz in Firmen und Organisationen zum Standard avanciert. Viele Dienste, wie der Druck- oder Fileserver, die Firewall, der Mail- und Webserver werden üblicherweise auch in kleineren Firmennetzwerken angeboten. Die Zahl der Maschinen hat damit einen so großen Umfang angenommen, dass sich nicht mehr durch einfaches ”Draufgucken” ihre vielfältigen Aufgaben überwachen lassen. Mit diesem Wachstum der LANs (Local Area Networks) entsteht die Notwendigkeit sich einen schnellen und umfassenden Überblick über den Zustand eines Netzes und der angeschlossenen Maschinen verschaffen zu können. Deshalb existieren inzwischen einige, teilweise konkurrierende Protokolle zur Überwachung von Workstations und aktiven Netzwerkkomponenten. Das am häufigsten verwendete Verfahren zur Überwachung und Konfiguration eingesetzter Komponenten ist das Simple Network Management Protocol (SNMP). Eine Reihe ernsthafter Leute hat sich eine Reihe wichtiger Gedanken für ein ernsthaftes Problem gemacht und SNMP erfunden: Wie kann eine Organisation Hunderte oder Tausende (wenn nicht noch mehr) aktiver Netzwerkkomponenten und Maschinen sowie das zugrunde liegende Netzwerk beobachten und steuern? SNMP basiert auf der TCP/IP Protokoll-Suite. Es etabliert durch seine starke Standardisierung ein einheitliches Modell zur Kontrolle und Verwaltung von Netzwerken. Ein wesentlicher Vorteil dieses Protokolls liegt neben seiner weiten Verbreitung in der flexiblen Erweiterbarkeit. SNMP erlaubt die schnelle und einfache Übertragung von Datenpaketen zur Zustandsbeschreibung von Netzwerkgeräten. Jedoch genügt es in einigen Fällen nicht, festzustellen, dass ein bestimmter Dienst aktiv ist, indem man überprüft, ob der entsprechende Prozess in der Liste laufender Programme auftaucht. Es geht nicht darum, eine Innenansicht einer Maschine festzustellen, sondern den Zustand zu überprüfen, wie er sich aus Sicht des Benutzers darstellt. Vielfach ist erst dann eine Aussage sinnvoll, wenn ein Testzugriff über das Netzwerk erfolgreich durchgeführt wurde. Für diese Art des Monitoring bieten sich Web-, FTP- und Mailserver sowie Authentifizierungsdienste an, da nur so eine Nutzbarkeit aus Sicht des Users emuliert werden kann. 16.2 SNMP - Das Simple Network Mangement Protocol 16.2.1 Überblick Das Konzept von SNMP beinhaltet eine verteilte Management Architektur. Das Managementproblem wird in zwei Teile aufgespalten und es werden für jeden Teil separate Stan231 232 KAPITEL 16. NETZWERKÜBERWACHUNG dards definiert. Der erste Teil befaßt sich mit dem Austausch von Informationen. SNMP basierende Netzwerkmanagementlösungen arbeiten im Client-Server-Modell. Anwendungen welche zum Sammeln von Daten oder zur Steuerung von Geräten dienen, werden Agenten genannt. Der Management Host kann diese Daten von den Agenten abfragen. Das Protokoll bestimmt zum einen, wie die Client-Software funktioniert und die Austauschformate zwischen Management Host und Agenten aussehen, sowie die Form der Namen und Adressen. Zum zweiten wird festgelegt, welche Daten ein gemanagtes Gerät vorhalten muss, wie diese benannt sind und welche Syntax zum Ausdruck bestimmter Werte und Zustände verwendet wird. SNMP verfolgt einen minimalistischen Ansatz: Das Set der zugelassenen Operationen ist sehr beschränkt, ein paar Befehle verschaffen die gesamte Funktionalität. SNMP wurde von der IETF in etlichen RFC’s standardisiert (ua. 1155, 1157, 1212, 1213, 1441-46, 1450). Hierin wurde festgelegt, dass SNMP mittels des verbindungs- und quittungslosen Unified Data Protocol (UDP) kommuniziert. Der Austausch zwischen Agent und Monitor erfolgt dabei standardmäßig auf Port 161. Die Management Station kann Daten von den zu überwachenden Agenten (zyklisch) pollen, welche als Server fungieren. Die MIB-Informationen können dann grafisch aufbereitet, dargestellt oder anders verarbeitet werden. Die Host sind jedoch auch in der Lage, gewisse Ereignisse mittels sogenannter Traps (”Falltüren”) an die Management Station über Port 162 zu melden. Der Informationsaustausch zwischen den Agenten und dem Überwachungs-Client läuft im Hintergrund ab und versucht die Netzwerkbelastung gering zu halten. SNMP liegt inzwischen in der dritten Version (SNMPv3) vor, jedoch sind die Unterschiede zu den Vorgängern gering und die meisten Befehle und Strukturen abwärts kompatibel. 16.3 Die Datendefinition Ein überwachtes Objekt muss bestimmte Zustands- und Kontrolldaten vorhalten, da sie vom Manager abgefragt werden können. Dazu gehören bei Routern sicherlich die Routingtabellen, sowie einkommender und ausgehender Datenverkehr. Switches werden bestimmte Portstatistiken zu transferierten Paketmengen und dabei aufgetretenen Fehlern vorhalen; ein Drucker kann die Zahl der ausgeworfenen Seiten und die Länge der Druckerwarteschlange bereithalten. Obwohl dem Manager der Zugriff auf diese Daten erlaubt wird, sagt SNMP nichts Genaueres darüber aus, welche Informationen auf welchem Gerätetyp erhältlich sind. Stattdessen definiert ein weiterer Standard die Details. In der Management Information Base (MIB) werden die Informationen vermerkt, sowie welche Bedeutung sie haben, welche Operationen auf ihnen ausgeführt werden können und welche Werte sie annehmen können. So hat ein Paketzähler für einen Switchport einen Integerwert, der nur lesbar ist und nicht verändert werden kann. Eine Variable, die den Zustand desselben Ports beschreibt (ob dieser ein- oder abgeschaltet ist) wird den Zustandswert enthalten und les-/schreibbar sein. Der Vorteil MIBs unabhängig von SNMP zu definieren, liegt darin, dass Hersteller von Netzwerkkomponenten neue Variablen einführen können. Ein Benutzer kann dieselbe Netzwerkmanagementsoftware, wie für die bekannten MIBs verwenden. Natürlich wird kein Gerät die Daten liefern, die in ihm unbekannten MIBs definiert sind. Trotzdem bleibt die Sprache und das Protokoll von SNMP gleich. Zu Zeiten von SNMPv1 und v2 waren alle Daten in einer einzigen MIB festgelegt. SNMPv3 erlaubt verschiedene MIBs zu definieren. In der System-MIB (MIB-II) sind grundlegende Verwaltungsdaten abgelegt, wovon einige in der Tabelle gezeigt sind. Die MIB-II wird von den meisten Herstellern unterstützt. Darüberhinaus definiert jeder Anbieter von netzwerkfähiger Hardware weitere MIBs, z.B. die Host-MIB (MIB für Endgeräte). 16.3. DIE DATENDEFINITION MIB system interfaces ip tcp udp snmp host 233 Informationen zu/über Überwachtes Gerät, Standort, Eigentümer, Software, Uptime, Ansprechpartner ... Eingebaute reale und virtuelle Netzwerkinterfaces: Mehrere bei Routern und Switches, meistens eines bei Rechnern, Druckern ... IP-Daten, wie Routingtabelle, Paketzähler ... TCP-Daten, wie offene Verbindungen, Paketzähler UDP-Daten, wie offene Ports, Paketzähler Statistiken und Zähler des SNMP-Agenten Statistiken und Daten klassischer Workstations, wie Speicher, Festplatten, Zahl der Nutzer ... Tabelle 16.1: Einige Standard-MIBs 16.3.1 Der SNMP-Namensraum und die Management Information Bases Der SNMP-Datenraum ist großzügig und universell erweiterbar angelegt. Große Teile sind für zukünftige Ergänzungen reserviert und für die evtl. Migration mit anderen baumartigen Datenstrukturen freigehalten. Ein weiterer Standard definiert das Regelwerk zum Festlegen und Identifizieren der MIB Variablen. Dieses grundlegende Format heißt SMI (Structure of Management Information). Um das Protokoll einfach zu halten, legt SMI einige Restriktionen zu den in den MIBs erlaubten Variablen fest, bestimmt deren Benennung und die Definition von Variablentypen. Hierzu gehören z.B. der Zähler (Counter, Integervariable im Bereich von 0..23̂2-1) oder die IP-Adresse (4 Oktets). Die Datentypen können wiederum zu Tabellen oder Folgen kombiniert werden. Zur Bennenung der MIB-Variablen und deren Referenzierung verwendet SMI den ASN.1Standard (Abstract Syntax Notation der ISO). Dieses ist eine formale Sprache mit zwei Ausprägungen: Einem kompakten maschinen-lesbaren Teil für die Verwendung im Kommunikationsprotokoll und einer für Menschen lesbaren Form der Daten zur Beschreibung in Dokumenten. ASN.1 fordert dabei eine sehr hohe Präzision (z.B. die Angabe des Wertebereichs einer Variablen), um eine gute Interoperabilität zu gewährleisten. Die Variablen der MIBs sind in einer baumartigen Struktur abgelegt, dem Object Identifier Namespace, welcher von ISO und ITU verwaltet wird. Der Aufbau ähnelt ein wenig dem vom Domain Name System oder Dateisystemen bekannten. Der Namensraum ist global, d.h. alle eingetragenen Zweige sind eindeutig. Subnamensräume können jedoch delegiert werden, so dass nicht jeder neue Eintrag bei den o.g. Organisationen beantragt werden muss. Die Wurzel des Bauses ist unbenannt, danach folgen die managenden Organisationen (ISO, ITU und ISO+ITU gemeinsam). Das Trennzeichen zwischen den Hierarchieebenen ist der Punkt. Angesprochen werden kann jeder Host über eine Nummer, wobei zur Vereinfachung des Zugriffes auch Namen erlaubt sind. Diese dienen jedoch wie beim DNS eher der Bequemlichkeit; sie sind keine Eigenschaften des Hierarchiebaumes und werden nicht bei der Client-Server-Kommunikation verwendet. Der für SNMP interessanteste Teil des Namensraums wird mittels der sogenannten MIBs aufgespannt. Sie definieren die unterschiedlichen Daten-Domains, die mittels SNMP abgefragt werden können. Sie beinhalten das Schema der abfragbaren Informationen und die Übersetzung der OIDs in ihre jeweiligen Namen. Dabei sind die obersten Ebenen des Datenbaumes für die Definition der Berechtigungen an einzelne Gruppen reserviert. Der spannendere Abschnitt des SMI-Baumes startet mit OID 1.3.6.1, welcher den Namen 234 KAPITEL 16. NETZWERKÜBERWACHUNG ”iso.org.dod.internet” trägt. Hier finden sich die System-, Interface-, TCP/IP, hostspezifische und weitere (herstellerdefinierte) MIBs. Ansehen kann man sich die MIBs mit einem Texteditor, komfortabel wird es jedoch erst mit grafischen Tools. Cheops und TKined haben eingebaute Funktionen um MIBs zu visualisieren, richtig komfortabel wird es mit Mbrowser (siehe [7]), welcher auf NetSNMP aufsetzt und ein GTK-GUI verwendet. Mit mbrowser lassen sich auch die StandardSNMP-Kommandos, wie get, set, walk absetzen, die weiter unten in ihrer Kommandozeilenausführung besprochen werden. 16.3.2 Die SNMP-Agenten Jeder einzelne Knoten im Netz - Netzwerkkomponenten oder auch Endgeräte, welche sich mittels SNMP verwalten lassen, verfügen über einen Management Agenten. Dieser stellt Informationen in strukturierter Form zur Verfügung. Anhand dieser erfolgt die Überwachung und Konfiguration des jeweiligen Gerätes. Die Datenstruktur wird als Management Information Base (MIB) bezeichnet. Die Agenten sind üblicherweise als Softwarelösung in den Netzknoten und Endgeräten umgesetzt. Diese Implementation erfolgt bei den Anbietern aktiver Netzwerkkomponenten meistens herstellerspezifisch. Auf einer Linux- bzw. UnixWorkstation stehen dafür mehrere Implementationen zur Verfügung. Die Lösungen reichen von C++-Implementationen, wie dem Open-SNMP, die in C geschriebene Toolsuite des CMU bzw. Net-SNMP, Bibliotheken die TCL/TK zu Grunde legen, wie ”scotty” bis hin zu Java- oder Perl-basierten Umsetzungen. Ihre Funktionalität unterscheidet sich in den von den Agenten unterstützten MIBs sowie den Werkzeugen zur Erlangung und Visualisierung der Daten. 16.3.3 Der Kommunikations-Code der Agenten Nun sind die Datentypen und die Struktur der zur Verfügung stehenden Daten definiert. Jetzt sollen diese zwischen dem Agenten und dem Management System ausgetauscht werden. Hierzu sind vier grundlegende Operationen und ihre Erweiterungen definiert: Jede Bitte um einen Satz von Daten muss einen vollständigen Pfad für die erwünschte Information beinhalten. Das Schreiben und Lesen von Feldern auf einem Knoten der SMIHierarchie erfolgt mit set und get. Mittels get-next lassen Tabelleninformationen schrittweise anfordern. Die Berechtigung zum Lesen bzw. Schreiben der einzelnen OIDs erfolgt bei SNMPv1 bzw. v2 mittels ”Communitystring” und die Angabe der zum Lesen berechtigten Hosts oder Netzwerke. Die Funktion ”set” ist nicht ganz unkritisch, da es die eine Steuerung von Geräten erlaubt, wie z.B. das Abschalten von Ports auf Switches oder Routern. Dieses ist jedoch unter Sicherheitsaspekten nicht unproblematisch, da die Daten meistens unverschlüsselt übertragen werden und erst die Spezifikation von SNMPv3 komplexere Authentifizierung erlaubt. Eine Trap (Kommando trap) geht den umgekehrten Weg. Sie erlaubt es Benachrichtigung unabhängig von einer Anfrage des Clients an diesen zu übermitteln. Dieses kann für das Auftreten bestimmter Ereignisse oder Bedingungen festgelegt werden, läßt sich jedoch nicht für beliebige Felder definieren. Standard-Traps sind z.B. die Information zum Start des Servers, Traps, die Ausfälle oder Wiederbelebungen von Netzwerkverbindungen kundgeben und einige Authentifizierungsprobleme. Der Mechanismus zur Definition von Trap-Nachrichten hängt von der jeweiligen Server-Implementierung ab. Switches und Router kennen andere und meistens weitaus mehr verschiedene Traps als Endgeräte, die jedoch 16.4. SNMP-IMPLEMENTIERUNGEN UNTER LINUX 235 meistens nicht genormt sind. Auf einer Linux-Workstation ist es schließlich einfacher andere Konzepte als SNMP-Traps zur Behandlung von Ausnahmesituationen umzusetzen. 16.4 SNMP-Implementierungen unter Linux Wie bereits kurz erwähnt stehen unter Linux einige Implementierungen von SNMP zur Verfügung. Jedoch soll sich der Artikel auf die aus Sicht des Autors beste und vollständigste Umsetzung beziehen: Net-SNMP. Nachdem die Entwicklung des bisher im Linuxumfeld recht weit verbreiteten Paketes der Carnegie Mellon University (CMU) etwas eingeschlafen ist, genießt das Projekt ”Net-SNMP” zunehmende Beachtung. Es ist aus einem Projekt der University of California in Davis hervorgegangen. Das Paket steht unter der GPL und kann über die Projekthomepage (siehe [] netsnmp.org) bezogen werden. In den meisten Fällen wird man es nicht mehr selbst kompilieren müssen, da es Bestandteil vieler Linuxdistributionen ist. Gründe es selbst zu übersetzen, könnten in notwendigen Bugfixes oder experimentellen neuen Features liegen. Das Net-SNMP-Paket beinhaltet eine C-Bibliothek mit den wesentlichen Funktionen, den Agenten (SNMP-Server, d.h. snmpd) und Programme zur Datenbeschaffung, welche die vier Standardkommandos ”get”, ”get-next” und ”trap” enthalten. Die Syntax und die Namen der Standardkommandos sind festgelegt, die der von verschiedenen SNMP-Paketen mitgelieferten Programme jedoch nicht! Bei der Vorstellung des Monitoring-Tools Nagios im zweiten Teil sieht man, das dieses eine eigene SNMP-Umsetzung mitbringt. Auch Programm MRTG zur Darstellung der Auslastung von Netzwerkinterfaces (siehe []) beziehen ihre Daten vom SNMP-Agenten, verwenden aber die Aufrufe aus ihrer eigenen Bibliothek. Net-SNMP implementiert die Funktionalität von SNMPv3 und is modular mittels AgentX erweiterbar. 16.5 Kommandos zur Datenbeschaffung Das Beste zum Ausprobieren der verschiedenen SNMP-Kommandos ist eine Maschine oder Netzwerkkomponente im eigenen Subnetz. Der ”Communitystring” zur Authentifizierung gegenüber dem Agenten sollte bekannt und die eigene IP-Nummer als zugelassen auf der entsprechenden Maschine eingetragen sein. Handelt es sich beim beobachteten Gerät um einen Net-SNMP-Agenten, werden diese Informationen im Bereich [A]-[D] (siehe Beispiel weiter unten) der Konfigurationsdatei angegeben. snmpget target-host community sysDescr.0 liefert z.B. die Beschreibung des Gerätes: system.sysDescr.0 = 3Com SuperStack II snmpget target-ip community .1.3.6.1.2.1.1.1.0 liefert das identische Ergebnis. Die Kommandos von Net-SNMP gehorchen dabei folgender Syntax: Programmname [Optionen...] <hostname> {<community>} [<OID> ...] Die Object ID kann immer als Nummer und so als Definition in einer installierten MIB angegeben, als Name angegeben werden. Mittels der Optionen lassen sich die SNMP-Version (1,2 oder 3) für die Anfrage angeben sowie Spezifika für einzelne Versionen setzen. Daüberhinaus kann bestimmt werden, wie die Ein- und Ausgabe und die Darstellung der MIB formatiert werden soll oder Debuginformationen generiert werden. Snmpget, snmpgetnext und die abgeleiteten Tools wird man selten direkt einsetzen. Sie eignen sich für Tests und 236 KAPITEL 16. NETZWERKÜBERWACHUNG einfache Shellskripten. Für die visuelle Darstellung z.B. der Auslastung einzelner Ports eines Linuxrouters oder eines Switch kommt MRTG (Multi Router Traffic Grapher, siehe Kap. 16.8) in Frage, da hier neben dem momentanen Zustand auch Zeitreihen gut darzustellen sind. Mit dem Programm snmptranslate läßt sich vergleichbar mit ”nslookup” im Domain Name System eine Übersetzung zwischen Nummer und Name auslesen. Darüberhinaus bekommt man weitere Informationen, z.B. eine Beschreibung der Variablen und ihren Typ angezeigt. Kasten: Ausgabe des Kommandos ”snmptranslate -Td -OS system.sysDescr” .1.3.6.1.2.1.1.1 sysDescr OBJECT-TYPE -- FROM SNMPv2-MIB, RFC1213-MIB -- TEXTUAL CONVENTION DisplayString SYNTAX OCTET STRING (0..255) DISPLAY-HINT "255a" MAX-ACCESS read-only STATUS current DESCRIPTION "A textual description of the entity. This value should include the full name and version identification of the system’s hardware type, software operating-system, and networking software." ::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 1 } Programme, wie snmpnetstat, snmpstatus oder snmpdf vereinfachen wichtige Standardanfragen, z.B. nach offenen TCP-Verbindungen und UDP-Ports, dem Gerätetyp und seinen Interfaces oder dem freien Speicherplatz. Hier sind im Gegensatz zu snmpget, snmpgetnext, snmptable keine OIDs anzugeben. Da es recht aufwändig ist, sich mittels snmpget oder snmpgetnext einen umfassenden Überblick über den Baum verfügbarer Daten eines Endgerätes oder Netzwerkknotens zu verschaffen, bringt snmpwalk Erleichterung. Dieses Programm erlaubt es den gesamten Datenbaum eines Agenten sukzessive abzufragen oder Unterbäume vollständig abzulaufen. Letzteres geschieht über die Angabe eines Teils des OID. Je länger der Object Identifier wird, desto genauer wird der abzufragende Teil des Baumes eingegrenzt und kürzer wird die Ausgabe. 16.6 Konfiguration des UCD-SNMP 16.6.1 Der Kopf definiert die Zugriffs-Policies Der Server ”snmpd”, welcher als Softwareagent auf der zu beobachtenden Maschine läuft wird mittels /etc/ucdsnmpd.conf gesteuert und üblicherweise durch ein Runlevel-Skript in /etc/init.d gestartet. Die ersten vier Abschnitte ([A]-[D]) der Konfigurationsdatei dienen der Authentifizierung, wobei jeweils zu überlegen ist, welche Hosts welche Daten pollen dürfen. In den meisten Fällen genügt eine Beschränkung auf das lokale Subnetz, wobei jedoch auch ausschließlich die Management Station (also der Rechner, von dem die Überwachung läuft) eingetragen werden kann. Der Agent kann mehrere unterschiedliche Access-Regeln definieren. Eine solche Regel besteht aus einer MIB, die alle Bereiche der MIB enthält, auf welche 16.6. KONFIGURATION DES UCD-SNMP 237 ein Zugriff für die Nutzergruppe gestattet ist. Festgelegt wird weiterhin der Zugriffsmodus, welcher im Beispiel für Anfragen aus dem Netzwerk nur lesend erfolgen darf. Die Gesamtheit der Verwaltungsrechte wird in einem Community Profile zusammengefaßt. Anhand des vom Client mitgelieferten Community Passworts (hier immer mit ”community” bezeichnet) bestimmt der Agent, ob MIB Objekte für die aktuelle Anfrage sichtbar sind oder modifiziert werden dürfen. Wird das eigene LAN als unsicher eingeschätzt, kann eine Authentifizierung nach SNMPv3 eingestellt werden. Die Steuerung erfolgt mit den Kommandos snmpusm für die Benutzer- und snmpvacm für Zugriffsrechteverwaltung. Jedoch sind Probleme mit Clients zu erwarten, welche nicht SNMPv3 beherrschen. Ohne weitere Konfiguration stellt Net-SNMP die meisten der üblichen Variablen der Standard-MIB unter Linux zur Verfügung. Abschnitt [E] erlaubt das Setzen der Standardvariablen Location- und Kontakt OID. Wer einen näheren Blick auf die unterschiedlichen MIBs werfen möchte, kann unterhalb des Verzeichnisses /usr/share/mibs/(ietf ) bzw. /usr/share/snmp/mibs nachsehen. Zum Standard gehören auch die Netzwerkinformationen zu den konfigurierten Interfaces, Daten zu ARP, ICMP, TCP, jeweils inklusive der Anzahl der transferierten Pakete in verschiedenen Kategorien. 16.6.2 Parameter der ”Enterprise”-Erweiterungen Über den Standard hinaus schafft Net-SNMP eine Schnittstelle, festzustellen, ob bestimmte Prozesse laufen. Die MIB befindet sich im ”Enterprises” Unterbaum (1.3.6.1.4.1) und wird mit der ID 2021 als UCD-SNMP-MIB eingehangen. Die Prozesstabelle wiederum findet sich unterhalb der ID 2, zusammengesetzt numerisch unterhalb 1.3.6.1.4.1.2021.2. In der Konfiguationsdatei wird nach dem Schlüsselwort ”proc” das zu überwachende Programm und dann die Zahl der minimal und maximal erlaubten Instanzen eingetragen werden. Abgefragt werden kann diese Tabelle z.B. mit: snmptable target-host community .1.3.6.1.4.1.2021.2 welches als Ausgabe in Abhängigkeit der gezeigten Konfigurationsdatei folgendes produziert: SNMP table: enterprises.ucdavis.prTable prIndex prNames prMin prMax prCount 1 automount 2 2 2 2 X 1 2 1 3 kdm 1 1 2 4 ypbind 1 4 4 5 sshd 1 10 1 6 axnet 0 1 1 7 rwhod 0 1 1 8 cron 0 1 1 9 xinetd 0 1 1 10 chooser 0 1 0 16.6.3 Erweiterung durch externe Skripten und Programme Abschnitt [G] beschäftigt sich mit einem speziellen, weil flexiblen Zweig des Unterbaumes ”enterprises.ucdavis” (hier 1.3.6.1.4.1.2021.8). Hier wird dem Agenten erlaubt ein externes Skript auszuführen und das Resultat zurückzumelden. Dieser Bereich wird nicht fest vorgegeben, sondern kann vom Administrator in der Konfigurationsdatei definiert werden. Jede weitere Zeile erzeugt einen weiteren Indexeintrag in die MIB-Tabelle. snmpwalk target-host public enterprises.ucdavis.extTable.extEntry.extResult 238 KAPITEL 16. NETZWERKÜBERWACHUNG liefert eine Ergebnisliste zurück, wobei die Ergebnisse die Shell-Variable des Rückgabewertes ($?) repräsentieren: enterprises.ucdavis.extTable.extEntry.extResult.1 = 34 enterprises.ucdavis.extTable.extEntry.extResult.2 = 33 enterprises.ucdavis.extTable.extEntry.extResult.3 = 28 enterprises.ucdavis.extTable.extEntry.extResult.4 = 0 enterprises.ucdavis.extTable.extEntry.extResult.5 = 0 enterprises.ucdavis.extTable.extEntry.extResult.6 = 0 enterprises.ucdavis.extTable.extEntry.extResult.7 = 252 enterprises.ucdavis.extTable.extEntry.extResult.8 = 253 enterprises.ucdavis.extTable.extEntry.extResult.9 = 254 enterprises.ucdavis.extTable.extEntry.extResult.10 = 255 enterprises.ucdavis.extTable.extEntry.extResult.11 = 153 Dieses Ergebnis läßt sich auch mit dem Kommando ”snmpbulkget -v2c ...” erziehlen, wobei mit der Option ”-v2c” eine Session nach SNMPv2c zwischen dem Client und dem Agent generiert wird. Die MIB (bzw. ein Teilzweig dieser) wurde im vorliegenden Fall dazu eingesetzt, externe Shellskripten auszuführen, welche wiederum das /proc-Device des Kernels auslesen und die evtl. erhaltenen Daten über den Returnwert zurückgeben. Die Erweiterung hier dazu benutzt, Informationen des System Management Busses (SMB, spezieller Bus moderner Mainboards zur Steuerung und Überwachung von Komponenten) zu CPU-Temperatur und Drehzahl der verschiedenen Lüfter auszuwerten: Listing des Bash-Skriptes: # script for reading lm_sensor information from procfs to pass # them via net-snmp # case "$1" in *temp*) EXIT=( ‘cat /proc/sys/dev/sensors/*/$1 2>/dev/null|| echo 20‘ ) EXIT3=${EXIT[2]} EXIT=${EXIT3%.*} if test ! $EXIT ; then EXIT=25 ; fi ;; *fan*) EXIT=( ‘cat /proc/sys/dev/sensors/*/$1 2>/dev/null|| echo 200‘ ) EXIT=${EXIT[1]} ;; esac exit $EXIT Eine Einschränkung besteht jedoch im maximalen Return-Wert, welcher 255 nicht überschreiten kann. Vorsicht ist auch geboten, wenn man versucht, temporäre Daten auf der Festplatte zwischenzuspeichern, da diese potentiellen Angreifern einen Einstieg erlauben könnten. Den Weg der Daten bis zur Anzeige im Monitoring-Tool kann man sich so veranschaulichen: 16.7 Überwachung weiterer Parameter Der anschließende Abschnitt ([H]) definiert das Verhalten eines weiteren Astes in der UCDSNMP-MIB. Mit den Object Identifiers diesen Bereiches läßt sich der verbleibende Festspeicherplatz nach Lage im Dateisystembaum beobachten. Der Zahlenwert definiert die untere 16.7. ÜBERWACHUNG WEITERER PARAMETER 239 Grenze, ab der eine Warnmeldung in die Ergebnistabelle eingetragen wird. Das nächste Beispielkommando liefert die z.B. prozentuale Belegung der als ”Rootfilesystem” gemounteten Festplatte: dirk@linux:~/kurs> snmpget target-host public .1.3.6.1.4.1.2021.9.1.9.1 enterprises.ucdavis.dskTable.dskEntry.dskPercent.1 = 37 Das Programm snmpgetnext kann man benutzen, um den zweiten Wert der Liste (die prozentuale Auslastung von /tmp) zu erhalten. Auch [I] konfiguriert einen Unterbaum der UCD-SNMP-MIB: Die LoadTable (1.3.6.1.4.1.2021.10). Die Ganzzahlwerte nach dem Schlüsselwort geben die Maximalwerte an, bis zu denen kein Warneintrag analog zur Dateisystembelegung generiert wird. Die vorhergehenden Beispiele bezogen sich auf die Net-SNMP-Implementation, eine Zusammenarbeit mit anderen Komponenten ist natürlich angestrebt und klappt entsprechend. Z.B. lässt sich mit dem Befehl: dirk@linux:~/kurs> snmpset 10.10.1.1 private interfaces.ifTable.ifEntry. ifAdminStatus.101 i down der Port Nummer 1 auf einer 3COM SuperStack3 abschalten. Analog funktioniert dieses auch mit einem Cisco C3500X, wobei die Portnummern hier von 1 - n durchnummeriert sind (n statt 101, wie im obigen Beispiel). 16.7.1 Weitergehende Ergänzungen Wem die einzeilige Ausgabe nur des Rückgabewertes in Abschnitt [G] nicht genügte, findet seine Vorstellungen evtl. in [J] gelöst. Mit diesem MIB-Bereich ist es möglich mehrzeilige Ausgaben zuzulassen, die als entsprechende Tabelleneinträge zurückgeliefert werden. In der Beispielkonfigurationsdatei werden die OIDs (1.3.6.1.4.1.2021.51 - 53) definiert. Diese generieren verschiedene Ausgaben zur Hardwareausstattung und angemeldeten lokalen Benutzern der Maschine aus dem Aufruf von externen Programmen. Auf diese Weise kann Informationsbeschaffung auf SNMP abgebildet werden, welches dann ein Einloggen auf dem Zielsystem unnötig macht. Eine Konfigurationszeile ist so aufgebaut, dass nach dem Schlüsselwort ”exec” die OID des Objektes angegeben wird, gefolgt vom Namen des Objekts, dem Aufruf des korrespondierenden externen Programms oder Skriptes inklusive eventueller Optionen. Eine ganze Reihe weiterer Laufzeitinformationen ließe sich auf diesem Wege beschaffen. Jedoch gibt es einige Einschränkungen bezüglich der verwendeten Datenfelder (nur TextFelder oder Return-Codes bis zum maximalen Wert von 255 sind erlaubt), so dass nach einer Testphase (z.B. der Auswertung der Meldungen des SMB) über eine feste Einbindung als Modul nachgedacht werden sollte. Eine Anleitung, wie ein Modul für den UCD-SNMP zu schreiben ist und wie die dazugehörige MIB designt werden muss, findet sich auf der Projekt-Homepage. In der Tutorial-Sektion findet sich die Beschreibung eines Toolkits, welches das Programmieren eigener Erweiterungen mittels C erlaubt. Enthalten sind in der Schritt-fürSchrittanleitung ein Makefile, der Beispiel-Code einer SNMP-Applikation und eine TutorialMIB mit Headerdatei und eine C-Sourcedatei. Header und C-Source sind zum größten Teil mit mib2c erstellt worden, was einen guten Ausgangspunkt für eigene Versuche liefert. Beim Neuübersetzen des Agenten kann das experimentelle Modul eingefügt werden. Auf diesem Wege könnte der Umweg über das oben beschriebene Shellskript zugunsten einer festen Implementierung abgelöst werden. Damit würden sich weiterhin die Beschränkungen der Variablen aufheben lassen, da man deren Deklaration mittels MIB selbst in der Hand hat. 240 KAPITEL 16. NETZWERKÜBERWACHUNG 16.7.2 Parameter der Host-Ressource-Erweiterungen Wurden die SNMP-Bibliotheken und der Agent mit der Unterstützung für die HOSTRESOURCES-MIB übersetzt, stehen weitere Informationen zur Verfügung. Unterhalb des Datenbaumes .1.3.6.1.2.1.25, wird diese MIB eingehängt und (unter der Voraussetzung, dass die Werte beschafft werden können) werden die Variablen ausgegeben. Siehe Tabelle 14.4 Beispielkonfiguration, Listing von /etc/ucdsnmpd.conf: # [A] Access Control com2sec local localhost public com2sec mynetwork 172.16.30.0/22 public com2sec mynetwork 10.0.0.0/8 public # [B] group group group group group group Second, map the security names into group names: MyRWGroup v1 local MyRWGroup v2c local MyRWGroup usm local MyROGroup v1 mynetwork MyROGroup v2c mynetwork MyROGroup usm mynetwork # [C] Third, create a view for us to let the groups have rights to: view all included .1 # [D] Finally, grant the # write permissions: # context access MyROGroup "" access MyRWGroup "" 2 groups access to the 1 view with different sec.model sec.level match any noauth exact any noauth exact # [E] System contact information syslocation Internet-AG Universitaet Goettingen syscontact <dirk@goe.net> # [F] Process checks. proc automount 2 2 proc X 2 1 proc kdm 1 1 proc ypbind 4 1 proc sshd 10 1 proc axnet 1 0 proc rwhod 1 0 proc cron 1 0 proc xinetd 1 0 proc chooser 1 0 # [G] Executables/scripts exec sensors /bin/sh /usr/share/snmp/sensors exec sensors /bin/sh /usr/share/snmp/sensors exec sensors /bin/sh /usr/share/snmp/sensors exec sensors /bin/sh /usr/share/snmp/sensors exec sensors /bin/sh /usr/share/snmp/sensors exec sensors /bin/sh /usr/share/snmp/sensors exec empty /bin/echo 252 exec empty /bin/echo 253 temp1 temp2 temp3 fan1 fan2 fan3 read all all write none all notif none none 16.8. MRTG ALS FRONTEND ZUR ANZEIGE VON ZEITREIHEN 241 exec empty /bin/echo 254 exec empty /bin/echo 255 exec user_activity /bin/sh /usr/share/snmp/uabic # [H] disk checks disk / 100000 disk /tmp 20000 # [I] load average checks load 5 4 4 # [J] Extensible sections exec .1.3.6.1.4.1.2021.51 users /usr/bin/who exec .1.3.6.1.4.1.2021.52 pci_devices /sbin/lspci exec .1.3.6.1.4.1.2021.53 cpuinfo /bin/cat /proc/cpuinfo 16.8 MRTG als Frontend zur Anzeige von Zeitreihen Der Multi Router Traffic Grapher ist nun eine Anwendung, welche es ermöglicht auf Basis von SNMP Netzwerkgeräte zu überwachen. Zur Visualisierung erzeugt MRTG HTML-Code. In diesen Code werden PNG-Grafiken eingebunden, welche die Belastung einer bestimmten Einheit (Netzwerkinterface, Zahl der Benutzer, Load der Maschine) visualisieren. MRTG erzeugt diese Grafen fortlaufend mit jedem Aufruf des Programms. Das Tool basiert auf einem Perl-Skript, das das Simple Network Management Protocol (SNMP) benutzt, um die Daten von den Netzwerkkomponenten oder Endgeräten zu pollen. Ein C-Programm protokolliert die Werte mit, um erzeugt daraus Auslastungsstatistiken und Auslastunggrafen. In Ergänzung zur der detaillierten, täglichen Ansicht, erzeugt MRTG Grafen, die den Duchsatz der letzten sieben Tage, der letzten vier Wochen und der letzten zwölf Monate wiedergeben. Dies ist möglich, da MRTG allen Daten, die es aus dem Router ausließt, in eine Log-Datei schreibt. Für die Beobachtung längerer Zeiträume bietet sich eine Kombination mit dem RRD-Tool an. Dieses ist eine spezielle Datenbank, welche ihre Einträge im Round-Robin-Verfahren speichert. MRTG speichert die Informationen über die zu üeberwachenden Systeme in der Datei mrtg.cfg. In dem MRTG-Paket befindet sich ein Perl-Skript, welches das Erzeugen einer Konfigurationsdatei erheblich vereinfacht: cfgmaker. Falls man MRTG selbst übersetzt hat, findet man cfgmaker in dem Unterverzeichnis ./run. Ein Aufruf zur Erzeugung der Konfigurationsdatei könnte so aussehen: cfgmaker --global ’WorkDir: /www/mrtg’ --output /etc/mrtg.cfg --global \ ’Options[_]: bits,growright’ <community>@<target-host.domain> Listing einer Beispielkonfigurationsdatei mrtg.cfg: ###################################################################### # Multi Router Traffic Grapher -- Sample Configuration File ###################################################################### # This file is for use with mrtg # Global configuration WorkDir: /var/www/mrtg WriteExpires: Yes Title[^]: Traffic Analysis for 242 KAPITEL 16. NETZWERKÜBERWACHUNG # 2048kBit leased line # ---------------#Title[leased]: a 2048kBit leased line #PageTop[leased]: <H1>Our 2048kBit link to the rest of the internet</H1> #Target[leased]: 1:public@router.my.domain #MaxBytes[leased]: 200000 16.9 Einige abschließende Worte zu SNMP Während SNMP recht einfach und flexibel einzusetzen ist, hat es jedoch auch einige Nachteile. Das Sicherheitsmodell der Version 1 und 2 ist schwach. Verwendet man SNMP zum Setzen von Variablen kann leicht etwas schief gehen, so dass man z.B. den Switchport abschaltet über den man mit dem Netzwerk verbunden ist. Schwierig wird es auch aufkommende objektorientierte Ansätze, wie die Beschreibung mittels XML in SNMP umzusetzen. SNMP war lange Zeit die Spezialität weniger Netzwerkadministratoren und Programmierer, so dass das Wissen darüber immer noch nicht sehr weit verbreitet ist. Inzwischen wurde die erdrückende Vormacht der Kommandozeile durch eine Reihe grafischer Erweiterungen aufgelöst, so dass auch SNMP-Neulingen ein zügiger Einstieg gelingen kann. Trotz der genannten Probleme ist SNMP aus Sicht des Autors das beste Protokoll zur Netzwerküberwachung. Es ist universal, bandbreitenschonend und wirklich plattform unabhängig. Die Hersteller von Netzwerkkomponenten setzen weiterhin auf SNMP, alle neuen Gerätetypen die herauskommen, wie z.B. Access-Points für Wireless LAN, verfügen über eine entsprechende Schnittstelle. SNMP in der dritten Version, wie es vor einiger Zeit spezifiziert wurde, erlaubt bessere Authentifizierungsverfahren und Verschlüsselung der Daten. Darüberhinaus ist es mittels Modularisierung über Sub-Agenten flexibler geworden. Die Popularität von Linux und die inzwischen mit Net-SNMP und anderen frei zur Verfügung stehenden Implementationen haben ihren Betrag zur Verbreitung von SNMP erbracht. Alle großen Linux Distributionen enthalten eine ganze Reihe von SNMP Software, mit der sich viele anstehende Probleme bereits lösen lassen. Ein attraktives Tool zur Visualisierung spezieller SNMP-Variablen, wie die Auslastung eines Endgerätes oder einzelner Schnittstellen von Netzwerkknoten, wurde mit MRTG bereits vorgestellt. NetSaint, welches neben anderen Überwachungsfunktionen SNMP zum Sammeln der Daten einbezieht, soll im zweiten Teil dieses Artikels besprochen werden. 16.10 Weiterführende Literatur [1] Homepage des Net-SNMP: http://netsnmp.sourceforge.net [2] Scotty-SNMP-Bibliothek: http://wwwsnmp.cs.utwente.nl/ schoenw/scotty [3] MRTG-Homepage: http://www.mrtg.org [4] Projektbericht zur Überwachung großer Netzwerke an der Universität Göttingen http://www.stud.uni-goettingen.de/ dsuchod/dgsvgr [5] Cheops der Klassiker: http://www.marko.net/cheops [6] Cheops Next-Generation: http://cheops-ng.sourceforge.net [7] MIB-Browser: http://goldplated.atlcartel.com/mbrowse.html [8] Douglas E. Comer, TCP/IP 16.10. WEITERFÜHRENDE LITERATUR OID Standard-OIDs (MIBII) system.sysDescr Datentyp Beschreibung system.sysLocation system.sysUpTime system.syscontact system.sysName text int text text interfaces.ifNumber interfaces.ifTable int table at.atTable ip.ipforwarding table int ip.ipAddrTable table icmp.* tcp.tcpConnTable int table udp.udpTable snmp.* OIDs der UCD-SNMPMIB prTable.* table int memory.memTotalReal int extTable.* table laTable.* int systemStats.* int ucdExperimental.* text table 243 Geräteinformation: Hersteller, Name des Modells, Version der SOftware o.ä. Aufstellungsort des Gerätes Millisekunden seit dem Start des Agenten Kontakt zum Admin des Gerätes Name der Maschine; üblicherweise der DNSName Zahl der vorhandenen Netzwerkschnittstellen Array der verschiedenen Infos pro Schnittstelle (Name, Typ, Geschwindigkeit, MTU) ARP-Tabelle Bei Geräten mit mehreren Interfaces: 1, falls IP-Forwarding stattfindet, sonst 2 IP-Informationen der versch. Interfaces (Broadcast-, Routeradressen, Netzmasken und Metrik) Eine Menge von ICMP-Statistiken Liste der bestehenden TCP-Verbindungen mit Status Liste der offenen UDP-Sockets Eine Menge von SNMP-Statistiken Tabelle der auf minimal und maximal laufende Instanzen zu überwachende Prozesse Menge des zur Verfügung stehenden Arbeitsspeichers Ausbaubare Spezial-MIB zur Ausführung von Programmen und Skripten Load Average Werte (1, 5, 15 Minuten Intervall) Eine Menge systemspezifischer Variablen und Maximalwerte Eintrag für die später beschriebene eigene MIB-Erweiterung Tabelle 16.2: Beispieldaten (OIDs) der Standard-MIBs 244 KAPITEL 16. NETZWERKÜBERWACHUNG Kommando get-request get-nextrequest get-bulkrequest response set-request inform-request trap Bedeutung Ermittele den Wert einer bestimmten Variablen Ermittele den Wert der nächsten Variablen ohne ihren genauen Namen zu kennen Ermittele einen Block von Variablen (z.B. Tabellen) Anwort auf o.g. Requests Speichere einen bestimmten Wert in eine Variable Referenz zu weiteren z.B. Proxy-Daten Antwort, ausgelöst durch einen Event-Trigger Tabelle 16.3: Das SNMP-Kommando-Set OID hrSystem hrStorage hrDevice hrSWRun hrSWRunPerf hrSWInstalled Bedeutung Zahl der laufenden Prozesse und angemeldeten Benutzer Speicher der verschiedensten Form, wie Real Memory, Swap, Memory Buffers Liste verfügbarer Geräte, wie Drucker, Prozessor, Mainboardchipset Liste der laufenden Prozesse (wie ”ps”) CPU-Verbrauch der laufenden Prozesse Liste der installierten RPM-Pakete (setzt ein System auf Basis des Redhat-Package-Managers voraus) mit Installationsdatum Tabelle 16.4: Variablen der Host-MIB Kapitel 17 Systemsicherheit 17.1 Generelle Überlegungen Sichere Rechner bzw. Betriebssysteme kann es nicht geben. Diese werden von Menschen geschaffen und die Ideen zur Sicherheit werden meistens durch Bequemlichkeit, Unaufmerksamkeit oder Schlampigkeit wieder ausgehebelt. Weiterhin möchte kein Administrator Tag und Nacht vor einer Maschine hocken und nachsehen, was die Benutzer, Services (Dienstprogramme) und die verschiedenen Prozesse so treiben. Generell gibt es zwei Sicherheitsbereiche, die man unterscheiden kann: Die (physikalische) Sicherheit der Maschine selbst und Angriffsmöglichkeiten aus dem Netzwerk bzw. Internet. Eine weitere Möglichkeit sich aktiv gegen Angreifer aus dem Netz zu schützen und auch nur bestimmte Kanäle aus dem eigenen Netz zuzulassen, ist das Aufsetzen einer Firewall (“Schutzwand”); vgl. Kap.19.1 17.2 Sicherheit auf dem Rechner 17.2.1 Einleitung Ein Angriff eines Hackers war bereits im ersten Schritt erfolgreich, wenn er sich unerlaubt als ganz normaler Benutzer Zugriff auf einer Maschine verschaffen konnte. Dann sind seine Rechte schon weit höher als wenn er noch von “aussen” versuchen muss, auf das Gerät einzudringen. Deshalb sollte es immer Politik bei der Vergabe von Dateirechten geben, normalen Systembenutzern immer gerade soviele Rechte einzuräumen, wie sie zum Arbeiten benötigen. Deshalb laufen inzwischen auch viele Dienste, wie z.B. der Nameserver Bind (Daemon: named) oder der X-Displaymanager gdm unter einer eigenen BenutzerID und nicht mehr mit Rootrechten. So bedeutet ein erfolgreicher Einbruch in diese Dienste noch nicht eine automatische “Übernahme” der Maschine. 17.2.2 Passwörter Das Passwort sollte nicht trivial sein! Worte, die in einem Lexikon zu finden sind, haben als Passwort keinen Wert. Knackprogramme benutzen genau solche Lexika, um bekannte Worte vorwärts, rückwärts und in Kombinationen durchzuprobieren. Der Einwand “man habe keine schützenswerte Daten in seinem Account und müsse darum nicht so viel Aufwand treiben” ist vordergründig verständlich, aber dennoch nicht richtig. In einem Beispiel versteht man es besser: Möglicherweise hat ein Mieter in einem 245 246 KAPITEL 17. SYSTEMSICHERHEIT Mietshaus tatsächlich keine Wertgegenstände, die ihm schützenswert erscheinen, doch es ist nicht akzeptabel, dass er darum die Haustüre offen stehen läßt und damit das Eigentum der Mitbewohner gefährdet. Obendrein, wenn die Bude abbrennt, wird auch dieser Mieter gewahr, dass das Gebäude, sein Dach über dem Kopf, doch ein schützenswertes Objekt darstellt. Um im Bild zu bleiben, auch die Weitergabe von Schlüsseln (Passwörtern) an Dritte ist in diesem Rahmen nicht akzeptabel! Deshalb genügt es auch nicht, wenn das Rootpasswort besonders sicher ist. Bereits mit den Rechten eines normalen Benutzers hat man mehr Möglichkeiten des Einbruchs als mit gar keinem Account auf einer Maschine. Die Konfiguration zur Passwortsicherheit (Gültigkeitsdauer von User-Passwörtern, Fehlversuche beim Login, Länge des Passwortes) werden in der Datei /etc/login.defs eingestellt. 17.2.3 Der Admin-Account Den Account des Administrators “root” nur so lange verwenden, wie unbedingt notwendig, z.B. für die Installation von Software, die allen Benutzern zur Verfügung gestellt werden soll. Keinesfalls als “root” die tägliche Arbeit machen. Dafür existieren die gewöhnlichen Benutzeraccounts, deren Rechte für die Standardaufgabenstellungen ausreichen. Administrative Aufgaben sollten niemals müde oder in Eile ausgeführt werden, da mit “root”-Rechten leicht irreversible Schäden angerichet werden können. 17.2.4 /etc/passwd und /etc/shadow Ein System sollte das Passwort der Benutzer unbedingt nicht in /etc/passwd speichern! Die Datei /etc/passwd ist für die Welt lesbar und muss es auch sein, damit der eine oder andere Dienst funktioniert. Das Problem dabei ist, dass somit jeder mit einem Cracker bewaffnet auf Passwortsuche gehen kann, solange die Passwörter in dieser Datei stehen. Es leuchtet ein, dass ein Passwort, das in einer Datei steht, die nur “root” lesen kann, diese Hintertüre schließt. Also: Shadow-Passwort (in /etc/shadow) benutzen! 17.2.5 Locken oder ausloggen Aus demselben Grund wie zuvor, ist beim Verlassen einer Maschine darauf zu achten, dass man bei allen Konsolen ausgeloggt ist oder diese gelockt hat. Arbeiten mehrere Leute an der Konsole, dann sollte man so nett sein und die Sitzung beenden (und nicht nur den Bildschirm sperren). 17.2.6 Setuid und Verzeichnisse Es ist darauf zu achten, dass normale Benutzer in System-Verzeichnissen wie /etc, /bin, /usr/bin, /sbin usw. keine Schreibberechtigung besitzen. Sollten sie es doch haben, so können sie dort ein Programm unterbringen (z.B. Verschreiber zu ls oder cd (ls-al ld la ks xs vf ...)). Das Programm wartet, bis es einmal ausversehen von “root” aufgerufen wird ... und Voila! Es wird ein Programm z.B. mit dem Namen gainr nach /tmp, /var/tmp oder sonst wo hin geschrieben, das nichts anderes als eine Shell mit setuid ROOT ist. Ruft man dann als normaler Benutzer gainr auf, so ist man plötzlich “root” - ganz ohne Passwort. Erste Konsequenz: Ein normaler Benutzer soll NUR Zugriff auf sein Home-Verzeichnis und auf /tmp haben! Zweite Konsequenz: Die Variable PATH des Benutzers “root” muss restriktiv gehalten werden. Das aktuelle Arbeitsverzeichnis hat im PATH von “root” nichts verloren! Dritte Konsequenz: Die Liste der “setuid root” (-rwsr-xr-x) Programme regelmäßig mit der Frage nach Wachstum kontrollieren. 17.3. LITERATUR 17.2.7 247 Setuid und Mounting Mit dem Mounten ist es genauso, nur noch einfacher für den Hacker. Ein wechselbares Medium darf nie und nimmer setuid-fähig sein! Ansonsten stellt sich der Hacker zuhause ein Medium her mit einer Shell, die “root” gehört und das setuid-bit gesetzt hat (vergl. gainr. Dieses mountet er im Zielsystem (oder läßt es vom Admin mounten...) und ...Voila! Einfach aufrufen und fertig! Das Mountkommando kann aus Sicherheitsgründen nur vom Superuser aufgerufen werden. Sollen normale User dazu in die Lage versetzt werden, ist die /etc/fstab bzw. die Konfiguration des Automounters anzupassen. Dann sollte man darauf achten, dass für diese Bereiche keine Ausführungsrechte für Programme gesetzt werden (Option: noexec). 17.2.8 Browser, CGI / Java-Applet und Binaries, per Mail Grundsätzlich sind alle Programme, die über einen grauen Kanal von außen kommen, als hoch gefährlich einzustufen. Ein Binary, das per Mail kommt und zur Ausführung gebracht wird, kann alles enthalten, wovor sich der Admin in schlimmsten Fieberträumen fürchtet. Auch ein Java-skript kann im Prinzip tun was es will, auch die Datensicherheit korrumpieren. Ein einfaches CGI-Skript einer Suchmaschine ist ein echtes Risiko. Wie in der CT 4’98 beschrieben, reicht es aus, ein Semikolon gefolgt von einem subversiven Befehl als Suchbegriff einzugeben und schon steht da anstelle eines grep-Parameters ein falsch abgesetzter grep-Befehl gefolgt von einem Befehl frei nach Hackers Wahl. Auf Grund der Vielzahl von Schwachstellen und Programmierfehlern sollten Web-Browser an sich für den User “root” tabu sein und nur unter der ID normaler User ausgeführt werden!! 17.2.9 Physikalischer Zugriff Derjenige, der physikalischen Zugriff zu einer Maschine hat, ist eigentlich auch schon “root”! Das liegt daran, dass die Konsole zugreifbar ist. Um es nicht ganz so einfach zu machen, sollten bootfähige und wechselbare Laufwerke (z.B. floppy) von der Boot-Fähigkeit abgehalten werden. Der Durchschnitts-Hacker braucht aber diese Laufwerke ohnehin nicht. Dieser ist mit einer Reset-Taste oder einem Netzstecker, sowie einer Konsole vollkommen zufrieden. Der lilo ohne Passwortschutz erlaubt einfachste Angriffe! Abhilfe: Die Maschine unter Verschluss halten. Keiner Maschine, die nicht unter Verschluss ist oder mit dem Internet verbunden ist, kann man vertrauen. 17.3 Literatur Einschlägige Mailing-Listen abonnieren und Webseiten untersuchen http://internet-security.de http://www.cert.org/ http://www.ers.ibm.com/ http://www.ccc.de/ THE DENIAL OF SERVICE PAGE Linux-Mailinglisten http://www.diabolo666.com/tools/Tutorial.htm Monografien gibt es inzwischen auch einige zum Thema ... z.B.: Simson Garfinkel, Gene Spafford, Practical Unix and Internet Security 2.Edition, O’Reilly, 2000, ISBN 1-56592-148-8 248 KAPITEL 17. SYSTEMSICHERHEIT 17.4 Sicherheit im Netzwerk 17.4.1 Einleitung Die erste Hürde, die sich Angreifern stellt, ist üblicherweise der lokale Zugang auf ein System. Dazu benötigen sie meistens eine gültige UserID mit Passwort bzw. den Zugriff über einen auf der Maschine verfügbaren Netzwerkdienst, wie den Web-, NFS-, Nameserver etc. Dieser Zugriff kann durch das ablauschen von Verbindungen, wie z.B. ”telnet”, ”ftp”, ”pop3”, ... Anfragen erfolgen, die keine verschlüsselten Passwörter verwenden. Die andere Möglichkeit ist die Ausnutzung von Sicherheitslücken in verfügbaren Diensten. Deshalb sollten beim Aufsetzen eines Servers immer überlegt werden, welche Dienste überhaupt notwendig sind und aus welchem Bereich der Zugriff erfolgen können soll. So wird z.B. der Webserver weltweit erreichbar sein, das Login, NFS, bzw. Samba für den Zugriff der Webadministratoren meistens jedoch nur aus einem beschränkten Netzwerkbereich erforderlich sein. 17.4.2 Gesicherte Verbindungen Das Internet-Protokoll IP und die Transportprotokolle UDP und TCP bringen keinerlei Sicherheit mit. Die Pakete können auf dem Transportweg verfälscht und der Inhalt leicht abgelauscht werden. Hiergegen sind Vorkehrungen zu treffen, die an verschiedenen Stellen der Verbindung ansetzen können: Host 1 Anwendung Transport Netzwerk Datensicherung Sicherung S-HTTP, PGP, eCASH SOCKS, SSL IPSec PAP, CHAP, PPTP Host2 Anwendung Transport Netzwerk Datensicherung Tabelle 17.1: Verschiedener Ansatz von Absicherung Bekannt sind inzwischen sicherlich die Kryptosoftware zum Mailversand, PGP und der Telnetersatz SSH. Diese setzen an der Anwendungsschicht an. Die Absicherung der Transportschicht kann durch SSL (Secure Sockets Layer) erfolgen, was von verschlüsselten HTTPVerbindungen bekannt sein sollte. IPSec setzt an der Netzwerkschicht an und soll zum einen die Herkunft der Pakete sicherstellen und zum Anderen das Mitlesen der Daten verhindern und diese vor unerkannter Manipulation schützen. Ausführliche Erläuterungen zu IPsec erfolgen im nächsten Kapitel. 17.4.3 ssh und scp Es ist immer damit zu rechnen, dass irgendwo hinter den nächsten beiden Ecken ein Hacker sein Laptop genau in das Netz-Segment eingeklinkt hat, in dem man sich befindet. Die Folge davon ist, dass alles, was man Klartext über das Netz schickt oder was man geschickt bekommt, mitgelesen werden kann. Das betrifft TCP genau so wie UDP! Der Hacker muss also nur warten, bis sich irgend ein Benutzer auf einer anderen Maschine einloggt (telnet, pine, ftp ...) und dann genau die folgenden Pakete dieser beiden Maschinen mitprotokollieren. In der Folge erhält er einen Account-Namen und ein Passwort, das dazu paßt. ... Abhilfe schafft man hier durch Verwendung der ssh (SecureShell) und SecureCopy scp zum Kopieren von Dateien über Rechnergrenzen hinweg. Damit baut man einen verschlüsselten 17.4. SICHERHEIT IM NETZWERK 249 Kanal zwischen zwei Rechnern auf: dsuchod@s14:~ > ssh dirk@s1.goe.net dsuchod@s14:~ > ssh -l dirk s1.goe.net dsuchod@s14:~ > ssh -l dirk s1.goe.net Netscape Auch wenn man dann X-Anwendungen startet, benutzen diese den verschlüsselten Kanal (Hier spart man sich sogar gegenüber telnet das Setzen der DISPLAY-Variablen). Das Setzen von Umgebungsvariablen wird im Abschnitt zur Shell erörtert. Im letzten der Beispiele, die oben gezeigt wurden, hat man sich nicht mehr auf der Maschine eingeloggt, sondern nur noch ein Kommando abgesetzt, welches remote ausgeführt wird. Möchte man sich regelmässig auf verschiedenen Rechnern einloggen und nicht jedesmal sein Passwort für diese Verbindung angeben, kann man einen Schlüssel auf dem entsprechenden Rechner generieren und den Public-Teil in der Datei: /.ssh/authorized keys (im Homeverzeichnis unterhalb des versteckten Verzechnisses .ssh) speichern. dsuchod@s14:~ > ssh-keygen -t dsa Mit dem Tool ssh-agent kann man sich das Leben noch erleichtern: Dieser fragt zu begin einer Sitzung die Passphrase für die gesammelten Schlüssel ab und authentifiziert jede bereits einmal aufgebaute Verbindung automatisch ohne weitere Nachfrage. 17.4.4 Der Intenet-”Super”-Daemon (x)inetd Viele Dienste, die nicht sehr häufig nachgefragt werden, wie z.B. ”telnet”, ”talk” und ”ftp” müssen nicht permanent im Hintergrund laufen und die CPU, sowie den Arbeitsspeicher belasten. Sie werden auf Anforderung durch den (x)inetd gestartet und nach Beendigung der Verbindung wieder geschlossen. Der xinetd stellt die weiterentwickelte Form des inetd dar und kann die oben genannte Forderung nach der Beschränkung des Zugriffs von sich aus erfüllen. In der Konfigurationsdatei des Dienstes der /etc/xinetd.conf können Bereiche angegeben werden, von denen der Zugriff auf einen bestimmten Dienst erlaubt wird: service ftp { socket_type protocol wait user server server_args only_from } = = = = = = = stream tcp no root /usr/sbin/proftpd -p 0 172.16.0.0/16 Der inetd benötigt hierzu noch den TCP-Wrapper tcpd, welcher über die Dateien /etc/hosts.deny und /etc/hosts.allow gesteuert wird. Generell gilt natürlich, dass alle Dienste, die nicht benötigt werden, auf jeden Fall deaktiviert werden sollten. Gerade diese bergen häufig die Gefahr, dass (weil man nicht an sie denkt) hierüber der erfolgreiche Angriff stattfindet. 250 17.4.5 KAPITEL 17. SYSTEMSICHERHEIT xhost + und das unsichtbare Fenster Mit ”xhost +” serviert man potentiellen Einbrechern die gewünschten Informationen auf einem goldenen Tablett! Das einzige, was der Hacker zu tun hat, ist ein unsichtbares Fenster auf dem Bildschirm zu platzieren. Dieses bekommt natürlich, weil es zu oberst liegt, alle Informationen von Maus und Keyboard exklusiv. Je nach Gutdünken des Hackers werden diese Informationen an die Fenster, an die sie eigentlich gerichtet sind, weitergeleitet oder eben auch nicht. Der Hacker kann alles mitprotokollieren oder das keyboard/maus toten Mann spielen lassen oder alles andere, was das Herz begehrt, mit dem Bildschirm anstellen. Ein Login-Bildschirm über Nacht auf’s Display gezaubert, bringt am nächsten Morgen ein sicheres Passwort. 17.4.6 .rhosts Es ist grundsätzlich abzulehnen, den eigenen Account gegenüber einem Benutzer zu öffnen, der behauptet, sich auf einer Maschine zu befinden, die ihrerseits behauptet, einen bestimmten Namen zu tragen. Man sieht schon jetzt wie fragil das Konstrukt ist... Jeder kann irgendetwas behaupten, aber darum ist demjenigen noch kein Account zu öffnen. Das Konzept der R-Tools (Steuerung über die .rhosts im eigenen Homeverzeichnis) wie sie einmal von Sun eingeführt wurden, ist in der heutigen Zeit obsolet geworden. Dazu gibt es SecureShell und -Copy und den SSH-Agent, wenn man vermeiden will, bei jedem Login auf einer anderen Maschine immer wieder ein Passwort eingeben zu müssen. 17.4.7 Überprüfung der Netzwerksicherheit eigener und anderer Rechner Es gibt inzwischen eine ganze Reihe von Programmen, mit denen sich der Netzwerkverkehr überwachen und überprüfen lässt. Dieses sind zum einen die Tools zum ”Mitlauschen” des Datenverkehrs tcpdump, ntop und ethereal. Gerade das letzte Tool ist besonders zu empfehlen, da es über ein komfortables grafisches Frontend, gute Packetviewer und Filterfunktionen verfügt. ntop ist ein textbasiertes interaktives Programm, welches aktuelle Verbindungen und die dabei umgesetzten Datenmengen nach Verbindung und Protokollart aufzeigt. tcpdump arbeitet an der Kommandozeile und schneidet Pakete mit, welche an der Netzwerkschnittstelle angenommen werden. Bei allen Tools lassen sich auch Nicht-IPProtokolle registrieren. Die Untersuchung auf bestimmte Dienste, d.h. offene Ports von Rechnern oder in Netzwerken, lässt sich mit dem Portsniffer nmap bewerkstelligen. nmap -O 172.16.0.0/16 nmap -sP 172.16.1.0/24 nmap -sT 172.16.1.1 nmap -sU www.goe.net Feststellen des Betriebssystems im Class-B-Subnetz Ping-Scan (Erreichbarkeit von Rechnern Class-C-Subnetz Scan auf offene TCP-Ports der Maschine mit der IP 172.16.1.1 Scan auf offene UDP-Ports der Maschine mit dem FQDN www.goe.net Tabelle 17.2: NMAP im Einsatz 17.5. AUFGABEN 17.4.8 251 Firewall Inzwischen gibt es drei Firewallimplementationen für den Linuxkernel: Das ipfwadm führte diese Funktionalität in den 2.0.er Kernel als ein wichtiges neues Feature ein. Die Firewallingfähigkeit wurde mit ipchains im Kernel der 2.2.er Serie stark verbessert und wird deshalb in einem eigenen Kapitel beschrieben. Der Kernel 2.4 bringt eine weiter verbesserte Firewall mit netfilter mit sich, ist aber abwärtskompatibel über Kernelmodule zu ipfwadm und ipchains. 17.5 Aufgaben 17.5.1 Secure Shell 1. Wie sieht das Kommando aus, wenn man sich auf eine entferne Maschine (RemoteLogin) mit dem Rechnernamen test.domain.local verbinden will und man die BenutzerID ”userid” auf der entfernten Maschine verwenden will und unter einer anderen ID auf der Ausgangsmaschine angemeldet ist? 2. Wie könnte der SCP-Kopierbefehl aussehen, wenn eine Datei namens unterlagen.txt vom Rechner test.domain.local unter der UserID ”root” in das lokale Verzeichnis auf dem eigenen Rechner kopiert werden soll? 3. Welches Problem liegt vor, wenn ich folgende Meldung zu sehen bekomme? user@linux:~/SharedFiles/kurs/klausur> ssh 10.30.4.44 8014: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 8014: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ 8014: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 8014: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 8014: Someone could be eavesdropping on you right now (man-in-the-middle attack)! 8014: It is also possible that the RSA host key has just been changed. 8014: The fingerprint for the RSA key sent by the remote host is 53:8c:4b:13:f6:df:2e:d1:e5:cf:21:12:a4:c2:ea:c5. 8014: Please contact your system administrator. 8014: Add correct host key in /home/user/.ssh/known_hosts to get rid of this message. 8014: Offending key in /home/user/.ssh/known_hosts:11 8014: RSA host key for 10.30.4.44 has changed and you have requested strict checking. 8014: Host key verification failed. 4. Wie kann ich mich auf anderen Maschinen per SSH unter Vermeidung der Eingabe eines Passwortes anmelden? Wann benötigt man dieses? 5. Wie tunnele ich eine POP3-Verbindung (Port 143) von meiner Maschine (z.B. mymachine.dyndns.org) auf den POP3-Server (z.B. pop3.mydomain.local), wo ich über einen SSH-Zugang verfüge? 252 KAPITEL 17. SYSTEMSICHERHEIT Kapitel 18 Sicheres IP 18.1 Sicherheitsprobleme des derzeitigen IP-Standards 18.1.1 Intro Die Idee und erste Implementationen des Internet Protokolls gehen auf die Anfänge der 70er Jahre zurück. Sicherheitserwägungen spielten bei der Entwicklung des IP zu begin nur eine nachrangige Rolle bzw. wurde bewußt auf höhere Protokollschichten verlagert. Die Datenpakete, in die Datenströme aufgeteilt werden, passieren auf ihrem Weg zwischen Sender und Empfänger eine ganze Reihe von Routern. Der Weg selbst ist in den meisten Fällen nicht vorherbestimmt (von besonderen Ausnahmen einmal abgesehen). So können Pakete, obwohl sie zwischen Partnern innerhalb einer Stadt ausgetauscht werden, durchaus mehrfach Landesgrenzen überschreiten. An der Weiterleitung dieser Datenströme sind dann meistens mehrere Provider beteiligt, die über sehr unterschiedliches Know-How und Sicherheitsvorstellungen verfügen können. 18.1.2 Offener Datentransport Für den Transport von Daten in einem Netzwerk, d.h. eine Kommunikation zwischen zwei Rechnern A und B, benötigt man offene und gemeinsame Standards, damit eine Verbindung zustande kommen kann. Hierfür reicht es aus, dass jeweils die Datenheader der verwendeten Protokolle genormt und für alle am Transport Beteiligten interpretierbar sind. Da Empfänger und Absender nicht direkt miteinander kommunizieren, sondern ihre Pakete nur an den nächsten Router (meistens einfach an das Default-Gateway) ausliefern, lassen sich Aussagen über die Authentizität und die Richtigkeit des Inhaltes von Paketen nicht machen. Für erfahrene Anwender bzw. Benutzer einschlägiger Programme ist es überhaupt kein Problem IP-Pakete mitzulesen (z.B. dsniff, ethereal, ...). Dieses kann bereits im eigenen LAN geschehen. Jedoch kann auch jede Maschine auf dem Weg der Datenpakete diese mitlesen. Beides läßt sich in den seltensten Fällen feststellen. Selbst wenn Pakete auf ihrer Reise verändert werden, kann man dies nicht einfach feststellen, da die Prüfsummen von IP- und TCP-Header natürlich auch vom Fälscher korrekt eingetragen werden. Genausowenig läßt sich feststellen, ob der Absender wirklich der erwartete Kommunikationspartner ist oder ob sich der Man-in-the-Middle eingeschaltet hat. Viele Benutzer werden sicherlich sagen, dass andere mit ihren Daten nichts anfangen können und dass sie nicht relevant sind. Trotzdem möchte man sicherlich nicht, dass jemand seine Mailbox bei einem Webmailer ausräumt oder Mails unter dem eigenen Namen verschickt. Wenn vielleicht mit einer einfachen Mailadresse noch keine kostenpflichtigen Dienste aufgerufen werden können, so lassen sich doch Mails mit sehr üblen Inhalten ver253 254 KAPITEL 18. SICHERES IP Abbildung 18.1: Snapshot einer Ethereal-Analyse fassen, die den oder die AccountinhaberIn in Schwierigkeiten bringen können. Oder aber jemand verwendet mitgehörte Ebay-Daten dazu, Gebote auf eigene Artikel zu platzieren. Das folgende Listing zeigt einen Ausschnitt einer Google-Sitzung; viele Informationen kann man sofort und ohne großen Aufwand direkt entnehmen. 0040 0050 0060 0070 0080 0090 00a0 00b0 00c0 00d0 00e0 00f0 0100 0110 0120 0130 0140 0150 0160 0170 29 77 69 38 3d 2d 35 20 6e 74 2e 78 2c 67 74 69 74 65 75 3d 0d 69 6e 35 20 41 2e 4b 75 74 64 74 20 65 2d 70 79 74 74 30 b5 47 65 2b 39 48 67 30 6f 78 70 65 2f 69 2f 45 2c 0d 3a 66 2e 48 45 2b 6e 2d 54 65 20 6e 29 3a 2f 2a 6d 2a 6e 20 0a 20 2d 35 00 54 68 65 31 54 6e 28 71 0d 2f 0d 2c 61 2c 63 67 41 69 38 0d 00 20 61 74 26 50 74 63 75 0a 2f 0a 20 67 20 6f 7a 63 73 3b 0a 01 2f 63 7a 68 2f 3a 6f 65 52 77 41 69 65 2a 64 69 63 6f 71 41 01 73 6b 26 6c 31 20 6d 72 65 77 63 6d 2f 2f 69 70 65 2d 3d 63 08 65 65 69 3d 2e 4d 70 6f 66 77 63 61 70 2a 6e 2c 70 38 30 63 0a 61 2b 65 64 31 6f 61 72 65 2e 65 67 6e 0d 67 20 74 38 2e 65 11 72 69 3d 65 0d 7a 74 2f 72 67 70 65 67 0a 3a 69 2d 35 35 70 df 63 63 49 26 0a 69 69 33 65 6f 74 2f 2c 41 20 64 43 39 2c 74 06 68 68 53 6d 55 6c 62 3b 72 6f 3a 6a 20 63 78 65 68 2d 20 2d 9c 3f 2b 4f 65 73 6c 6c 20 3a 67 20 70 69 63 2d 6e 61 31 2a 4c 42 71 6d 2d 74 65 61 65 4c 20 6c 74 65 6d 65 67 74 72 2c 3b 61 97 3d 65 38 61 72 2f 3b 69 68 65 65 67 61 70 7a 69 73 20 71 6e -@5H.... ..._..B. ).GET /search?q= wie+hacke+ich+me in+netz&ie=ISO-8 859-1&hl=de&meta = HTTP/1.1..User -Agent:Mozilla/ 5.0 (compatible; Konqueror/3; Li nux)..Referer: h ttp://www.google .de/..Accept: te xt/*, image/jpeg , image/ png,ima ge/*, */*..Accep t-Encodi ng:x-gz ip, gzip ,identi ty..Accept-Chars et: iso-8859-1, utf-8;q= 0.5,*;q =0.5..Accept-Lan 18.1. SICHERHEITSPROBLEME DES DERZEITIGEN IP-STANDARDS 0180 0190 01a0 01b0 01c0 01d0 01e0 01f0 67 20 43 35 3a 37 37 38 75 77 6f 66 4c 31 30 53 61 77 6f 35 44 37 3a 59 67 77 6b 31 3d 30 53 7a 65 2e 69 34 64 3a 3d 51 3a 67 65 38 65 4c 35 0d 20 6f 3a 31 3a 4d 49 0a 65 6f 20 33 54 3d 4b 0d 6e 67 50 30 4d 31 57 0a 0d 6c 52 35 3d 30 55 0a 65 45 35 31 33 36 48 2e 46 64 30 38 38 6f 64 3d 62 33 38 68 73 65 49 62 38 32 50 74 0d 44 38 38 37 58 3a 0a 3d 32 32 31 73 255 guage: en..Host: www.google.de.. Cookie:PREF=ID= 5f514813055dbb82 :LD=de:TM=103882 7170:LM=10388271 70:S=5IKWU68hPXs Darüberhinaus gelingt es leicht, Pakete zu modifizieren. So kann die Absende- oder Empfangsadresse eines Datenpaketes umgeschrieben werden. Dies geschieht gewollt z.B. bereits beim Passieren einer Firewall mit Network Address Translation (NAT), oder durch sogenannte Bouncer und Redirecter. Die Modifikation des Absenders kann auch aus weniger ehrenhaften Gründen, wie DoS-Attacken erfolgen. Weiterhin gibt einem die Tatsache, dass bei vielen klassischen Protokollen (wie Telnet, Pop3, Imap4, ftp, http) Passwörter im Klartext übertragen werden und damit sehr einfach abzufischen sind, kein gutes Gefühl. Der Inhalt der Pakete ist auch vor Fälschungen nicht sicher. Zwar bildet der IP-Stack Prüfsummen über den Header und den Paketinhalt1 , jedoch sind die Routinen einfach auf veränderte Pakete anwendbar. Die Verteilung des IP-Adressraumes liefert vielerlei Anhaltspunkte in Bezug auf die Lage bestimmter Maschinen und Netzwerkstrukturen. Ein genaues Wissen über solche Strukturen erleichtert das Eindringen in Netze. So wird vielleicht das Zielsystem nicht direkt angegriffen, sondern mittelbar über weitere Rechner, die ”näher an dieser Maschine liegen”, korrumpiert. 18.1.3 Absicherung - Lösungsansätze Die geschilderten Probleme erzwangen Lösungen, ohne die sichere private und geschäftliche Kommunikation nicht denkbar wäre. Dabei gibt es eine Reihe verschiedener Ansätze, die an unterschiedlichen Stellen des Protokollstacks implementiert sind. Von der Implementierung hängt dann jedoch ab, welche Daten und Protokolle sich mit diesen sicheren Verbindungen abwickeln lassen und welche Stufe von Sicherheit erreicht wird. Die Komplexität der einzelnen Lösungen variiert: Einige Konzepte kann man bereits mit normalen Userprivilegien ausführen, die anderen erfordern zusätzliche Kernelmodifikationen und Root-Rechte. Netzwerk-Level Pakete, die zwischen Rechnern auf dem Netzwerk transportiert werden, sind verschlüsselt. Die Verschlüsselung erfolgt in der Nähe des Netzwerktreibers, wo die Daten auf die Reise geschickt werden. Der Vorteil dieses Verfahrens liegt darin, dass es transparent arbeitet. Änderungen oder Zusätze zu den einzlenen Netzwerkapplikationen sind unnötig. In dem Augenblick wo IP-Pakete verschlüsselt werden, kann diese Funktion in Router eingebaut werden. Diese werden üblicherweise sowieso als ”BlackBoxes” betrachtet, da sie den Verkehr zwischen Hosts transparent weiterleiten und selbst nicht für den normalen Anwender sichtbar werden. So sieht ein Verschlüsselungsrouter für den Endanwender wie ein nichtverschlüsselnder Router aus. Ein Beispiel hierfür ist z.B. die SonicWall Pro. Dieser Ansatz lohnt sich besonders dann, wenn eine Verschlüsselung auf Applikationsebene nicht möglich oder äußerst aufwändig scheint und sehr viele verschiedene Anwendungen sicher kommunizieren sollen. Beispiele für diesen Ansatz sind Microsofts ”Microsoft Point-to-Point 1 IP merkt sich die Paketgesamtlänge und eine Headerprüfsumme, TCP die Headerlänge und eine Datenprüfsumme 256 KAPITEL 18. SICHERES IP Tunnel Protocol” (PPTP), die Crypto IP Encapsulation (CIPE), OpenVPN und IPsec. Die beiden letzteren Ansätze werden als freie Software im Sinne der GPL entwickelt. Für das Microsoft-Protokoll existiert ein Linux-Client, um Verbindung mit entsprechenden Microsoftsystemen aufnehmen zu können. Den Client, die Dokumentation und Installationsanleitungen findet man bei den nachstehenden Literaturhinweisen. Inzwischen sind etliche Anmerkungen zu diesem Protokoll veröffentlicht, die einige Schwächen des Konzeptes aufzeigen. Trotzdem sollte es der Vollständigkeit halber genannt werden, da es noch an vielen Stellen zum Einsatz kommt. Da es an der Transport- und Sicherungsschicht ansetzt, sind verschiedene höhere Protokolle, also nicht nur IP-Pakete darüber zu tunneln. So können auch IPX und NetBIOSPakete verschickt werden. Der Einrichtungsaufwand für dieses Protokoll muss wegen einiger Kernel- und Systemanpassungen als recht hoch eingeschätzt werden. Es gibt verschiedene Versionen und widersprüchliche Anleitungen im Netz, so dass je nach eingesetztem System mit Problemen gerechnet werden muss. Wenn möglich sollte der Einrichtungsaufwand lieber auf eine aus Sicht des Autors bessere Technologie, wie CIPE oder IPsec verwandt werden. Jedoch haben alle Low-level-Verschlüsselungen den gemeinsamen Nachteil, dass sie keinen Schutz gegen Einbrüche und Attacken auf höheren Protokollebenen bieten. Trojaner per Email oder durch eine Webanwendung, Exploits auf der Betriebssystemebene sind auf diese Weise nicht zu unterbinden. Sie erfordern spezielle Maßnahmen, wie die PGP-Verschlüsselung und Signierung von Emails oder Zertifikate für Webinhalte und Programme. Socket-Level Für eine ganze Reihe von Anwendungen sind sichere Protokolle entwickelt worden. So wird der chronisch unsichere Telnet-, Remote-Login bzw. Remote-Copy-Dienst zur Anmeldung an entfernten Maschinen durch die Secure Shell (SSH) ersetzt. Sie arbeitet auf TCP-Ebene, verschlüsselt aber den Inhalt von Paketen. So können die übertragenen Passwörter und Daten nicht von Dritten mitgehört und modifiziert werden. Mittels SSH lassen sich einfache TCP-Tunnel realisieren, dieses wird in [lmssh] beschrieben. Für webbasierte Kommunikation wurde der Secure Socket Layer eingeführt, der es ermöglicht die HTTP-Kommunikation zwischen Server und Webbrowser zu verschlüsseln. Diese Verbindung arbeitet auf der logischen Verbindungsebene der kommunizierenden Programme. In beiden geschilderten Fällen wird zwar verhindert, dass die Pakete mitgelesen und modifiziert werden können, jedoch bleibt dem Aussenstehenden die - der Kommunikation zugrundeliegende - Netzstruktur nicht verborgen. Der Aufwand der Konfiguration hält sich sowohl für SSH, als auch für SSL in Maßen. Es werden keine Kernelmodule benötigt und die Verschlüsselung kann vom normalen Benutzer ohne spezielle Rechte durch den Aufruf bzw. die entsprechende Konfiguration der Applikation erfolgen. Applikationsebene In jede Applikation kann eine Verschlüsselung eingebaut werden, welche die Daten - bevor sie in die Transportschicht gelangen - geeignet einpackt. Ein Beispiel sind Emailprogramme: Emails werden standardmäßig unverschlüsselt übertragen. Dabei könnte prinzipiell jeder Administrator eines Servers, der von der Mail durchlaufen wird, die Mail lesen. Natürlich wäre auch ein Geheimdienst oder Wirtschaftsspion in der Lage die Leitungen anzuzapfen und könnte jede Mail mitlesen. Um dieses zu verhindern wird den Mailprogrammen ein Plugin hinzugeführt, bzw. die Fähigkeit Emails vor dem Versenden zu verschlüsseln und auf der Empfängerseite zu entschlüsseln. Viele Mailprogramme haben Verschlüsselungsmöglichkeiten bereits eingebaut. Spezielle Verschlüsselungsprogramme wie Pretty Good Privacy (PGP) stehen zum Download bereit. Installations- und Gebrauchsanweisungen sind allenthalben zu finden. Die Installationsroutinen und Bedienoberflächen sind ausgereift; sie können auch ohne tiefgreifende technische 18.2. VPNS - SICHERE NETZE ÜBER DAS INTERNET 257 Vorkenntnisse genutzt werden. 18.2 VPNs - Sichere Netze über das Internet Ein VPN ”Virtual Private Network2 ” verbindet entweder zwei Netzwerke oder einen Computer mit einem Netzwerk oder zwei Computer - und das jeweils auch über öffentliche, unsichere Verbindungen (z.B. das Internet). Der Ausdruck ”privat” bedeutet, dass die Verbindung zwischen zwei Rechnern genauso gut gesichert ist, als wenn sie zusammen in einem lokalen Netzwerk kommunizieren würden. Obwohl die Rechner räumlich durch das öffentliche Netz getrennt sind, hat man durch das Tunneling-Verfahren eine Situation geschaffen, welche die Rechner ”virtuell” wie Mitglieder des lokalen Netzwerkes erscheinen läßt. Öffentliches unsicheres IP-Netzwerk 202.38.21.24 lisa.dyndns.org Right Subnet 62.137.15.134 rainer.dyndns.org 192.168.4.0/24 192.168.2.0/24 Left Subnet Internet 192.168.2.254 192.168.4.254 Abbildung 18.2: Eine typische VPN-Situation Folgende Ziele sollen durch VPN’s erreicht werden: • erweitertes Routing - IP-Netze können von dritten unsichtbar über öffentliche Netze getunnelt werden. Dadurch läßt sich die zugrundeliegende Netzwerkstruktur verdecken und die Identität der kommunizierenden Rechner verbergen. • Sicherstellung der Absenderauthenzität • Verschlüsselung des Inhaltes unabhängig von der Paketart • Vereinfachung des netzwerkinternen Routings. Räumlich und infrastrukturell weit auseinanderliegende Teile einer Organisation erscheinen auf der logischen Netzwerkebene nahe beieinander 18.3 CIPE 18.3.1 Idee Einen einfachen und dynamischen Ansatz für Verschlüsselungstunnel bietet die Crypto IP Encapsulation. Dieses Protokoll ist so angelegt, dass IP-Pakete in verschlüsselten UDPPaketen übertragen werden. Der Vorteil UDP als Transportprotokoll zu verwenden, liegt 2 zu deutsch: Virtuelles Privates Netzwerk 258 KAPITEL 18. SICHERES IP in der leichten Unterscheidbarkeit verschiedener Endpunkte. Bei einer einfachen IP-zu-IPKapselung ist man auf die eigene eingetragene IP-Adresse beschränkt und kann schwer mehrere Tunnel voneinander unterscheiden. Weiterhin wird der Transport über dynamische Adressen, Network Address Translation und SOCKS Proxies ermöglicht, die keine spezielle Anpassung für CIPE benötigen. CIPE kann damit komplett auf der bestehenden IP-Infrastruktur aufsetzen, ist allerdings nicht kompatibel zu den in RFCs publizierten Prinzipen von IPsec. Es existieren Implementationen für Linux und Windows. Die Linuximplementation erfordert ein spezielles Kernelmodul, das jedoch bei den meisten Distributionen mit CIPE bereits mitgeliefert wird. Das Kernelmodul regelt das Senden und Empfangen der IP-Pakete. Es definiert ein Netzwerkdevice cipcb*, z.B. ifconfig cipcb0 cipcb0 Link encap:IPIP Tunnel HWaddr inet addr:192.168.2.254 P-t-P:192.168.4.254 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MTU:1442 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (70.6 Mb) TX bytes:0 (813.0 Mb) oder mittels des IP-Route2-Tools ip: ip addr show dev cipcb0 9: cipcb0: <POINTOPOINT,NOARP,UP> mtu 1442 qdisc pfifo_fast qlen 100 link/ipip 00:00:5e:b2:00:43 peer 00:00:00:00:00:00 inet 192.168.2.2 peer 192.168.2.1/32 scope global cipcb0 Definierte CIPE-Interfaces tauchen als Hostrouten in der Kernelroutingtabelle auf. Die Devices können analog zu anderen Netzwerkdevices angesprochen und benutzt werden, z.B. um weitere Routen darüber mittels /etc/cipe/ip-up einzutragen oder Firewall-Regeln darauf anzuwenden. Im Namen des Netzwerkinterfaces wird der Verschlüsselungsalgorithmus (im Beispiel ”b” für blowfish) kodiert, der zum Zeitpunkt der Übersetzung von CIPE angegeben werden kann. Im ”user space” läuft der Hintergrunddienst ciped. Dieser kann mit dem pppd verglichen werden. Er regelt das Aufsetzen und Schliessen des Netzwerkinterfaces anhand der in den entsprechenden Konfigurationsdateien vorhandenen Einstellungen. Verschlüsselungsrouter auf Basis von CIPE weisen eine herausragende Leistung auf, mit Datentransferraten, die nur zwei bis drei Prozent unter denen des unverschlüsselten Verkehrs liegen. Ein Teil der Performanz von CIPE kommt durch die Verwendung von UDP als Transport Protokoll. Es vermeidet verschiedene Formen subtiler Interaktionen, die durch mehrere TCP-Layer entstehen können. Diese Beeinflussungen tragen dazu bei, dass die Leistung von MPPE/PPTP 15 % bis 20 % unter der reinen Verbindungsgeschwindigkeit liegen. CIPE Tunnel sind sehr robust. Sie können durchaus mehrere Wochen laufen, ohne wieder neu aufgebaut werden zu müssen (wenn sich die IP-Daten der Verbindung nicht ändern). 18.3. CIPE 18.3.2 259 Aufsetzen von CIPE Meistens wird CIPE mit der jeweiligen Linuxdistribution mitgeliefert. Dann wird üblicherweise ein Startskript und das Konfigurationsverzeichnis /etc/cipe angelegt. Das Kernelmodul cipcb.o wird entweder automatisch mit dem Start des CIPE-Daemons geladen oder kann per insmod cipcb eingefügt werden. Für jeden CIPE-Tunnel wird eine eigene Konfigurationsdatei angelegt. Bei SuSE wird dem Dateinamen ”option” die Bezeichnung der Verbindung nach einem Punkt angehängt, so dass alle Verbindungen mit dem Init-Skript gestartet werden, die mit ”option.*” beginnen. Für das Beispiel-VPN im Bild würden die Konfiguratinsdateien für beide Tunnelendpunkte wie folgt aussehen: # option.example-vpn right side # # the peer’s IP address ptpaddr 192.168.4.254 # our CIPE device’s IP address ipaddr 192.168.2.254 # my UDP address. Note: if you set port 0 here, the system will pick # one and tell it to you via the ip-up script. Same holds for IP 0.0.0.0. me 62.137.15.134:10000 # ...and the UDP address we connect to. Of course no wildcards here. peer 202.38.21.24:10001 # The static key. Keep this file secret! # The key is 128 bits in hexadecimal notation. key 0219e5bfcae114c9203e2e26f048e21d Sowie für die Gegenstelle: # option.example-vpn left side # # the peer’s IP address ptpaddr 192.168.2.254 # our CIPE device’s IP address ipaddr 192.168.4.254 # my UDP address. Note: if you set port 0 here, the system will pick # one and tell it to you via the ip-up script. Same holds for IP 0.0.0.0. me 202.38.21.24:10001 # ...and the UDP address we connect to. Of course no wildcards here. peer 62.137.15.134:10000 # The static key. Keep this file secret! # The key is 128 bits in hexadecimal notation. key 0219e5bfcae114c9203e2e26f048e21d In diesem Beispiel wird davon ausgegangen, dass die routebaren Internet-Adressen 62.137.15.134 und 202.38.21.24 statisch sind. Eine solche Situation betrifft Firmen, die mit festen IP-Nummern ans Netz angebunden sind. Für den Privatanwender mit der InternetEinwahl und dynamischer IP-Vergabe kann man eine Seite so konfigurieren, dass sie in Abhängigkeit von der eingehenden Verbindung die Gegenstelle erkennt: # option.example-vpn right side 260 KAPITEL 18. SICHERES IP # [ ... ] me 134.34.80.5:10001 peer 127.0.0.1:9 maxerr -1 Hierin besteht der Trick, dass als Gegenstelle einfach die Maschine selbst mit dem DiscardPort angegeben wird, der alle eintreffenden Pakete verwirft. Damit der ciped nicht abbricht, wird die Zahl der erlaubten Fehlversuche mit ”-1” auf unendlich gesetzt. Die Gegenstelle, d.h. der Rechner mit der dynamischen IP-Adresse erhält folgende Einstellungen: # option.example-vpn left side # [ ... ] me 0.0.0.0:10000 peer 134.34.80.5:10001 dynip Nur dieser Rechner kann eine Verbindung initiieren. Wenn zwei Maschinen mit dynamischer IP miteinander kommunizieren, kann auch der DNS-Name statt einer festen IP eingetragen werden. Probleme könnten jedoch auftreten, wenn sich die IP-Nummer ändert. Mit CIPE 1.5 ist die Möglichkeit hinzugekommen, Schlüssel über ein Public-Key-Verfahren analog zu SSH auszutauschen. Dieser Prozess wird mittels des Zusatzprogrammes pkcipe abgewickelt. Einfacher und weniger fehleranfällig, sowie unter Sicherheitsaspekten meistens ausreichend, ist es in den Konfigurationen einen gemeinsamen Schlüssel von 128 bit Länge zu verwenden. Diesen kann man z.B. mittels echo ”this is my keyphrase”—md5sum generieren und an die beiden Tunnelenden kopieren. Dieser Schlüssel dient zur Generierung des häufiger gewechselten dynamischen Schlüssels mit dem die Daten tatsächlich gecryptet werden. Die realen routebaren Adressen und die virtuellen Tunneladressen müssen sich in jedem Fall unterscheiden. Zusätzlich definierte Routen und Firewallregeln sollten nur mittels ipup Skript eingetragen und mittels ip-down abgebaut werden. Wenn Firewalls eingesetzt werden, sollte daran gedacht werden, dass die für CIPE benutzten Ports freigegeben sind. pkcipe benutzt andere als die Tunnelportnummern und muss gesondert betrachtet werden. Die Einschränkung, dass sich mittels CIPE ausschliesslich 2er Tunnel aufbauen lassen, führt zur Beschäftigung mit IPsec. 18.4 IPsec-Theorie IPsec ist ein Versuch, sämtlichen3 Internet-Verkehr automatisch zu verschlüsseln. Damit dies ohne Veränderung der bestehenden Anwendungen geschehen kann, wird die Verschlüsselung und Authentifizierung auf IP-Ebene, also unterhalb von TCP, UDP und anderer Protokolle durchgeführt. IPSec wird als Internet Standard entwickelt. Es kann in zwei verschiedenen Betriebsarten eingesetzt werden: Im Tunnelmode werden die Pakete - wie bei anderen Tunnelingverfahren auch - komplett mit IP-Header verschickt. So lassen sich vollständig virtuelle Netze schaffen, die unabhängig von der darunterliegenden Infrastruktur kommunizieren können. Im 3 oder zumindest einen großen Teil des 18.4. IPSEC-THEORIE 261 Authentication Header IP Header Next Header Data (variable) Payload Length RESERVED Security Parameters Index (SPI) Sequence Number Field Authentication Data (variable) 32 bit Abbildung 18.3: Aufbau und Einsatz im IP eines Authentication-Header Transportmode - dem einfacheren Verfahren - werden nur die Daten der Transportschicht beachtet. Bei beiden Typen werden die Daten verschlüsselt und es wird jeweils gegenüber der anderen Maschine bzw. dem Tunnelendpunkt authentifiziert. Original IP Header IP-Datagramm Data (variable) Getunneltes Neuer IP Header IP Header IP-Datagramm Data (variable) Datagramm mit Auth-Header im Tunnelmodus Neuer IP Header Auth. Header IP Header Data (variable) authentifiziert Abbildung 18.4: Einfügen des AH im Tunnelmodus Zur Realisierung der Paketintegrität sind dem Internet-Protokoll zwei weitere Headertypen (AH und ESP) in der Transportschicht hinzugefügt worden. Beide Header sind prinzipiell unabhängig von möglichen kryptographischen Verfahren, um Anpassungen an konkrete Einsatzgebiete und den Stand der Kryptografie zu erlauben. Mittels Authentication Header (AH) wird die Integrität der übertragenen Daten geschützt und die Authentizität sichergestellt. Selbst wenn die Daten nicht verschüsselt werden, erlaubt AH die Überprüfung der Daten. Dies erfolgt mittels Prüfsumme über den Datenblock durch SHA-1 oder MD5Verfahren. ESP steht für Encapsulated Security Payload und sorgt durch Verschlüsselung für: Die Vertraulichkeit der Daten, deren Integrität und die Authentifizierung der Datenquellen von IP. Der ESP-Header ist selbst nicht verschlüsselt, der ESP-Trailer teilweise. Der ESPHeader enthält: Sicherheitsparameterindex (SPI), den Verschlüsselungsalgorithmus, die Authentifizierung und den Modus. Im Trailer sind eine Seriennummer, eine Prüfsumme zur Sicherstellung der Datenintegrität und weitere SPI. 262 KAPITEL 18. SICHERES IP Security Parameters Index (SPI) Sequence Number Field Payload Data (variable) Padding Pad Length Padding (0-255 byte) Next Header e n c r y p t e d a u t h e n t i c a t e d Authentication Data (variable) 32 bit Abbildung 18.5: Aufbau eines ESP Paketes Original IP Header IP-Datagramm Data (variable) Getunneltes IP-Datagramm Neuer IP Header IP Header Data (variable) Datagramm mit ESP im Tunnelmodus Neuer IP Header ESP Header IP Header Data (variable) ESP Trail ESP Auth verschlüsselt authentifiziert Abbildung 18.6: Einsatz des ESP im IP-Datagramm Ergänzt werden die beiden Header-Typen durch das Internet Security Association and Key Management Protocol (ISAKMP). Dieses wird dazu verwendet, eine Security Association zwischen den beteiligten Kommunikationspartnern zu etablieren und Schlüssel auszutauschen. Es definiert hierzu Formate und Methoden zur Generierung, Modifikation und Entsorgung von SAs. Unter dem Internet Key Exchange (IKE) versteht man ein konkretes Schlüsselaustauschverfahren, welches speziell auf die Benutzung mit ISAKMP abgestimmt ist. IPSec wird sich vermutlich auf Dauer durchsetzen. Durch seine Aufnahme als Internetstandard besteht die Hoffnung, dass sich VPN’s einem gemeinsamen Standard annähern und später produktübergreifend interoperabel werden. Unter Linux erweitert das FreeSWANProjekt [fs] den Linux-IP-Stack um die Fähigkeiten von IPsec. Es gibt Lösungen für Windows2000 und XP, sowie einige proprietäre kommerzielle Produkte, wie die SonicWall Pro. Zur Zeit funktioniert die Zusammenarbeit zwischen verschiedenen Security-Gateways und -Lösungen jedoch nur eingeschränkt. Als Beispiel wird die erfolgreiche Zusammenarbeit von Linux/FreeSWAN mit der SonicWall Pro genannt. Jedoch funktionieren hier nicht alle vom Standard vorgeschlagenen Features. 18.5 IPsec praktisch - FreeSWAN Die Konfigurationsmöglichkeiten und Fähigkeiten von IPsec übersteigen die von anderen Sicherheitslösungen erheblich. Das impliziert jedoch eine Modifikation des Kernels. Aufgrund sehr komfortabler Skripte gelingen die notwendigen Anpassungen auch weniger erfahrenen 18.5. IPSEC PRAKTISCH - FREESWAN 263 Kernelbauer. Vielen Linuxdistributionen liegt inzwischen die FreeSWAM IPsec-Suite bei. Die FreeSWAN IPSec Authentifizierung und Verschlüsselung kann entweder SSL oder RSA (public/private Schlüsselpaare) oder statische PSK (Pre-Shared Keys) verwenden. IPSec Verschlüsselungstunnel gibt es in verschiedenen Formen, die drei üblichsten sind: Netz-Netz, Netz-Host, Host-Host. 18.5.1 Konfigurationsmöglichkeiten von IPsec Verschlüsselter Internet-Verkehr zwischen Rechnern oder ganzen Netzen kann auf vielerlei Arten genutzt werden. Hier sollen einige Beispiele für den Einsatz von IPsec im täglichen Leben gezeigt werden. • Point-to-Point Verschlüsselung zwischen zwei einzelnen Maschinen - Die einfachste Art eine IPsec Verschlüsselung zu nutzen besteht darin, den kompletten IP-Verkehr zwischen zwei Maschinen zu verschlüsseln: die Point-to-Point Verschlüsselung. Hierbei werden in der Konfiguration keine Netze hinter den vermeindlichen Gateways angegeben. Der Aufwand ist hierbei gering und es wird so auf einfache Weise eine sichere Verbindung für alle Applikationen aufgebaut. • Von der WG in die Firma - Bei dieser IPsec Anwendung handelt es sich um eine Netzzu-Netz Konfiguration. Als Beispiel soll hier die heimische WG (alternativ: das Netz im Einfamilienhaus mit Vater, Mutter und Kindern) auf das Firmeninternet Netzwerk des Arbeitgebers zugreifen. Das WG-Netz ist dabei z.B. über einen Linux-Router (”meinewg.dyndns.org”) und DSL an das Internet angeschlossen. Hinter diesem Router befindet sich das private Netz der WG (172.16.1.0/255.255.255.0). Die Firma ist über eine Firewall, die idealerweise über eine IPsec Implementation verfügt4 , mit dem Internet verbunden (gateway.firma.de). (siehe Abbildung: VPN1.eps) Nachdem die Konfiguration (siehe unten) vorgenommen wurde, kann man aus dem einen privaten Netz problemlos auf das andere zugreifen. Die beiden router (meinewg.dyndns.org) und (gateway.firma.de) übertragen die entsprechenden Pakete über den aufgebauten IPsec Tunnel, was für die Benutzer völlig transparent geschieht. • “Direktes Erscheinen lassen der Maschine im Firmennetz” - damit ist in diesem Zusammenhang gemeint, dass ein weit entfernter Rechner über IPsec sozusagen in das Firmennetzwerk integriert wird. Dabei erhält der Rechner eine IP aus dem Pool der Firma und ist nicht über seine aktuelle (evt. dynamisch vergebene) IP eines Providers zu erreichen. Der Vorteil einer solchen Installation besteht darin, dass in IP-Netzen die Zugriffe auf Resourcen am einfachsten und effektivsten durch IP-Beschränkungen verwirklicht werden. So ist es beispielsweise möglich - beim Zugriff auf Fileserver, Datenbankserver oder Arbeitsgruppen - den Zugriff auf das interne Netz einzuschränken, also mögliche externe IPs zu berücksichtigen. • Road-Warrior - Die ”Road-Warrior” Konfiguration ist das Paradebeispiel für den reisenden Handels-/Versicherungsvertreter mit dem Notebook unterm Arm. Bei diesem Setup handelt es sich um eine Rechner-Netz Situation, in der der IPsec-Tunnel dafür sorgt, dass der Road-Warrior sich über eine öffentliche Leitung ins Internet einwählen und auf das interne Netz seiner Firma zugreifen kann. Somit entfällt die Notwendigkeit einer Einwahlanlage in der Firma, falls der Vertreter während seiner Reisen auf 4 wie z.B. die SonicWall Pro oder der klassichen Linux-Router 264 KAPITEL 18. SICHERES IP Firmenrechner zugreifen muß. Ein angenehmer Nebeneffekt ist dabei natürlich auch, dass potentiell vertrauliche Daten nicht unverschlüsselt durch die Leitungen geschickt werden müssen. 18.5.2 Einrichtung von IPsec unter Linux FreeSwan implementiert IPsec unter Linux. Zum Gesamtpaket zählen das Kernelmodul ipsec.o, die Konfigurationsdatei /etc/ipsec.conf, sowie das Userspace-Programm ipsec. Diese sollten gemeinsam mit der jeweiligen Linux-Distribution installiert sein. Wenn diese nicht beiliegen oder seitens des Distributors beigelegt werden oder die jeweils aktuellste Version verwendet werden soll, empfielt sich das Selbstkompilieren. Hierzu lädt man die Sourcen von der FreeSWAN-Website (siehe [frsw]) herunter und entpackt diese. Vorher sollten jedoch die Kernelsources zum verwendeten Kernel vorbereitet werden. Einrichten des Kernels Beispielhaft soll hier die Installation und Übersetzung der Quellen von FreeSWAN auf einem Rechner mit RedHat Linux 8.0 beschrieben werden, wofür root-Rechte erforderlich sind. Auf SuSE-Systemem kann man sich die Mühe sparen, da eine fertig übersetze FreeSWAN Version in der Distribution enthalten ist. Man hat die Möglichkeit entweder die FreeSWAN-Quellen, oder schon kompilierte RedHat Binaries5 zu benutzen. Das RPM-Paket, das man hier findet, beinhaltet allerdings nur die Userspace Programme - das Kernelmodul muß man trotzdem selber übersetzen. Das von uns benutzte Testsystem läuft unter RedHat 8.0, wobei die als ”Server” bezeichnete Installation gewählt wurde. Zusätzlich zu den vorgegebenen Angaben bei der Paketauswahl wurden aus der Gruppe ”Development”, die ”Development Tools” sowie ”Kernel development” installiert. Bau des Kernels Werden das Kernelmodul und die Programme des Userspace von der gewählten Distribution nicht mitgeliefert, so muss die Software aus den Sourcen gebaut werden. Besitzer der aktuellen SuSE-Distributionen haben es da leichter, auch wenn nicht immer das aktuellste FreeSWAN mitgeliefert wird. Der Start der Installation von FreeSWAN beginnt mit dem Download der aktuellen Quellen in unserem Fall 1.99 vom FreeSWAN-FTP-Server: ftp://ftp.xs4all.nl/pub/crypto/freeswan Danach folgt das Entpacken des Pakets mit ”tar xvzf freeswan-1.99.tar.gz”, was einem als nächstes die Möglichkeit eröffnet, einen Blick in die Datei ”INSTALL” zu werfen (das sei übrigens jedem empfohlen !). Hierbei fällt bald auf, dass der Makefile vier Möglichkeiten bereithält, wobei in jedem Fall zuerst automatisch mit Hilfe des Pakets ”patch” die Veränderungen im Baum der Kernelquellen vorgenommen werden: • make menugo - Wer diesen Weg wählt, hat alle Möglichkeiten, die man auch mit dem klassischen make menuconfig hat. Falls die Kernel bisher noch nicht konfiguriert wurde (falls z.B. die Quellen gerade erst entpackt wurden), bietet sich der Weg über make menugo an. • make xgo - Das gleiche wie ”menugo” nur dieses mal im graphischen Modus unter X11. • make ogo - Für die Puristen unter den Lesern ist diese Möglichkeit besonders interessant, da sie dem guten alten make config entspricht. 5 ftp://ftp.xs4all.nl/pub/crypto/freeswan/binaries/RedHat-RPMs/2.4.18-24 18.5. IPSEC PRAKTISCH - FREESWAN 265 • make oldgo - ”oldgo” entspricht make oldconfig und übernimmt die aktuelle Kernelkonfiguration aus “.config” und wählt alle IPsec Optionen aus, wobei IPsec selber als Modul ipsec.o übersetzt wird. Befindet sich auf dem System schon ein fertig konfigurierter Kernel oder hat der Administrator keine Lust alles neu zu übersetzen, dann kann make menumod sehr hilfreich sein. Dieser Befehl bringt den Benutzer in die Kernelconfiguration mittels make menuconfig und kompiliert ausschließlich die Module des Kernels neu, was natürlich voraussetzt, dass in der Konfiguration IPsec als Modul ausgewählt wurde (so wie unten gezeigt). Nachdem der Kernel oder nur die Module kompiliert und installiert sind 6 , befinden sich die Userspace-Programme unter /usr/local/lib/ipsec und unter /usr/local/sbin. Die Konfigurationsdateien ipsec.conf und ipsec.secrets liegen im Verzeichnis /etc. 18.5.3 Einschaltbare Optionen Nach dem Patchen des Kernels stehen dem Anwender mehrere IPsec Optionen im Kernel zur Verfügung. Hier sei nur kurz auf deren Bedeutung eingegangen. Weitere Details sind dem entsprechenden RFC2402 [rfc] zu entnehmen. Übersicht nach make mengo im Bereich ”Networking options”: 01 02 03 04 05 06 07 08 09 10 <M> IP Security Protocol (FreeS/WAN IPSEC) --- IPSec options (FreeS/WAN) [*] IPSEC: IP-in-IP encapsulation (tunnel mode) [*] IPSEC: Authenticbation Header [*] HMAC-MD5 authentication algorithm [*] HMAC-SHA1 authentication algorithm [*] IPSEC: Encapsulating Security Payload [*] 3DES encryption algorithm [*] IPSEC: IP Compression [*] IPSEC Debugging Option In der Zeile ”1” wird IPsec als Kernelmodul für den aktuellen Kernel generiert. Es wäre auch möglich es fest einzubinden für sichere Kernels, die nicht mit ladbaren Modulen arbeiten sollen. Zeile ”3” aktiviert den Tunnelmodus, so dass mit IPsec nicht nur Punkt-zu-Punkt-Verbindungen verschlüsselt werden, sondern die Linuxmaschinen an den Tunnelenden als Verschlüsselungsgateway für ganze Netze arbeiten. In der Zeile ”5” wird die HMAC MD5 Authentifizierung eingeschaltet. Dieses ist notwendig, um eine Linuxmaschine via IPsec z.B. an eine SonicWall Pro anzubinden. Das RFC2104 sagt hierzu: “message authentication codes” (MAC): Mechanismen, um mit “secret keys” die Authentizität von Informationen zu überprüfen, die über ein unsicheres Medium übermittelt wurden. HMAC ist ein Mechanismus zur Authentifizierung von Nachrichten (ganz allgemein), der cryptogaphische “hash” Funktionen benutzt (“H”). Dabei kann z.B. MD5 oder SHA-1 in Kombination mit einem “secret shared key” zum Einsatz kommen, welches in Zeile “6” aktiviert wird. Zeile sieben fügt das Transportprotokoll ESP hinzu, welches zum Beginn des Abschnitts erklärt wurden. Die Verschlüsselung nach tripple-DES - ebenfalls wichtig für die Anbindung an eine SonicWall Pro- wird in Zeile “8” zur Verfügung gestellt. Zeile “9” erlaubt das Einschalten von Kompression im VPN; was vor allem Geschwindigkeitsvorteile bei der Übertragung normaler ungepackter Dateien, jedoch auch Overhead bei bereits komprimierten Daten mit 6 in /usr/src/linux/ rufe man make modules install auf 266 KAPITEL 18. SICHERES IP sich bringt. Kompression geht aber auf Kosten der CPU und muss bei der Kalkulation der Leistung der Verschlüsselungsgateways eingerechnet werden. “klipsdebug” option: Ohne diesen Schalter gibt es kein Debugging. Es ist nützlich, wenn alles funktioniert, aber von Nachteil, wenn eine Verbindung aus unbekannten Gründen nicht zustande kommt. Die Datei “INSTALL” hält dazu folgenden Ratschlag bereit: Turning “IPSEC Debugging Option” off may look attractive but is unwise. Diese Optionen schaltet man am besten komplett ein, damit sie später ohne Probleme genutzt werden können. Nicht alle Optionen werden z.B. gemeinsam mit der Sonic-Wall verwendet (kein IP Compression, kein HMAC-SHA1 authentication), so dass sie auch weggelassen werden können (wenn nur eine solche Anwendung erfolgt). Die INSTALL Datei warnt noch davor bei einem Kernel der Version 2.2.x die Option ”[*] IP: advanced router” unter ”Networking options” zu verwenden. Dieses kann entweder direkt beim der Konfiguration des Kernels geschehen oder nachträglich mit: echo′′ 0′′ >/proc/sys/net/ipv4/conf /all/rp filter geschehen. Bei der verwendeten RedHat Installation wurde eine entsprechende Warnung auch bei einem 2.4.18er Kernel ausgegeben ipsec_setup: Starting FreeS/WAN IPsec 1.99... ipsec_setup: Using /lib/modules/2.4.18-24.8.0custom/kernel/net/ipsec/ipsec.o ipsec_setup: WARNING: eth0 has route filtering turned on, KLIPS may not work ipsec_setup: (/proc/sys/net/ipv4/conf/eth0/rp_filter = ‘1’, should be 0) 18.5.4 Konfiguration von IPsec-Verbindungen Die zentrale Konfigurationsdatei ist ipsec.conf. Hier werden alle Verbindungsdaten für die einzelnen Verschlüsselungstunnel festgelegt. Aufbau der Konfigurationsdatei - Basiskonfiguration: # basic configuration config setup # THIS SETTING MUST BE CORRECT or almost nothing will work; # %defaultroute is okay for most simple cases. #interfaces=%defaultroute interfaces="ipsec0=eth1" # Debug-logging controls: "none" for (almost) none, "all" for lots. klipsdebug=none plutodebug=none # Use auto= parameters in conn descriptions to control startup actions. plutoload=%search plutostart=%search # Close down old connection when new one using same ID shows up. uniqueids=yes Basiskonfiguration für alle Verbindungen # defaults for subsequent connection descriptions # (mostly to fix internal defaults which, in retrospect, were badly chosen) conn %default keyingtries=0 disablearrivalcheck=no authby=rsasig 18.6. KOMMERZIELLE VPN-LÖSUNGEN # # 267 leftrsasigkey=%dns rightrsasigkey=%dns Einzelne Verbindungen, hier kann es viele Teile geben. conn freeswan auth=esp authby=secret pfs=yes # esp=3des-hamac-md5 esp=hmac-md5-96 # Left security gateway, subnet behind it, next hop toward right. left=172.16.0.1 leftid=172.16.0.1 #left=10.10.156.2 leftsubnet=10.10.156.0/22 # leftnexthop=10.10.156.1 18.6 Kommerzielle VPN-Lösungen 18.6.1 Cisco-VPN An vielen Universitäten und in vielen Firmen scheint sich die IPsec-Implementation von Cisco durchzusetzen. Deshalb soll der Linux-Client an dieser Stelle vorgestellt werden. Bei der Cisco-Lösung handelt es sich um eine zentrale Hardwarekomponente der Cisco VPN3000-Serie. Diese agiert als Verschlüsselungs- und Authentifizierungs- Gateway für Linux-, Windows- oder Macintosh-Clients. Die Clients sind in Software implementiert. Derzeitig ist die Softwareversion 3.7 aktuell, von der Benutzung älterer wird wegen einiger Sicherheitsprobleme abgeraten. Um den Client unter Linux nutzen zu können, muss dieser für den aktuellen Kernel kompiliert werden. Das klingt nach freier Software, die es nicht ist, da einfach nur ein Wrapper generiert wird, der den mitgelieferten Object-Code für den entsprechenden Kernel ladbar anpasst. In der Datei interceptor.c lassen sich einige Anpassungen vornehmen, was das Sperren von Devices nach dem Start des Clients anbetrifft. Um das Kernelmodul zu übersetzen, müssen die passenden Kernelsources installiert sein. Anschliessend entpackt man das TAR-Archiv des Clients und wechselt in das Verzeichnis. Mit dem Befehl ./vpn install wird die Installation und das Bauen des Moduls gestartet. Im dann erscheinenden Dialog wird man aufgefordert das Zielverzeichnis für die erzeugten ausführbaren Dateien (das betrifft die Programme vpnclient, cisco cert mgr, cvpnd und ipseclog) anzugeben und die Autostartoption - für das Laden des notwendigen Kernelmoduls - festzulegen. Weiterhin wird das Verzeichnis für die Kernelsources abgefragt. Überlichweise lassen sich die vorgeschlagenen Einstellungen direkt übernehmen. Am Ende des Installationsvorganges wird dringend dazu geraten die Zugriffsrechte für das /etc/CiscoSystemsVPNClient-Verzeichnis restriktiver zu handhaben. Hier liegen nicht nur die Konfigurationsdateien, sondern eventuelle Zertifikate und auf jeden Fall die Profile. Mit dem Befehl /etc/init.d/vpnclient init start kann der VPN-Client initialisiert werden. Es wird sodann das Kernelmodul geladen. Die Vershlüsselungsverbindung wird mittels des interaktiven Kommandozeilen-Tools (vpnclient connect) vpnprofile initiiert. “vpnprofile” verweist auf eines der unterhalb des Cisco-Konfigurationsverezichnisses 268 KAPITEL 18. SICHERES IP im Unterverzeichnis Profile abgelegten Benutzungsprofile. Trägt man in diese die Credentials zur Authentifizierung (Benutzername und Passwort) ein, kann die Verbindung auch automatisch im Hintergrund z.B. nach der DSL-Einwahl im Skript ip-up.local aufgebaut werden. Eine typische Profile-Datei (Im Beispiel bleibend vpnprofile.pcf), ist abgelegt im Verzeichnis: /etc/CiscoSystemsVPNClient/Profile und sieht wie folgt aus: [main] Description=VPN zu einem Cisco IPsec-Gateway Host=ipsec-gw.mydomain.org AuthType=1 GroupName=<Gruppenname> GroupPwd=<Gruppenpasswort> EnableISPConnect=0 ISPConnectType=0 ISPConnect= ISPCommand= Username=<Benuzername> UserPassword=<RAS-Passwort> SaveUserPassword=0 EnableBackup=0 BackupServer= EnableNat=0 CertStore=0 CertName= CertPath= CertSubjectName= CertSerialHash=00000000000000000000000000000000 DHGroup=2 ForceKeepAlives=0 Bei der Option Host muss der entsprechende Cisco-VPN-Server eingetragen werden. GroupName und GroupPwd erlauben die Unterscheidung von Benutzerkreisen, die auf ein Verschlüsselungsgateway zugreifen. Mit der Option Username wird der eigene Benutzname eingetragen. Zusätzlich kann man die Option UserPassword einfügen. Dort wird dann das entsprechende Passwort in Klartext abgelegt. Nach der ersten Verbindung wird dieses Passwort wieder gelöscht und durch ein Verschüsseltes ersetzt, das gleiche passiert beim Gruppenpasswort. Wenn der Cisco VPN-Client auf einem Rechner betrieben werden soll, der hinter einer Firewall liegt, muss dafür gesorgt sein, dass alle für die IPsec-Verbindung erforderlichen Datenpakete durchgelassen werden. Dazu zählen das Transportprotokoll ESP mit der Protokollnummer 50 und UDP-Pakete auf Port 500. Wenn das IPsec/UDP verwendet wird, muss der entsprechende UDP-Port (defaultmäßig 10000) freigeschaltet sein. Es gibt eine für alle Profile gemeinsam verwendete Konfigurationsdatei (vpnclient.ini), welche den Umfang der geschriebenen Log-Informationen und die Lage der ausführbaren Programme bestimmt. Leider ist die Implementation des Cisco-IPsec nicht besonders schön, so dass die IPsec Interfaces und entsprechende Routingeinträge nicht mit den üblichen Linux-Tools (ifconfig, 18.6. KOMMERZIELLE VPN-LÖSUNGEN 269 netstat) angezeigt werden. Diese Informationen erhält man mittels vpnclient stat oder bekommt sie bei interaktiver Benutzung auf der Kommandozeile ausgegeben. Der Statusbefehl liefert weitere Zusatzinformationen wie Angaben zur Verschlüsselung und andere verbindungsspezifische Daten zu bestehenden IPsec-Verbindungen. Genausowenig läßt sich der Datenverkehr sinnvoll mit ethereal oder tcpdump analysieren: In eine Richtung werden verschlüsselte, in die andere Richtung unverschlüsselte Datenpakete angezeigt. Das hängt wohl damit zusammen, dass sich das Kernelmodul sehr tief einklinkt, um bei Bedarf den Datenverkehr über weitere Interfaces zu unterbinden. Ein Vor- aber auch Nachteil des Cisco-Clients liegt in seiner zentralen Steuerung, die es erlaubt vom Benutzer in der vpnclient.ini getroffene Einstellungen zu überschreiben. Das Verbot eines LAN-Zugriffes und damit implizit das Aufsetzen eines Masquerading-Routers kann zentral vom Verschlüsselungsgateway erzwungen werden, in Abhängigkeit davon, wie der zuständige Administrator die Policies einstellt. Durch das Sperren weiterer Interfaces und den Zugriff auf das lokale Netz erreicht man eine höhere Sicherheit, jedoch kann dann z.B. schon kein lokaler Netzwerkdrucker mehr verwendet werden, wenn der Verschlüsseltungstunnel aktiv ist. Dieses mag zwar für spezielle Road-Warrior-Einsätze nicht von Bedeutung sein, kann aber in anderen Szenarien für gewaltigen Overhead sorgen, wenn alle Daten ausnahmslos über das Gateway geschleust werden. Im Extremfall verdoppelt sich der IP-Traffic im eigenen Netz. Ein weiteres Problem ergibt sich durch die möglichen Benennungen von Interfaces: In einigen Distributionen werden Funk-Karten mit “wlan0” bezeichnet, die dem Client nicht bekannt sind. Damit ist ein Aufbau einer Verschlüsselungsverbindung über diese Interfaces unmöglich. Abhilfe für beide Probleme schafft ein Blick in den Code. Ob die vorgeschlagenen Änderungen auch mit der Cisco-Lizenz vereinbar sind, muss der Anwender jeweils für sich klären. Jedoch kann durch einige Änderungen an der interceptor.c die o.g. Problematik umgangen werden wie das nachstehende Diff zeigt: *** ../test/vpnclient/interceptor.c 2002-10-22 05:47:21.000000000 +0200 --- interceptor.c 2003-03-04 13:39:42.000000000 +0100 *************** static int handle_vpnup() *** 315,320 **** --- 315,332 ---if (strcmp(LINUX_VPN_IFNAME, dp->name) == 0) { continue; } + + if ((strcmp("eth1", dp->name) == 0) || + (strcmp("eth2", dp->name) == 0) || + (strcmp("ppp0", dp->name) == 0) || + (strcmp("ppp1", dp->name) == 0) || + (strcmp("ipsec0", dp->name) == 0) || + (strcmp("ipsec1", dp->name) == 0) || + (strcmp("ipsec2", dp->name) == 0)) { + continue; + } + + if (strcmp("lo", dp->name) == 0) { /*bind to loopback so we can inject UDP packets *for IPC, but don’t change the xmit function 270 KAPITEL 18. SICHERES IP *************** static int recv_ip_packet_handler(struct *** 509,514 **** --- 521,540 ---struct ethhdr ppp_dummy_buf; + + + + + + + + + + + + + + if ((strcmp("eth1", dev->name) == 0) || (strcmp("eth2", dev->name) == 0) || (strcmp("ppp0", dev->name) == 0) || (strcmp("ppp1", dev->name) == 0) || (strcmp("ipsec0", dev->name) == 0) || (strcmp("ipsec1", dev->name) == 0) || (strcmp("ipsec2", dev->name) == 0)) { rc2 = original_ip_handler.orig_handler_func(skb, dev, type); goto exit_gracefully; } if (strcmp("lo", dev->name) == 0) { /* grab the routing entry for loopback packets, in case we need * to send some later*/ 18.6.2 Verwendung der Cisco-Tools vpnclient ist das Haupttool der Cisco-VPN-Lösung. Ohne Parameter aufgerufen, werden dem Benutzer gleich mal alle Kommandozeilenparameter mitgeteilt (ja, auch das Linux übliche “–help” funktioniert; schön, dass Cisco diesen Standard einhält). Der Client hat drei ”Haupt” Optionen: connect Hierbei ist es zwingend erforderlich als nächste Option ein Profil anzugeben, das sich als Datei unter /etc/CiscoSystemsVPNClient/Profiles befindet (in unserem Beispiel “goemobile”). Wer beim Start nicht nach seinem Benutzernamen und Passwort gefragt werden möchte, sollte nach dem Profil noch seinen Usernamen übergeben. Man kann auch noch das Passwort übergeben, was aber nicht zu empfehlen ist, da es auf einer Maschine mit mehreren Benutzern sehr leich ausspioniert werden kann: linux:/etc/CiscoSystemsVPNClient/Profiles # ps aux|grep vpnclient root 2004 0.0 1.0 1756 680 pts/1 S 18:49 0:00 /usr/local/bin/vpnclient connect goemobile user test@realm pwd <Passwort im KLARTEXT!> Normalerweise kann man Bentuzernamen und Passwort in der Profildatei speichen, was aber serverseitig (!) unterbunden werden kann. Wie sinnvoll das ist, bleibt dahingestellt wenn man die oben genannte Sicherheitslücke in Betracht zieht. Der Aufruf von vpnclient connect <PROFIL >user <USERNAME > führt letztendlich zu: Cisco Systems VPN Client Version 3.7 (Rel) Copyright (C) 1998-2002 Cisco Systems, Inc. All Rights Reserved. 18.6. KOMMERZIELLE VPN-LÖSUNGEN 271 Client Type(s): Linux Running on: Linux 2.4.19 #8 Sat Nov 9 12:20:38 PST 2002 i586 Initializing the IPSec link. Contacting the gateway at 10.100.0.1 Authenticating user. Your link is secure. IPSec tunnel information. Client address: 134.76.n.n Server address: 10.100.n.n Encryption: 168-bit 3-DES Authentication: HMAC-MD5 IP Compression: None NAT passthrough is inactive Local LAN Access is disabled Wie hier deutlich zu sehen ist, ist die zugewiesene Adresse eine öffentliche Adresse, während die Gateway Adresse, wie die Adresse der Funklankarte eine private ist. Der Cisco führt in diesem Beispiel also DirectNAT durch. In diesem Fall sieht man, dass ”local LAN” ausgeschaltet wurde. Das allerdings nicht anhand der Profildatei sondern von Seiten des Administrators auf dem Cisco3000. Aber was solls, interceptor.c macht einiges möglich ! Wenn man sich nun in einem Netz hinter einer Firewall befindet und das VPN-Gateway den Rechner selber direkt nicht erreicht kann, kommt “NAT passthrough” ins Spiel. Das Ergebnis sieht dann folgendermaßen aus: IPSec tunnel information. Client address: 134.76.n.n Server address: 134.76.n.n Encryption: 168-bit 3-DES Authentication: HMAC-MD5 IP Compression: None NAT passthrough is active on port UDP 10000 Local LAN Access is enabled disconnect Diese Option ist schnell erklärt: vpnclient disconnect beendet eine bestehende Verbindung. stat Was man im Hause Cisco “Statistik” zu nennen scheint, hat den Namen eigentlich nicht verdient: IPSec tunnel information. Connection Entry: goemobile Client address: 134.76.n.n Server address: 10.100.n.n Encryption: 168-bit 3-DES Authentication: HMAC-MD5 IP Compression: None NAT passthrough is inactive Local LAN Access is enabled 272 KAPITEL 18. SICHERES IP VPN traffic summary. Time connected: 0 day(s), 00:09.31 Bytes in: 84443 Bytes out: 115760 Packets encrypted: 816 Packets decrypted: 671 Packets bypassed: 19 Packets discarded: 7 Configured Secured * * routes. Network Destination 10.100.n.n 0.0.0.0 Netmask 255.255.255.255 0.0.0.0 Local Network Destination 10.100.n.n Netmask 255.255.0.0 Bytes 0 157753 Neben dem vpnclient Werkzeug existiert ein nettes kleines Programm zum Schreiben von Logfiles. Dessen Verwendung ist zwar etwas ungewöhnlich, aber das Prinzip funktioniert. Bevor man sich entscheidet, einen Logfile schreiben zu lassen (eigentlich unklar, warum nicht gleich an den syslogd übergeben wird), kann man entscheiden, was und wieviel man mitschreiben lassen möchte. Die Einstellungen hierzu muss man in der Datei: /etc/CiscoSystemsVPNClient/vpnclient.ini vornehmen. Die Variable “EnableLog” muss zum erfolgreichen Loggin auf 1 gesetzt sein. Die einzelnen Optionen sind relativ gut selbsterklärend. Dabei ist ein hoher “level” mit ausführlichen Mitteilungen des Klienten gleichzusetzen. Das Schreiben des Logfiles startet man letztendlich mit: ipseclog logname& - nein, das Programm geht nicht automatisch in den Hintergrund. Auch hier hat sich Cisco ein eigenartiges Format ausgedacht, was nur etwas gewöhnungsbedürftig ist, aber den Zweck erfüllt. Wenn man den Cisco Klienten zusammen mit Zertifikaten einsetzt, kommt man an der Benutzung des “Zertifikate Managers” (cisco cert mgr) nicht vorbei. Dieses kann nützlich sein, wenn man mit FreeSWAN auf den Cisco-Server zugreifen möchte. Erklärungen zu Details findet man bei Cisco. 18.6.3 Einsatzszenarien Der Cisco-VPN-Router wird zur Zeit besonders in Funk-LANs eingesetzt. Diese müssen um einiges besser gegen Mitlesen des Datenverkehrs abgesichert werden, als drahtgebundene Installationen. Die Ausbreitung der Funkwellen läßt sich bei weitem nicht so gut überblicken, wie die von TP-Kabeln. Die Funk-LAN-eigenen Sicherungssysteme sind nicht besonders ernstzunehmen, weshalb ein anderer Ansatz gewählt wird: Man baut ein offenes privates Netz auf, über das die Teilnehmer nach dynamischer IP-Zuweisung per DHCP einen Verschlüsselungstunnel über den Cisco-Router aufbauen und erst so in das ”richtige” Netz kommen. Die Maschine bildet den einzigen Übergang und übernimmt neben den Authentifizierungs- auch Routingaufgaben. Kommunizieren die einzelnen Clients kaum selbst untereinander, so ist dieses Setup sehr ökonomisch: Es existiert eine einheitliche Software für unterschiedliche Clients, die recht bequem zu benutzen ist. Die Lizenzgebühren 18.7. LITERATUR 273 werden über die Anschaffung der Hardware7 fällig, die Clients können in beliebiger Zahl benutzt werden. Ein ähnliches Szenario ergibt sich durch die Anbindung von Aussendienstmitarbeitern über das unsichere Internet: Sie können auf diese Weise direkt in das jeweilige Netzwerk ihrer Abteilung oder Firma transparent eingebunden werden. Wenn man mit Zertifikaten statt der userbasierten Authentifizierung arbeitet, kann der Cisco-VPN-Server auch mit FreeSWAN zusammenarbeiten. Inwieweit sich der höhere Einrichtungsaufwand lohnt, muss jeder für sich selbst festlegen. Stellt man keine besonderen Anforderungen, dann ist der Einsatz der Originalsoftware die einfachere Wahl (besonders da, wo keine Extrakosten für den Client anfallen). 18.6.4 Fazit Der Cisco-VPN-Client basiert zwar wie z.B. FreeSWAN auf der identischen Technologie, jedoch sind die Unterschiede so gross, dass beide nicht interoperabel sind. Beide Verfahren scheiden sich bereits im Authentifizierungsansatz: FreeSWAN arbeitet mit hostbasierten Schlüsseln unabhängig von den auf dem jeweiligen Rechner arbeitenden Usern. Der CiscoClient arbeitet mit userbasierten Credentials, die unabhängig von der darunterliegenden Hardware funktionieren. Im klassischen Road-Warrior-Einsatz spielt dieser Unterschied keine wesentlich Rolle, da Maschine und Benutzer identisch sind. Vom Einsatzszenario eignet sich der vorgestellte Cisco-Client nur für den Road-Warrior oder den Rechner im lokalen Netz, die kaum Daten miteinander austauschen, da der gesamte Verkehr jeweils über das Cisco-IPsec-Gateway abgewickelt wird. Von der Konzeption her bietet sich deshalb das hier vorgestellte Modell nicht dafür an, Verschlüsselungstunnel für ganze Netze einzelner Betriebsteile zu bauen. Hierfür gibt es entweder spezielle Hardware, die diese Aufgabe besser erfüllen kann oder die GPL-basierten Verschlüsselungstunnel CIPE oder FreeSWAN. Am Ende bleibt die Frage nach der Sicherheit der Cisco-VPN-Lösung. Der entscheidende Code liegt im Binärformat vor und kann nicht von jedermann eingesehen werden. Ein weiteres Problem zeigt sich mit der “Öffnung” des Interceptors: Damit lassen sich die Vorgaben des VPN-Administrators aushebeln, womit zumindest diese Sicherheitsdimension nicht mehr wirklich gesteuert werden kann. Weiterhin verhält sich der Client mit seinen Interfaces aus Administratorensicht ärgerlich, weil die Standardtools nicht in der gewohnten Weise eingesetzt werden können. 18.7 Literatur Cisco: http://www.cisco.com/univercd/cc/td/doc/product/vpn/client/rel3 7/cli3 7/certs.htm 7 deren Kosten liegen bei ca. 16.000 Euro 274 KAPITEL 18. SICHERES IP Kapitel 19 Firewall 19.1 Aufbau Der Begriff ”firewall” bezeichnet einen (speziell konfigurierten) Computer, der mittels entsprechender Software (auch diese wird häufig als firewall bezeichnet) den Strom der Verbindungspakete (durch mehrere Interfaces) regelt. Dieses Konzept ist recht alt (ca. 1985), daher ist auch Linux seit langer Zeit als firewall nutzbar. Mit der neuen Kernelgeneration wurde eine neue TCP/IP Stack Implementation eingeführt und einige der bekannten Programme wie ipchains und ipfwadm durch Kernelmodule und Tools aus dem netfilter Paket ersetzt. Vorhandene Skripte lassen sich aber relativ leicht anpassen. _____ / \ Incoming -->[Routing ]--->|FORWARD|-------> Outgoing [Decision] \_____/ ^ | | v ____ ___ / \ / \ |OUTPUT| |INPUT| \____/ \___/ ^ | | ----> Local Process ---Pakete die über ein Netzinterface eintreffen, sind entweder an die firewall selbst gerichtet (INPUT) oder sollen an einen anderen Rechner weitergeleitet werden (FORWARD); lokal erzeugte Pakete durchlaufen OUTPUT, bevor sie gesendet werden. Jedes der angedeuteten Ovale stellt eine ”chain” dar, die jeweils eine Menge von Regeln enthält. Wenn ein Paketheader auf eine der Regeln zutrifft, gibt diese an, wie weiter mit dem Paket zu verfahren ist. Passt keine der Regeln einer chain, wird die ”policy” der chain verwendet. Eine einfache Regel könnte so aussehen: target ACCEPT prot opt source all -- anywhere destination anywhere Diese recht nutzlose Regel akzeptiert alle Pakete, unabhängig von Protokoll sowie Ursprung und Ziel. Das target könnte auch REJECT, DROP oder FORWARD sein, oder 275 276 KAPITEL 19. FIREWALL allgemein der Name einer chain (die vordefinierten targets sind in Grossbuchstaben). Alle anderen Datenfelder zeigen hier ”menschenlesbare” Schlüsselworte (sofern dieses Verhalten nicht durch Zusatzparameter unterdrückt wird), so fasst z.B. ”all” die Menge aller Protokolle zusammen; alternativ kann man einen einzelnen Namen (z.B. tcp, siehe /etc/protocols) bzw. den entsprechenden numerischen Wert angeben. Letztlich kann man durch ein vorangestelltes ”!” die Komplementmenge wählen (z.B. !icmp), diese Möglichkeit besteht auch bei vielen anderen Schaltern. Ebenso ist ”anywhere” nur ein anderer Ausdruck für die Netzmaske 0.0.0.0/0. 19.2 Ein- und Austragen von chains und Filter-Regeln iptables wird meistens mit recht vielen Argumenten aufgerufen, zum Beispiel können Regeln in den verschiedenen chains eingetragen, gelöscht und verändert werden. Die vordefinierten ”chains” (in Großbuchstaben) können jedoch nicht gelöscht werden. 1. Alle Regeln in einer chain listen (-L). 2. Alle Regeln in einer chain löschen (-F). 3. Alle Pakete und Paketzähler in der chain zurücksetzen (-Z). 4. Eine neue chain erzeugen (-N). 5. Die Policy für eine eingebaute chain ändern (-P). 6. Eine leere chain löschen (-X). Es existieren mehrere Möglichkeiten, eine Regel in einer chain zu verändern: 1. Eine Regel in einer chain einfügen (insert, d.h. oben in die Liste einhängen) (-I). 2. Eine Regel an eine chain anfügen (append, d.h. unten in die Liste einfügen) (-A). 3. Eine Regel in einer chain ersetzen (replace) (-R). 4. Eine (bzw. die erste passende) Regel in einer chain löschen (delete) (-D). 19.2.1 Pakete genauer spezifizieren Die meisten Regeln bestehen aus einer (beliebigen) Kombination der folgenden Parameter: 19.2. EIN- UND AUSTRAGEN VON CHAINS UND FILTER-REGELN 277 ”-p, –protocol [!] protocol”: ”protocol” ist ein Name aus /etc/protocols, der entsprechende numerische Wert oder ’all’ ”-s, –source [!] address[/netmask]” und ”-d, –destination [!] address[/netmask]”: die Adresse kann theoretisch ein hostname sein, um ständige DNS requests zu vermeiden sollte man jedoch die IP verwenden. Optional kann eine Netzmaske angegeben werden. ”-j, –jump target”: das Ziel (”target”) der Regel gibt an, wie mit matchenden Paketen verfahren wird, ”target” ist entweder eines der vordefinierten targets (ACCEPT, DROP, ...) oder der Name einer anderen chain. ”-i, –in-interface [!] name” sowie ”-o, –out-interface [!] name”: diese Schalter ermöglichen es Pakete durch den Namen des Interfaces zu spezifizieren; einige Kombinationen sind allerdings nicht möglich, zum Beispiel eine ”-i” Angabe in der OUTPUT chain. Man kann durch Anhängen eines ”+” mehrere interfaces in einer Regeln bezeichnen (z.B. ppp0, ppp1). ”[!] -f, –fragment”: bezieht die Regel auf das zweite und alle folgenden Fragmente eines fragmentierten Paketes, oder (negiert) auf unfragmentierte Pakete und erste Fragmente. Fragmentierung von Paketen tritt zum Beispiel in Ethernet Netzwerken durch die Begrenzung der Framegrösse auf 1500 Byte (MTU) auf, ein grösseres Paket wird automatisch zerteilt, gesendet und wieder zusammengesetzt. Theoretisch kann man auf das Filtern von folgenden Fragmenten verzichten, da sofern das Erste fehlt, das Zusammensetzen des gesamten Paketes fehlschlagen sollte. Dies setzt aber die Korrektheit der TCP Stack Implementation voraus, dementsprechend gibt es viele Angriffe, die spezielle Schwächen verschiedener Betriebssysteme ausnutzen. 19.2.2 ”Match Extensions” und Erweiterbarkeit iptables unterstützt viele weitere Filterspezifikationen durch externe Module (”match extensions”), die implizit durch die Verwendung des ”-p” flags geladen werden (jeweils auf das Protokoll bezogen), oder explizit durch ”-m modulname” bezeichnet werden müssen. So wird durch die Angabe ” -p tcp” eine Reihe von TCP bezogenen Filterangaben verfügbar: 278 KAPITEL 19. FIREWALL ”–tcp-flags [!] mask comp”: matcht Pakete mit einer bestimmten Kombination gesetzter flags. Die Maske gibt an, welche der flags betrachtet werden, der zweite String gibt die eigentliche Kombination an. flags sind durch Komma zu trennen, der erste Parameter darf auch als ”NONE” oder ”ALL” angegeben werden. ”[!] –syn”: ist eine Kurzform für ”–tcp-flags SYN,RST,ACK SYN” und bezeichnet das jeweils erste Paket einer TCP Verbindung. ”–source-port [!] port[:range]” und ”–destination-port [!] port[:range]”: bezeichnen Pakete durch Einschränkung auf einen Port (oder ein Intervall) an den beiden Enden der Verbindung. Die Parameter ”–sport” und ”–dport” sind Aliasnamen. Die UDP Filter bieten analog die Angabe von Portadressen an, ICMP kennt keine Ports und kann daher lediglich mit ”–icmp-type [!] type” spezifiziert werden, wobei type ein numerischer Wert ist. Eine weitere wichtige Erweiterung ist das ”limit” Modul, mit dem die Rate der gematchten Pakete pro Zeiteinheit beschränkt werden kann. Damit kann verhindert werden, das eine (entsprechend konfigurierte) firewall sich durch das Loggen von zu vielen Paketen selbst behindert. Darüber hinaus existieren viele ”Denial of Service” Angriffe (”Überschwemmen einer Leitung mit vielen Paketen”) die zwar nicht vollkommen ausgeschaltet werden können (die Bandbreite zur Übertragung ist verloren), deren Auswirkungen (stabiler Betrieb der Computer, Netzüberlastung durch Antwortpakete) aber erheblich reduziert werden. Das Modul kann zusätzlich mit den Parametern ”–limit number” und ”–limit-burst number” aufgerufen werden. Der erste Wert gibt die Rate an (der Zahl kann eine Zeiteinheit folgen), der zweite einen Schwellenwert, der überschritten werden muss, bevor die –limit Rate einsetzt. Im einfachsten fall reicht das Laden des Moduls aus: iptables -A INPUT -m limit -j LOG Die Standardwerte sind 3 Pakete pro Stunde mit einem Burstwert von 5, d.h. von einem ununterbrochenem Strom von ankommenden Paketen würden die ersten 5 gelogt, danach ist die Regel 20 Minuten inaktiv, bevor auch nur ein Paket verzeichnet wird. Wenn innerhalb von 20 Minuten kein neues Paket eintrifft, wird eine ”burst-Einheit” zurückgewonnen; nach 100 Minuten ohne Aktivität wäre die firewall wieder im Anfangszustand. Syn-Flood Ein bekannter DoS Angriff ist das Senden einer grossen Zahl von Paketen, die den Zielrechner zum Aufbau einer Verbindung auffordern; der angegriffene Rechner verbraucht dabei mehr Resourcen als der Angreifer benötigt um die Pakete zu senden. iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT ”Ping of Death” 19.3. VON ”MASQUERADING” UND ”PACKET MANGLING” 279 Viele ältere Betriebssysteme reagieren sehr empfindlich auf ICMP Pakete, die grösser als 65535 byte sind. Da auch von diesem Angriff viele Varianten existieren, blocken manche Administratoren die entsprechenden Pakete komplett, oder beschränken zumindest die Rate der eingehenden Pakete. iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s \ -j ACCEPT Letztlich bleibt noch das ”state” modul, das die Zuordnung von einzelnen Paketen zu der entsprechenden Verbindung ermöglicht. Durch Laden des Moduls wird ein weiterer Schalter ”[!] –state STATE” verfügbar, die Angabe ”STATE” kann dabei entweder ”NEW”, ”ESTABLISHED”, ”RELATED” oder ”INVALID” sein. (siehe connection-tracking) 19.3 von ”masquerading” und ”packet mangling” Neben dem Filtern von (unerwünschten) Paketen sollte eine moderne firewall auch die Header von bestimmten Paketen verändern können, diese Fähigkeit wird im Allgemeinen in zwei Bereiche unterteilt. Beide waren bei ipchains noch durch spezielle chains implementiert, sind inzwischen jedoch als eigene Subsystem (table) gekapselt und damit vom Filtermechanismus getrennt. Der entsprechende iptables Parameter ist ”-t” gefolgt von dem Namen des anzusprechenden tables: entweder ”nat” oder ”mangle”. Wird der Parameter nicht angegeben, wird auf dem ”filter” table operiert. 19.3.1 Network Address Translation Unter diesem Begriff werden Regeln zusammengefasst, die Quell bzw. Zieladresse von Paketen verändern. Anders als bei den normalen Filterregeln, wird hier immer nur das jeweils erste Paket einer Verbindung betrachtet. Das Ergebnis dieses Paketes wird für alle folgenden Pakete verwendet. 1. Source NAT (SNAT): Die Quelladresse des ersten Paketes einer Verbindung wird verändert, bevor es durch das Netzgerät gesendet wird. Auf der anderen Seite der Verbindung erscheint die firewall als der Ursprung der Verbindung. 2. Destination NAT (DNAT): Die Zieladresse des ersten Paketes wird unmittelbar nachdem es empfangen wurde ver”andert, jedoch bevor die ”Routing Decision” den weiteren Verlauf bestimmt. Hier erscheint die firewall als das Ziel der Verbindung. Nun ist es notwendig das ”routing” Diagramm etwas komplexer darzustellen: 280 KAPITEL 19. FIREWALL --->[1]--->[ROUTE]--->[3]--->[4]---> | ^ | | | [ROUTE] v | [2] [5] | ^ | | v | Die bereits bekannten targets INPUT (2), OUTPUT (5) und FORWARD (3) werden durch PRE ROUTING (1) und POST ROUTING (4) ergänzt, allerdings kann nicht jede chain in jedem table verwendet werden. Im ”nat” table dürfen PRE ROUTING sowie POST ROUTING und OUTPUT verwendet werden. SNAT wird verwendet, um Zugriffe aus einem Rechnernetz in anderes hinein so zu maskieren, dass die firewall als Ausgangspunkt der Verbindungen erscheint. Eine firewall sei durch das Interface eth0 mit dem Internet verbunden und habe die IP 1.2.3.4. iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4 Jedes Paket (aus einem internen Netz), das durch diese firewall ins Internet geroutet wird, hat als source Adresse die firewall. Eventuelle Antwortpakete werden beim Empfang automatisch entsprechend manipuliert und an den eigentlichen Quellrechner weitergeleitet. Da bei Auswahlverbindungen die (externe) Adresse erst beim Verbindungsaufbau bekannt ist, existiert hierfür eine Spezialfall des SNAT: MASQUERADE. Die Angabe der –to Adresse entfällt hier. iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE DNAT ermöglicht es, eine auf der firewall eingehende Verbindung an einen anderen Rechner weiterzuleiten. Häufig müssen bestimmte Dienste auch vom Internet her verfügbar sein, meistens werden dafür einige Rechner in einem (vom eigentlichen lokalen Netzwerk) getrenntes Netzsegment untergebracht (DMZ, demilitarized zone) das ebenfalls über die firewall mit dem Internet verbunden ist. iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT \ --to 5.6.7.8:80 Diese Regel würde auf eth0 eingehenden Traffic (an Port 80) an den Webserver auf Rechner 5.6.7.8 (in der DMZ) weiterleiten. 19.3.2 packet mangling Auch die Regeln dieses tables dienen der Veränderung von Paketheadern, insbesondere des TOS (Type of Service) flags und zum Setzen von eigenen Paketmarkierungen. Seit der Kernelversion 2.4.18 sind alle bisher genannten targets in diesem table gültig. iptables wird hier mit den Parameter ”–set-mark” bzw. ”–set-tos” und einem geeigneten Wert aufgerufen. Der ”Type Of Service” Eintrag eines Paketes hat Auswirkung auf die Routingentscheidung des Kernels, insbesondere wie lange das Paket in einem Cache (exakter: in einer Queue) warten darf, bzw. wieviel Bandbreite zur Übertragung verwendet werden sollte. 19.4. CONNECTION TRACKING 281 Diese Werte sind jedoch nur als ”Vorschlag” zu verstehen, IPV4 bietet keine Möglichkeit derartige Zusicherungen wirklich einzuhalten (”Quality of Service” oder kurz QoS). Der Wert ist als 4-Bit Feld definiert, von dem immer nur ein Bit gesetzt ist: 1000 0100 0010 0001 0000 ------ minimize delay maximize throughput maximize reliability minimize monetary cost normal service Der ”–set-mark” Parameter wird meistens verwendet, um die Lesbarkeit der firewall Logdateien durch Schlüsselworte zu verbessern. 19.4 connection tracking Unter diesem Begriff versteht man die Fähigkeit einer firewall Statusinformationen über alle aktiven Netzwerkverbindungen zu verwalten, bzw. Pakete einzelnen Verbindungen zuzuordnen. Dabei werden die Quell- und Ziel-adressen, die Portnummern, verwendete Protokolle und jeweils ein ”Zustand” (state) der Verbindungen im Speicher gehalten. Eine Firewall mit dieser Eigenschaft wird als ”stateful” bezeichnet. Zustand NEW ESTABLISHED RELATED INVALID allgemeine Bedeutung bezeichnet Pakete, die eine neue Verbindung aufbauen, bzw. die zu einer Verbindung gehören, der bisher noch keine Pakete zugeordnet wurden. eine Verbindung gilt als ESTABLISHED, wenn in beide Richtungen mindestens ein Paket geflossen ist. auch diese Pakete bauen eine neue Verbindung auf, sind jedoch im Kontext zu einer existierenden Verbindung zu betrachten (FTP Datenverbindung, ICMP Fehlermeldung). bezeichnet Pakete die zu keiner bekannten Verbindung gehören. Je nach Protokoll der Verbindung haben diese Zustände unterschiedliche technische Bedeutung, oder sind nur teilweise anwendbar. UDP Pakete haben keine Sequenznummern, allgemein wird UDP ”stateless” genannt. Wenn bisher nur ein Paket in eine Richtung geschickt wurde, wird die Verbindung intern als ”UNREPLIED” markiert; wenn innerhalb einer gewissen Zeit (timeout) ein Antwortpaket eintrifft wird diese Markierung gelöscht und die Verbindung gilt als ”ESTABLISHED”. Nach einer vorkonfigurierten Anzahl von Paketen (in beide Richtungen) gilt die Verbindung intern als ”ASSURED” und der timeout Wert wird heraufgesetzt. TCP Verbindungen werden durch einen ”3-way handshake” aufgebaut, dies ist eine Folge von Anfrage- und Antwort-paketen, bei denen bestimmte Kombinationen an TCP flags gesetzt sind. Analog zu UDP gilt eine Verbindung als ”ESTABLISHED” (intern ASSURED) sobald das abschliessende ACK empfangen wurde. ICMP Verbindungen bestehen entweder aus einer Anfrage (request, NEW) und der Antwort (reply, ESTABLISHED) oder aus einem einzelnen Paket (RELATED). Die Beachtung der internen Zustände kann bei Computern mit relativ wenig Hauptspeicher notwendig sein, da die Anzahl der gleichzeitig überwachbaren Verbindungen durch 282 KAPITEL 19. FIREWALL den verfügbaren Hauptspeicher begrenzt ist. Wenn die Resourcen erschöpft sind und weitere Verbindungen überwacht werden müssen, werden bevorzugt Verbindungen im Zustand ”UNREPLIED” gelöscht und der Verbindungsaufbau damit unterbrochen. Die konfigurierte Anzahl gleichzeitig verfolgbarer Verbindungen ist in /proc/sys/net/ipv4/ip conntrack max gespeichert. Darüber hinaus werden Verbindungen spezieller Dienste (z.B. FTP) durch zusätzliche Kernelmodule (ip conntrack ftp) überwacht, um damit bestimmte Pakete als ”RELATED” zu klassifizieren und den Verbindungsaufbau zuzulassen, ohne das die exakten Filterangaben dieser Pakete für die Konfiguration der firewall bekannt sein müssen. So werden im Fall von FTP (mindestens) zwei Verbindungen (eine Steuerleitung und eine Datenleitung) verwendet. Der client baut zuerst die Steuerleitung zum Port 21 des servers auf. Danach sendet entweder der client (active ftp) oder der server (passive ftp) eine Portadresse (¿1024) und sein Gegenüber baut die Datenleitung zu der angegeben Portadresse auf. Der ip conntrack code filtert die Portangabe aus der Steuerleitung heraus und bezeichnet ein eintreffendes Paket mit den angegebenen Werten als ”RELATED” zu der existierenden Steuerverbindung. 19.5 Referenzen 1. die iptables man page 2. das netfilter, packet filtering sowie NAT HOWTO http://www.netfilter.org/documentation/ Index Übertragungskapazität, 28 A-Record, 91 Abstract Syntax Notation, 175 Acces Point Name, 26 AccessPoint, 18 ACE-Umschrift, 86 Acknowledge, 63 Acknowledgenummer, 64 Active Directory, 85 Adress Resolution Protocol, 53 Adressbereich, 43 Adressierungsschema, 38 ADSL, 11 Agent, 174 Alias, 92 Anwendung, 158 Anwendungsschicht, 9 APN, 26 Applikation, 36 ARP, 51, 53 ASN.1, 175 ATM, 24, 27, 52 Auslöschung, 18 Carrier Sense Multiple Access, 2 Carrierless Amplitude, 29 CDMA, 27 Certificate Authorisation, 106 Chiffrierer, 29 CIFS, 131 CIPE, 200 Circuit Switched Data, 27 Cisco, 211 Clear To Send, 17 Common Internet File System, 131 Common Unix Printer System, 137 Computern, 10 Computersystem, 38 Content-Type, 101 Crypto IP Encapsulation, 200 CSD, 27 CSMA/CD, 14 CTS, 17 CUPS, 137 Darstellungsschicht, 9 Datagramm, 39, 63 Datei, 2, 85, 158 Dateisystem, 85 Datenrate, 11 Bandbreit, 19 Defaultrouter, 43 Bandbreite, 18 Delegation, 87, 88 BDC, 143 dhclient, 75 Benutzer, 143, 189 DHCP, 64, 67, 95 Benutzerkonto, 143 Berkeley Internet Name Domain Software, DHCP-Server, 19 dhcpcd, 75 84 Dienst, 83, 189 Betriebssystem, 8 Directory, 158 Binärzahl, 40 Directory Service, 158 BIND, 84 Discrete Multi-Tone Modulation, 30 Bind, 89 Diskless X-Station, 2, 71 Bitübertragungsschicht, 11 Distinguished Name, 79 Bouncer, 199 DNS, 61, 64, 67, 83 Broadcast, 42 DocumentRoot, 105 CA, 106 Domäne, 143 CA.pl, 106 Domain, 61, 85 283 284 INDEX Domain Name System, 83, 175 High Speed Circuit Switched Data, 27 Domain-Name-Service, 61 Host, 23, 38 Domaincontroller, 129 host, 83 Domainname, 91 HOST-RESOURCES-MIB, 182 Dotted Quad Notation, 84 Hostname, 61, 71 Dotted-Quad-Notation, 40 hosts, 157 Drucker, 158, 187 hosts.allow, 193 Druckerfreigabe, 129 hosts.deny, 193 Dynamic Host Configuration Protocol, 48, Hostteil, 51 64 HSCSD, 27 Dynamic Host Control Protocol, 3 http, 199 HTTP-Kommunikation, 200 EC, 28 httpd, 101 Echo Cancellation, 28 httpd.conf, 101 Email, 200 HTTPS, 105 Endsystem, 23 ENUM, 97 ICMP, 40, 59 EPROM, 127 imap, 111 ESP, 212 Imap4, 199 Ethernet, 11, 13, 24, 35 inetd, 125, 193 Exploit, 200 Internet, 38 exports, 124 Internet Control Message Protocol, 40 Internet-Protokoll, 38 FDDI, 33 IP, 38, 59, 64, 192, 199 Fehlerrate, 64 IP Virtual Host, 104 Fiber Distributed Data Interface, 33 IP-Adressbereich, 41 Finish, 63 IP-Adresse, 37, 71, 83, 91, 158, 175 Firewall, 199 IP-Adressraum, 46 Flag, 63 IP-Paket, 201 Flusskontrolle, 64 IP-Stack, 199 FQDN, 61, 85, 89 IPsec, 200 Fragment, 45 IPX, 200 Fragment Offset, 64 ISDN, 11, 24 Fragmentierung, 39 Frequency Division Multiplexing, 28 Frequenzspektrum, 18 ftp, 199 Full Qualified Domain Name, 61, 85 Jam-Sequence, 14 Kanalaufteilung, 18 Kanalbündelung, 18 Kernelmodul, 200 Gateway, 71 Klartext, 199 General Packet Radio Service, 26 Koaxialkabel, 15 Generic Flow Control, 32 Kollision, 14, 19 GFC, 32 Global Standard for Mobile Communication, Kommunikation, 46 Konfigurationsdatei, 2 26 GMII, 16 GPRS, 26 groups, 157 GSM, 26 Header, 199 LAN, 7, 36 LDAP, 78, 147, 158 LDAP-Server, 78 ldapadd, 164, 166 ldapdelete, 164 INDEX ldapmodify, 164 ldapsearch, 164 Leitungskodierer, 29 Lightwight Directory Access Protocol, 147 lilo, 191 Lizenzgebühr, 129 Local Area Network, 3, 13 Logical Link Control, 20 Login, 190 login.defs, 190 Loopback, 84 LPD, 129 MAC, 13 MACA, 17 Management Architektur, 173 Management Information Base, 174 Management Station, 174 Manipulation, 64 Maximal Transmission Unit, 45 Maximum Transfer Unit, 22 MIB, 174 Microsoft Point-to-Point Tunnel Protocol, 200 Mitlauschen, 64 Modem, 11, 24, 35 Modulator, 29 mount.cifs, 130 MRTG, 183 mtr, 48 MTU, 22, 45 Multi Router Traffic Grapher, 183 Multi-Homed-Hosts, 42 Multiple Access with Collision Avoidance, 17 Name Virtual Host, 104, 105 named, 90, 189 named.conf, 90 Namensraum, 87 Nameserver, 62, 87 Naming Authority Pointer Records, 98 NAPTR, 98 NAT, 199 NetBIOS, 130, 200 netstat, 227 Network Address Translation, 199, 202 Network File System, 123 Network Information System, 157, 159 Network Number, 40 Netzmaske, 71 Netznummer, 40 285 Netzwerk, 46, 201 Netzwerkdateisystem, 129 Netzwerkkennung, 46 Netzwerkschnittstelle, 47 Netzwerkteil, 51 Netzwerkverbindung, 227 NFS, 64, 123 NIS, 124, 157, 159 nmbd, 131, 138, 142 nslookup, 61 Nyquist, 28 Object Identifier Namespace, 175 Open Systems Interconnection, 6 openssl, 106 OpenVPN, 200 Paketübertragung, 35 Paketbestätigung, 64 Paketreihenfolge, 64 passwd, 157, 190 Passwort, 189, 190 PATH, 190 PDC, 143 Perl, 3 Personen, 158 Phase Modulation, 29 plain old telephone system, 25 Point-to-Point-Protokoll, 26 Pop3, 199 pop3, 111 Port, 63 Portnummer, 63 POTS, 25 PPP, 26 PPTP, 200 Präfix, 40 Prüfsumme, 199 proftpd, 125 proftpd.conf, 125 Protokoll, 5, 36, 127, 204 Prozess, 189 Prozessor, 187 pump, 75 Punkt-Dezimal-Notierung, 40 Push, 63 PXE, 127 QoS, 52 Quadrature Amplitude Modulation, 29 286 Quality of Service, 52 Quelladresse, 63 Ready To Send, 17 Rechner, 143 Redirect Message, 40 Redirecter, 199 Registrierung, 86 Remote Procedure Call, 157 Remote-Login, 200 Reset, 63 resolv.conf, 61, 75 Resource Record, 91 Ressource, 158 rhosts, 194 Roaming, 17 Round Trip Time, 3 route, 47 route.conf, 48 Router, 44, 47, 174 Routing, 37, 46 Routingtabellen, 49 RPC, 157 RR, 91 RTS, 17 RTT, 3 RWHO, 64 Samba, 129 Schnittstelle, 5 scp, 192 Second-Level-Domain, 86 Secure Shell, 200 Secure Socket Layer, 200 SecureShell, 192 Sendefilter, 29 Sequencenummern, 64 Server, 200 ServerAlias, 105 ServerName, 105 Service, 189 services, 63, 157 shadow, 190 Shannon, 28 Sicherheit, 64 Sicherungsschicht, 200 Signal Noise Ratio, 4 Signalstörung, 18 Signierung, 200 Simple Network Management Protocol, 173 INDEX Sitzungsschicht, 9 slapd, 163 Sliding-Window, 64 SMB, 129 smbclient, 130, 132 smbd, 131, 138 smbmount, 130 smbpasswd, 145 smbstatus, 135 SMI, 175 SMTP, 111 SNMP, 64, 173, 183 SNR, 4 SOA, 87 Socket, 63, 227 SOCKS, 202 Sourcecode, 67 SSH, 200 ssh, 192 ssh-agent, 193 SSL, 200 Start Of Authority, 87 State-Machine, 64 Structure of Management Information, 175 Subdomain, 88 subnetting, 50 Subnetz, 72 Suffix, 40 Swap, 187 Switch, 14 Synchronize, 63 Systembefehl, 2 TCP, 62, 192, 199, 204, 227 TCP/IP, 6 Telefonnetze, 35 Telnet, 199 telnet, 193 Terminalemulation, 9 TFTP, 127 Thin-Client, 71 Three-Way-Handshake, 64 Time-To-Live, 89 TokenRing, 11, 19 Tokenring, 24 Toplevel-Domain, 85 traceroute, 47 Transmission Control Protocol, 62, 63 Transportprotokoll, 201 Transportschicht, 9 INDEX Trojaner, 200 TTL, 89 Twisted Pair Kabel, 16 UDP, 64, 192, 201, 204, 227 UDPPaket, 201 Umgebungsvariable, 193 Universal Mobile Telecommunications System, 27 unix, 227 Urgend, 63 Urgendpointer, 63 User Datagram Protocol, 64 User Datagramm Protocol, 64 UTMS, 27 Verarbeitungsschicht, 9, 36 Verbindung, 192, 200–202, 207 Verbindungsverhalten, 63 Vermittlungsschicht, 8 Verzeichnis, 85 Virtual Private Network, 201 Visualisierung, 48, 176, 183 Voice-over-IP, 97 VPN, 201 WAN, 7, 25, 27, 36 Webbrowser, 200 well-known services, 63 whois, 86 Wide Area Network, 25, 27 WIN¿, 84 Window-Size, 64 Windows, 129 Windows-Namensdienst, 132 WINS, 130, 132, 140 Wireless LANs, 16 xhost, 194 xinetd, 125, 193 xinetd.conf, 193 XML, 184 Yellow Pages, 157 ypbind, 157 ypserv, 157 ypset, 157 Zähler, 175, 230 Zertifikat, 200, 211, 216 Zieladresse, 20, 38, 63 Zone, 88 287