Uploaded by Alejo Gomez

(Addison-Wesley software security series) Gary McGraw-Software security building security in-Addison-Wesley (2006)

advertisement
Sandini Bib
Linux Security
Sandini Bib
Open Source Software wird gegenüber kommerziellen Lösungen immer wichtiger.
Addison-Wesley trägt dieser Entwicklung Rechnung mit den Büchern der Open Source
Library. Administratoren, Entwickler und User erhalten hier professionelles Know-how,
um freie Software effizient einzusetzen. Behandelt werden Themen wie Betriebssysteme,
Netzwerke und Sicherheit als auch Programmierung.
Eine Auswahl aus unserem Programm:
Linux für den fortgeschrittenen Systemadministrator, der lernt, wie man Linux bei verteilten
Netzumgebungen einsetzt. Die vierte Auflage
wurde durchgehend überarbeitet, aktualisiert
und erweitert. Wesentliche Neuerungen betreffen
Linux-Standards, XML-Tools, Internet-Zugang
mit DSL, VPNs, BIND9/dnssec.
Linux-Systemadministration
Jochen Hein
ca. 640 Seiten
EUR 49,95 [D], sFr 77,50
ISBN 3-8273-1992-7
Sandini Bib
Josef Brunner
Linux Security
Sicherheit unter Linux mit Open-Source-Tools
An imprint of Pearson Education
München • Boston • San Francisco • Harlow, England
Don Mills, Ontario • Sydney • Mexico City
Madrid • Amsterdam
Sandini Bib
Die Deutsche Bibliothek – CIP-Einheitsaufnahme
Ein Titeldatensatz für diese Publikation ist bei
Der Deutschen Bibliothek erhältlich.
Die Informationen in diesem Produkt werden
ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht.
Warennamen werden ohne Gewährleistung
der freien Verwendbarkeit benutzt.
Bei der Zusammenstellung von Texten und Abbildungen
wurde mit größter Sorgfalt vorgegangen.
Trotzdem können Fehler nicht vollständig ausgeschlossen werden.
Verlag, Herausgeber und Autoren
können für fehlerhafte Angaben und deren Folgen weder eine
juristische Verantwortung noch irgendeine Haftung übernehmen.
Für Verbesserungsvorschläge und Hinweise
auf Fehler sind Verlag und Herausgeber dankbar.
Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe
und der Speicherung in elektronischen Medien.
Die gewerbliche Nutzung der in diesem Produkt
gezeigten Modelle und Arbeiten ist nicht zulässig.
Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig
auch eingetragene Warenzeichen oder sollten als solche betrachtet werden.
Umwelthinweis:
Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt.
Die Einschrumpffolie – zum Schutz vor Verschmutzung – ist aus umweltverträglichem und recyclingfähigem
PE-Material.
05 04 03 02 01
ISBN 3-8273-1999-4
© 2002 by Addison-Wesley Verlag,
ein Imprint der Pearson Education Deutschland GmbH
Martin-Kollar-Straße 10–12, D-81829 München/Germany
Alle Rechte vorbehalten
Einbandgestaltung: Marco Lindenbeck (mlindenbeck@webwo.de)
Lektorat: Frank Eller, feller@pearson.de
Korrektorat: Simone Meißner, Fürstenfeldbruck
Herstellung: Elisabeth Egger, eegger@pearson.de
CD-Mastering: Gregor Kopietz, gkopietz@pearson.de
Satz: reemers publishing services gmbh, Krefeld, www.reemers.de
Druck: Bercker, Kevelaer
Printed in Germany
Sandini Bib
Kapitelübersicht
Vorwort
IX
1
Intrusion Detection Systems
1
2
Netzwerk-Tools
47
3
Systemaudit
149
4
Filesystem Integrity Checker
205
5
Verschlüsselung
231
6
Tools
305
7
Remoteadministration
325
Stichwortverzeichnis
501
Sandini Bib
Sandini Bib
Inhaltsverzeichnis
Vorwort
IX
1
Intrusion Detection Systems
1
1.1
Linux Intrusion Detection System (LIDS)
1
1.2
Snort
13
Netzwerk-Tools
47
2.1
Traceroute
47
2.2
IPTraf
52
2.3
NTop
83
2.4
Tcpdump
120
Systemaudit
149
3.1
Nmap
149
3.2
Nessus
161
3.3
VPASS
202
2
3
4
5
6
Filesystem Integrity Checker
205
4.1
Tripwire
205
4.2
MD5Sum
230
Verschlüsselung
231
5.1
Gnu PG (GPG)
231
5.2
OpenSSH
260
Tools
6.1
7
305
Superuser Do (sudo)
305
Remoteadministration
325
7.1
Webmin
325
Stichwortverzeichnis
501
Sandini Bib
Sandini Bib
Vorwort
Worum es in diesem Buch geht
Um zu erklären, worum es in diesem Buch geht, sollte ich Ihnen als Erstes sagen,
worum es nicht geht.
Das Buch beinhaltet keine detaillierte Beschreibung, wie man ein Linuxsystem sicher installiert und konfiguriert. Es vermittelt kein Wissen über die Erstellung dezidierter Sicherheitsrichtlinien oder bestimmter Policies. Es will und kann nicht
perfekt sein. Es wird sicherlich nicht 100%ig ohne Fehler sein. Ich denke, es gibt
genügend Bücher, die die ersten 300 Seiten damit »verschwenden« dem Leser
Wissen zu vermitteln, das er bereits aus vielen anderen Büchern kennt oder das er
auf Grund seiner Stellung (Administrator) kennen sollte. Ich habe dieses Buch als
eine Art »ganz großes Howto« geschrieben, das die besten (oder zumindest einen
kleinen Teil der besten) Sicherheitsprogramme, die unter der GPL stehen, beschreibt. Sie werden lernen, wie Sie bestimmte Tools adäquat zur Problemlösung
einsetzen. Auch hier habe ich wieder versucht mich von den Konkurrenzwerken
zu distanzieren, indem ich alle verfügbaren Features, Optionen, Argumente und
Schlüsselwörter eines Programms aufführe, so dass der mühselige Blick in das
Manual vermieden werden kann. Sie müssen aber kein Linuxprofi sein, um dieses Buch zu verstehen. Ich habe mich bemüht die Optionen der einzelnen Programme ausführlich zu besprechen, so dass auch Einsteiger und Neulinge schnell
in die Materie eingeführt werden.
Die Kapitel dieses Buches sind dabei so geschrieben, dass sie völlig unabhängig
voneinander gelesen werden können. Das heißt, die Kapitel bauen nicht aufeinander auf. Dennoch habe ich an zwei oder drei Stellen des Buches einen Querverweis eingefügt, so dass Sie Hintergrundwissen und weitere Informationen im
entsprechenden Kapitel nachlesen können.
Als Zusammenfassung kann man sagen, dass dieses Buch kein Meisterwerk oder
gar ein neues Referenzwerk ist. Es ging einfach nur darum, dem Leser Tools vorzustellen, mit denen er sein Linuxsystem absichern kann.
Die Website zum Buch
Obwohl ich immer versucht habe ein Programm komplett zu beschreiben, kam es
des Öfteren vor, dass ich gerne noch mehr Wissen vermittelt hätte. Auf Grund der
eingeschränkten Seitenzahl war mir dies aber leider nicht immer möglich, also
habe ich mich dazu entschlossen, ein kleines Portal zum Buch ins Netz zu stellen,
welches weiterführende Informationen, Links und Downloads zu den entsprechenden Programmen bieten wird.
Sandini Bib
X
Auf der Webseite finden Sie ein Formular, das es Ihnen ermöglicht, Ihre Kritik
oder vielleicht sogar Ihr Lob an mich zu senden. Über beides freue ich mich sehr.
Zögern Sie auch nicht, mir Ihre Fragen zu schicken. Ich werde diese so schnell wie
möglich beantworten.
Sie finden die Seite zum Buch unter der Adresse:
www.triblen.de
Danksagungen
Als Erstes möchte ich Ihnen danken, denn ohne Sie wäre dieses Buch wohl nie zustande gekommen (Warum sollte man ein Buch schreiben, wenn es niemand
liest?). Es gibt aber noch einige Personen mehr, ohne die dieses Buch nie hätte realisiert werden können. Als erstes möchte ich daher meiner Lebensgefährtin danken, die mich immer unterstützt und angetrieben hat. Ich hoffe, wir können in der
nächsten Zeit mehr Zeit mit einander verbringen. Auch meinen Eltern gebührt
großer Dank. Ohne deren Förderung, Engagement und finanzielle Unterstützung
hätte ich es nie so weit gebracht. Als Nächstes möchte ich noch meinem Freund
Andy (AJ) danken, der, obwohl er ein absoluter Windowsfan ist, mir sehr oft weitergeholfen hat (solange es sich nicht um Linux handelte) und mir immer zur
Seite stand. Für die vielen ruhigen Arbeitsstunden möchte ich noch den Eltern
meiner Lebensgefährtin danken, die mir ihren Ruheraum, wann immer ich ihn
brauchte, zur Verfügung gestellt haben. Es gibt noch so viele Menschen da draußen denen ich für so vieles danken muss. Da ich auf keinen Fall eine Abstufung
oder Bewertung vornehmen will, werde ich diese in einer Liste aufzählen: Roland
Grassl (für die vielen Linuxabende), Inge (für die vielen Abende), Stefan Grossberger und Roland Russwurm, Markus, Patrick, Martin (für die Abende und die
Gespräche über die Sicherheit allgemein), Meik und Christian (für mein neuestes
Projekt), Stefan (Für das »Multimediahacking«), allen Bars in München und
Augsburg, die mir viel Raum zum Arbeiten, Inspiration und Kraft gaben, allen
Programmierern, die Linux und die freien Programme so groß gemacht haben,
Geri.
Josef Brunner, im Juli 2002
josef.brunner@addison-wesley.de
Sandini Bib
1 Intrusion Detection Systems
Wie man aus dem Namen schon erkennen kann, handelt es sich bei Intrusion Detection Systemen nicht um Abwehrprogramme, die Hacker davon abhalten sollen in
das System einzudringen, sondern um eine Art Last Line of Defense, die erkennen
kann, ob ein Systemeinbruch stattgefunden hat, um eventuell darauf zu reagieren.
Wir werden in diesem Kapitel zwei Systeme solcher Art besprechen. Zum einen
werden wir das LIDS behandeln. Bei diesem Programm handelt es sich um ein
hostbasierendes IDS, welches darauf beschränkt ist, alle Vorgänge, die auf dem
lokalen System vor sich gehen, zu überwachen. Danach werden wir uns mit Snort
beschäftigen. Dieses Tool wird als Sensor auf der Netzwerkebene eingesetzt, um
entweder den ganzen Netzwerkverkehr oder Teile davon zu überwachen.
1.1
Linux Intrusion Detection System (LIDS)
Wir sind uns sicher alle einig, dass Open Source der beste Weg zur Sicherheit ist.
Freunde eines anderen Betriebssystems werden an dieser Stelle anfügen, dass Mailinglisten wie Bugtraq oder ähnliche meistens nur von neuen Sicherheitslücken in
Open-Source-Produkten berichten und kaum von Fehlern in kommerziellen Systemen. Natürlich vergessen Vertreter dieser Position nur zu gerne, dass zumeist
auch ein Patch neben der Sicherheitslücke veröffentlicht wird und damit gewährleistet wird, dass System die von fleißigen Administratoren überwacht und betreut
werden, somit fast immer auf dem neuesten Stand der Sicherheit sind. Doch leider
(oder besser Gott sei Dank) sind Administratoren auch nur Menschen und haben
Urlaub oder vergessen den Patch aufzuspielen. An sich wäre eine dadurch entstehende verspätete Einspielung der Bugfixes noch kein allzu großes Problem, doch
der Umstand, dass auch Hacker in Mailinglisten stehen und somit auch alle sicherheitsrelevanten Meldungen bekommen, macht diese Nachlässigkeit zu einem riskanten Spiel. Falls nun ein Hacker auf seinem Streifzug im Internet ein System entdeckt, das einen Server mit einer bekannten Sicherheitslücke fährt, wird er sich
wahrscheinlich an die Entwicklung eines Exploits machen oder – falls er der Atomsprache C nicht mächtig ist – eine der bekannten Seiten für solche Eindringlingsprogramme besuchen und sich dort das nötige Werkzeug beschaffen.
Nachdem der Hacker seinen Angriff erfolgreich durchgeführt hat, kann es durchaus sein, dass er sich mit Rootrechten durch das infiltrierte System bewegt und
ihm nun alle Möglichkeiten zur Verfügung stehen, um mit dem System zu machen, was immer er will. Um dies zu verhindern, können Sie das LIDS einsetzen.
1.1.1
Was kann ich mit LIDS schützen?
Das Filesystem
Der Schutz des Filesystems ist wohl der häufigste Grund ein IDS zu installieren. Dabei kommt es aber nicht darauf an, welches Filesystem Sie haben, da das LIDS in den
Sandini Bib
2
1 Intrusion Detection Systems
VFS (Virtual File System)-Layer des Kernels eingebunden ist und deswegen nahezu
alle Dateisysteme unterstützt. Um zu verstehen, wie das LIDS arbeitet, müssen Sie
wissen, wie das VFS funktioniert und was hinter einigen Fachbegriffen steckt.
Das VFS in Linux
Das VFS in Linux ist um eine Reihe von generischen Objekttypen und Methoden, die diese Objekte aufrufen können, aufgebaut. Bei den Grundobjekten
handelt es sich um Dateien, Filesystems, Inodes und Namen von Inodes. Im
Folgenden werden wir auf drei dieser Objekte eingehen.
Dateien
Grundsätzlich ist die Eigenschaft von Dateien die, dass man sie lesen und in sie
schreiben kann. Weiter können sie in den Speicher gelegt werden oder vom Speicher heraus gelesen werden. Dieses Prinzip arbeitet ähnlich dem file
descriptor-Prinzip das Unix benutzt. In Linux werden Dateien durch struct
file repräsentiert, welche eine bestimmte Anzahl von Methoden besitzen, die
sich in struct file_operations befinden.
Inodes
Inodes repräsentieren ein Grundobjekt in einem Dateisystem. Diese Objekte
können normale Dateien, Verzeichnisse, symbolische Links usw. sein. Das VFS
macht keine großen Unterschiede zwischen den verschiedenen Objekten, sondern überlässt es dem aktuellen Dateisystem, diese angemessen zu handhaben.
Außerdem liegen über dem VFS noch einige höhere Levels im Kernel, die die
unterschiedlichen Objekte verschieden behandeln.
Dateisysteme
Ein Dateisystem ist eine Sammlung von Inodes, wobei eine davon ganz klar als
Root erkennbar ist. Es ist durch einige Charakteristika gekennzeichnet, die im gesamten Dateisystem einheitlich angewandt werden. Sie kennen sicherlich schon
einige dieser Merkmale. Wie zum Beispiel das READ-ONLY-Flag oder der blocksize.
Jedes Dateisystem wird durch struct super_block repräsentiert und besitzt
einige Methoden, die sich im struct super_operations befinden.
Interaktion
Grob vereinfacht könnte man sagen:
Wenn ein Zugriff auf das Dateisystem erfolgt, leitet das System-Call-Interface
diese Anfrage nicht direkt an das einzelne Dateisystem sondern zu dem VFS.
Sandini Bib
1.1 Linux Intrusion Detection System (LIDS)
3
Es wäre ziemlich unsinnig, jede Datei im Dateisystem zu schützen, da dies nur
unnötig Rechenzeit kosten würde. Weiter müssen Sie beachten, dass Sie mit Sicherheit ein System so konfigurieren können, dass es den höchstmöglichen Grad
an Sicherheit bietet, aber bedenken Sie, dass man damit auch noch arbeiten muss.
Im Groben kann man die Dateien in einem Dateisystem, das von LIDS geschützt
wird, in folgende Kategorien unterteilen:
Read Only File/Directory: Wie der Name schon sagt, können an diesen Dateien keine Änderungen vorgenommen werden (außer bei einem Update).
Append Only File/Directory: Das sind Files, die nur wachsen dürfen. Dies er-
scheint bei der ersten Betrachtung sinnlos, man erkennt aber bald die Bedeutung solcher Dateien, wenn man sich zum Beispiel die Datei /var/log ansieht.
Exception File/Directory: Es kann durchaus vorkommen, dass Sie in Ihrem
Dateisystem einen Ordner haben, den Sie für äußerst wichtig halten, und ihn
daher als Read Only definieren. Manchmal kann es aber vorkommen, dass sich
in solch einem Directory eine Datei befindet, die auch beschrieben werden
muss. Sie haben nun die Möglichkeit, diese Datei als eine Ausnahme für diesen
Read-Only-Ordner zu definieren.
Protection Mounting/Umouting Dateisystem: Wenn Sie ein Dateisystem
schon beim Bootvorgang mounten, können Sie jedem User (inklusive Root)
verbieten, einen umount–Befehl auszuführen und damit dieses Dateisystem
abzuhängen. Sie können aber auch verhindern, dass durch das Einhängen
eines weiteren Dateisystems das ursprüngliche überschnitten bzw. überschrieben wird.
Wir werden an dieser Stelle nicht tiefer in die Materie von VFS oder den Sourcecode von LIDS bzw. vom Kernel eingehen, da es in diesem Buch nicht um die Programmierung eines IDS geht, sondern um den Einsatz eines solchen Systems. Im
Folgenden werden wir auf die Installation und auf die Konfiguration des LIDS im
Detail eingehen und versuchen, Ihnen die Möglichkeiten dieses mächtigen Tools
näher zu bringen.
1.1.2
Installation
Beschaffung
Bevor man ein Programm installieren kann, muss man es sich beschaffen. Dies ist ein
wichtiger Punkt, denn wer ein Programm installiert, sollte immer genau wissen, was
er installiert. Achten Sie daher bitte immer darauf, Ihre Programme nur von vertrauenswürdigen Quellen (offiziellen Websites etc.) zu beziehen, und überprüfen Sie die
(falls angegeben) md5sum. LIDS können Sie entweder von der Buchseite oder von
der offiziellen Homepage bzw. der deutschen Mirrorseite downloaden.
Deutsche Mirrorseite: http://www.de.lids/org/download
Hauptseite: http://www.lids.org/download
Sandini Bib
4
1 Intrusion Detection Systems
Voraussetzungen
Der wichtigste Bestandteil eines Linuxsystems ist der Kernel. LIDS funktioniert
am besten mit einem 2.2.X-Kernel, kann aber auch mit der 2.4er Reihe betrieben
werden. Ansonsten sind keine größeren Voraussetzungen mehr gegeben und wir
können uns an die Installation machen.
Installation
Laden Sie sich das Programm von einer der oben angegebenen Seiten herunter
und entpacken Sie es.
Linux:~# wget www.de.lids.org/download/lids-0.10.2.2.19.tar.gz
Linux:~# tar zxf lids-0.10.2.2.19.tar.gz
Linux:~# cd lids-0.10.2.2.19.tar.gz
Nachdem Sie das Paket entpackt haben, müssen Sie noch den Kernel patchen.
Linux:~# cp lids-0.10.2.2.19.patch /usr/src/linux
Linux:~# cd /usr/src/linux
Linux:~# patch –p1 < lids-0.10.2.2.19.patch
Bevor Sie Ihren Kernel konfigurieren, müssen Sie darauf achten, dass folgende
Punkte ausgewählt sind, da Sie ansonsten die LIDS-Optionen gar nicht erst zur
Auswahl erhalten.
[*] Prompt for development and/or incomplete code/drivers
[*] Sysctl Support
Nun können wir unseren Kernel konfigurieren. Welche Möglichkeiten Ihnen dabei offen stehen, werden Sie weiter unten erfahren. Doch zuvor möchte ich Sie bitten noch ein lokales Passwort (nächster Punkt) zu setzen, da ansonsten der
nächste Reboot in einer Kernelpanic endet.
Hinweis zu Version 0.9.12
Falls Sie vorhaben die Version 0.9.12 einzusetzen, beachten Sie bitte, dass Sie
hierbei noch Änderungen vornehmen müssen.
Sie müssen die Zeile CFLAGS= noch um den Eintrag –DLIDS_CONFIG ergänzen.
Um das Konfigurationsprogramm zu übersetzen geben Sie bitte folgende Befehle
ein.
Linux:~# cd ~/lids-0.10.2.2.19/lidsadm-0.10
Linux:~ make && make install
Sandini Bib
1.1 Linux Intrusion Detection System (LIDS)
5
Vor dem ersten Booten:
Bevor Sie das erste Mal booten, müssen Sie unbedingt noch ein LIDS-Passwort setzen, da der Bootvorgang ansonsten mit einer Kernelpanic endet. Sie brauchen dieses
Passwort auch zum Deaktivieren des LIDS oder um in das LFS zu wechseln. Für das
Setzen des lokalen Passwortes geben Sie bitte den folgenden Befehl ein:
Linux~:# lidsadm –P
Enter password:
Verifying enter password:
Wrote password into the files.
1.1.3
Konfiguration des Kernels
Nachdem wir ein lokales Passwort gesetzt haben, können wir uns getrost an die
Konfiguration des Kernels machen. Falls Sie sich fragen, warum wir das lokale
Passwort für diesen Schritt gesetzt haben, sei kurz erwähnt, dass ich früher genauso gedacht und das Passwort erst gesetzt habe, nachdem ich meinen Kernel
konfiguriert habe. Aber ein Stromausfall und ein damit verbundener Reboot
brachten mir viele Probleme ein. Seit diesem Zeitpunkt besitze ich auch daheim
eine USV und setze das Passwort so früh wie möglich.
Weiter oben haben wir bereits angesprochen dass man bei der Konfiguration des
Kernels unbedingt folgende Optionen aktivieren sollte:
[*] Prompt for development and/or incomplete code/drivers
[*] Sysctl Support
Um den Kernel zu konfigurieren geben Sie bitte folgende Befehle ein:
Linux:~# cd /usr/src/linux
Linux:~# make mrproper
Linux:~# make config
Da wir bei der Installation des Kernel gepatcht haben, bekommen wir nun folgende Option bei der Konfiguration angeboten:
*
* Linux Intrusion Detection System
*
Linux Intrusion Detection System support (EXPERIMENTAL)
(CONFIG_LIDS) [N/y/?] (NEW) Y
Kerneloptionen
Nun werden Sie einige der Kerneloptionen, die Ihnen bei der Konfiguration zur
Verfügung stehen, kennen lernen. Um die folgenden Features zu aktivieren,
beantworten Sie die Optionen mit »Y«.
Sandini Bib
6
1 Intrusion Detection Systems
(CONFIG_LIDS_HANGUP)
Terminal wird bei Sicherheitsverstoß geschlossen
(CONFIG_LIDS_SA_EXEC_UP)
Zeigt beim Bootvorgang alle Dateien an, bevor LIDS startet. Ermöglicht es, eingeschleuste Programme, die LIDS umgehen sollten, zu finden.
(CONFIG_LIDS_REMOTE_SWITCH)
Erlaubt auch Remote-Zugang, um LIDS zu aktivieren bzw. zu deaktivieren.
(CONFIG_LIDS_ALLOW_SWICH)
Erlaubt das Ein- bzw. Ausschalten von LIDS–Optionen während des Betriebs mittels eines Passworts.
(CONFIG_LIDS_NO_FLOOD_LOG)
Verhindert das Überfluten von /var durch wiederholende Logeinträge und gibt
die Möglichkeit, die Zeitperiode festzulegen, in der ein Logeintrag nicht wiederholt werden darf.
(CONFIG_LIDS_MAX_SACL)
Gibt an, wie viele ACL-Subjects maximal durch LIDS ermöglicht werden dürfen.
(CONFIG_LIDS_MAX_OACL)
Gibt an, wie viele ACL-Objects maximal durch LIDS geschützt werden dürfen.
(CONFIG_LIDS_EXEC_UP)
Verhindert das Booten des Systems, wenn ein nicht durch LIDS geschütztes Programm ausgeführt wird, bevor LIDS das System gesichert hat.
(CONFIG_LIDS_MAX_PROTECTED_PID)
Gibt an, wie viele Prozesse maximal durch LIDS geschützt werden dürfen.
(CONFIG_LIDS_MAX_INODE)
Gibt an, wie viele Objekte maximal durch LIDS geschützt werden dürfen.
(CONFIG_LIDS_SA_THROUGH)
Meldungen über Verstöße können direkt durch den Kernel an andere Hosts weitergeleitet werden.
Sandini Bib
1.1 Linux Intrusion Detection System (LIDS)
7
(CONFIG_LIDS_ALLOW_PROG_SWITCH)
Gibt an, ob außer /sbin/lidsadm noch andere Programme die Schutzfunktionen von
LIDS modifizieren können.
(CONFIG_LIDS_RELOAD_CONF)
Gibt an, ob die Konfigurationsdatei /etc/lids.conf im laufenden Betrieb geupdatet
werden kann.
(CONFIG_LIDS_PORT_SCAN_DETECTION)
Integriert einen Portscandetektor direkt in den Kernel, so dass verschiedene Scantechniken erkannt werden können. Funktioniert auch, wenn raw-socket-Operationen unterbunden wurden.
(CONFIG_LIDS_DEBUG)
Gibt ausführliche Debuginformationen aus
Nachdem Sie den Kernel mit diesen Kerneloptionen konfiguriert haben, können
Sie ihn kompilieren. Dazu geben Sie bitte folgende Befehle ein:
Linux:~# cd /usr/src/linux
Linux:~# make dep
Linux:~# make clean
Linux:~# make bzImage
Linux:~# cp arch/i386/boot/bzImage /boot/vmlinux-sec-2.2.19
Wenn Sie den neuen Kernel jetzt noch in den Bootmanager (/etc/lilo.conf) eintragen, werden Sie demnächst – dank LIDS, das Ihr System schützt – hoffentlich besser schlafen können.
1.1.4
Konfiguration von LIDS
Jetzt können wir uns endlich daran machen, unser IDS zu konfigurieren. Um
neue Regeln hinzuzufügen benutzen wir das Programm lidsadm. Im Folgenden
werden die Möglichkeiten, die man mit diesem Tool hat, anhand einer Befehlsübersicht verdeutlicht (Tabelle 1.1 bis Tabelle 1.3).
Befehle
Beschreibung
-A
Fügt einen Eintrag hinzu
-D
Löscht einen Eintrag
-Z
Löscht alle Einträge
Tabelle 1.1 Befehlsübersicht lidsadm
Sandini Bib
8
1 Intrusion Detection Systems
Befehle
Beschreibung
-U
Updatet dev/inode-Nummern
-L
Listet alle Einträge
-P
Setzen des Passwortes, um LISD zu deaktivieren
-S
Adminoperationen durchführen
-I
Wie -S, nur ohne Passwort
-h
Hilfe
Tabelle 1.1 Befehlsübersicht lidsadm (Forts.)
ACL-Optionen
Beschreibung
-s Subject
Beliebiges Systemprogramm
-o Object
Verzeichnis, Datei oder Device
-o [Capability-Object] –t
Alle Capabilities
-j target
Für Objects: READ, APPEND, WRITE, IGNORE
Für Capabilities: INHERIT, NO_INHERIT
Tabelle 1.2 Befehlsübersicht lidsadm
Admin-Optionen
Beschreibung
-S – [+|-] LIDS
Aktiviert oder deaktiviert LIDS
-S – [+|-] Capability
Aktiviert oder deaktiviert eine Capability
-S -- +RELOAD_CONF
Übernimmt Konfigurationsänderung während des Betriebs
Tabelle 1.3 Befehlsübersicht lidsadm
Welche Dateien soll ich schützen?
Im Grunde können nur Sie diese Frage beantworten. Stellen Sie aber lieber eine
Datei mehr unter die Fittiche von LIDS als eine zu wenig. Grundsätzlich sollten
Sie alle sensitiven Dateien sowie Verzeichnisse schützen. Dateien wie /etc/shadow
sollten auf jeden Fall geschützt werden, da ansonsten mit Hilfe eines Crackprogramms schnell Passwörter erraten werden können. Seien Sie bei solchen Aktionen aber vorsichtig, denn wenn Sie diese Datei vor allen Benutzern verstecken,
kann sich keiner mehr am System anmelden, da auch dem Loginprogramm /bin/
login der Zugriff verwehrt wird. In diesem Fall regelt das LIDS dieses Problem für
Sie, da es dem Loginprogramm die nötigen Rechte verleiht. Doch perfekt ist diese
Lösung immer noch nicht, denn jetzt kann kein Benutzer mehr sein Passwort ändern, da das Tool /usr/bin/passwd auch keinen Zugriff mehr auf /etc/shadow hat.
Man könnte zwar den ersten Schritt wiederholen und auch diesem Programm die
nötigen Rechte geben, aber dann könnte auch Root die Passwörter ändern und
Sandini Bib
1.1 Linux Intrusion Detection System (LIDS)
9
wir wären wieder beim alten Problem. In einem solchen Fall müssen Sie ganz klar
entscheiden, was für Sie wichtiger ist. Ein Schritt mehr in Richtung Sicherheit
oder Komforterhaltung für die Benutzer. Sie könnten – falls Sie sich für die Sicherheit entscheiden – zwar die Passwörter immer noch ändern, indem Sie LIDS dazu
beenden, aber bei einem System mit mehr als 100 Usern und gut durchdachten
Passwortrichtlinien, die vorschreiben, dass das Passwort alle 4 Wochen geändert
wird, gestaltet sich dieses Vorhaben als absolut indiskutabel.
Wie Sie sehen, hat auch im Falle von LIDS die Medaille zwei Seiten. Das sollte Sie
aber auf keinen Fall davon abhalten, wichtige Dateien oder Verzeichnisse wie
zum Beispiel /boot zu schützen. Der hierfür benötigte Befehl lautet:
Linux:~# lidsadm –A –o /boot –j READ
Beispiele:
Linux:~# lidsadm –s /home/jbrunner/ls \ -o /home/jbrunnner \ -j
READ
Diese Syntax (Ähnlichkeiten zu den IPCHAINS sind nicht zu übersehen) erlaubt
meinem ls-Programm den Lesezugriff auf mein Homeverzeichnis.
Linux:~# lidsadm –o /home/jbrunner \ -j DENY
Diese Syntax macht mein Homeverzeichnis für alle User unlesbar. Dies ist zwar
eine ziemlich sinnlose ACL, macht aber die Verwendung der Syntax deutlich.
Linux:~# lidsadm –S -- -RELOAD_CONF
Diese Syntax lädt während des Betriebs eine veränderte Konfiguration.
Linux:~# lidsadm –A –o /var/log –j APPEND
Wie wir weiter oben schon gesehen haben, bietet uns die Option APPEND die Möglichkeit eine Datei wachsen zu lassen, schützt dabei aber ihren schon vorhandenen Inhalt. Dieser Befehl ist besonders wichtig, da die meisten (intelligenten) Angreifer ihre Spuren in den Logfiles verwischen wollen. Dabei sollte man aber
beachten, dass das Programm logrotate nun auch keinen Schreibzugriff mehr hat
und die Rotation somit nicht mehr stattfinden kann. Mit dem folgenden Befehl
kann man diesen Missstand wiedergutmachen.
Linux:~# lidsadm –A –s /usr/sbin/logrotate –o /var/log –j WRITE
Um den geregelten Systemablauf komplett zu gewährleisten, sollten Sie den Systemprogrammen ebenso Schreibzugriff geben.
Linux:~# lidsadm -A –s /bin/login –o /var/log –j WRITE
Linux:~# lidsadm –A –s /usr/sbin/sendmail –o /var/log/sendmail.st
Sandini Bib
10
1 Intrusion Detection Systems
–j WRITE
Linux:~# lidsadm –A –o /etc/rc.d/init.d –j READ
Linux:~# lidsadm –A –s /etc/rc.d/init.d/halt –o /var/log –j WRITE
Linux:~# lidsadm -A –s /sbin/halt –o /var/log –j WRITE
Linux:~# lidsadm –A –s /sbin/init –o /var/log –j WRITE
Linux:~# lidsadm –A –s /bin/passwd –o /var/log j WRITE
LIDS beim Bootvorgang starten
Sie sind jetzt an einem Punkt angelangt, an dem LIDS einen wirklich wichtigen
und guten Part in Ihrer Verteidigung übernehmen kann. Damit es das aber auch
nach jedem Bootvorgang macht, müssen wir den Startbefehl lidsadm –I in das
Startskript der jeweiligen Distribution einbinden.
Im Falle eines RedHat-Systems müssen Sie die Datei /etc/rc.d/rc.local editieren, um
LIDS bei jedem Systemstart gleich mitzustarten. Der folgende Befehl erledigt das
für Sie:
Linux:~# echo lidsadm –I >> /etc/rc.d/rc.local
Bei SuSE-Systemen bereitet der nachfolgende Befehl Ihrem Leiden ein Ende:
Linux:~# echo lidsadm –I >> /etc/inittab
1.1.5
Capabilities
Anfangs haben wir die grundlegende Problematik mit dem Thema »Root« kennen gelernt. Wir haben gesehen, dass ein vergessenes Update einem lesefreudigen Angreifer die Chance gibt, ein Serverprogramm zu kompromittieren und sich
danach mit den Rechten des »gehackten« Servers im System zu bewegen. Nun
könnten Sie an dieser Stelle natürlich anbringen, dass man bei diesem Problem
schnell Abhilfe schaffen kann, indem man dem Server einfach keine Rootrechte
gibt. Leider ist die Lösung nicht immer umsetzbar. Zwar könnte man mit etwas
Herumbastelei die meisten Privilegien, die ein Programm braucht, auch ohne
Rootrechte verfügbar machen, doch mit herkömmlichen Bordmitteln scheitert
dieses Vorhaben meistens an der Belegung des Ports. So brauchen Programme,
die unter dem Port 1024 laufen müssen, Rootrechte, um dies zu realisieren.
Ein Heilmittel gegen die hier erwähnte Krankheit bieten die Capabilities. Mit Hilfe
von Capabilities kann man einem Programm die nötigen Privilegien geben, ohne
ihm dabei Rootrechte geben zu müssen. Man könnte quasi sagen, man spaltet die
Rootrechte auf, wirft sie in einen Topf und gibt jedem Programm die Rechte, die
es benötigt, um reibungslos zu funktionieren. Beim oben erwähnten Problem gibt
man dem Programm beispielsweise das Recht einen Port unter 1024 zu belegen.
Dabei ist zu beachten, dass der Standardlinuxkernel nur laufenden Prozessen Capabilities geben kann. Doch dies tangiert uns eher weniger, da unser Kernel mit
den LIDS-Funktionen erweitert wurde.
Sandini Bib
1.1 Linux Intrusion Detection System (LIDS)
11
Der folgende Befehl zeigt, wie man einem Programm namens dr.brunner die nötigen Rechte gibt, so dass es auch unter der magischen Portgrenze von 1024 eingesetzt werden kann.
Linux:~# lidsadm –s /home/jbrunner/dr.brunner \ -i -1 –o
CAP_NET_BIND_SERVICE \ -j GRANT
Mit den Capabilities kann man noch viel mehr bewerkstelligen. Eine komplette
Liste aller Capabilities finden Sie unter /usr/include/linux/capabilities.h. Natürlich
wollen wir diesen Punkt nicht ohne ein Beispiel abschließen. Im folgenden Listing
finden Sie den Befehl, der Prozesse in Ihrem System vor Programmen wie ps oder
top versteckt.
Linux:~# lidsadm –s /home/jbrunner/ls \ -i –1 –o
GRANT
CAP_HIDDEN \ -j
Eine weitere nützliche Konfigurationsdatei für Capabilities ist /etc/lids/lids.cap. In
diesem File sind alle Capabilities aufgelistet, die per Default verfügbar sind diejenigen, die hier nicht aufgeführt sind, können nur durch Sonderregelungen in den
ACLs vergeben werden. Um Capabilities verfügbar zu machen muss am Anfang
der Zeile ein + stehen und für die Deaktivierung ein -.
Noch ein Hinweis zum Schluss: Falls einige der Befehle auf Ihrem System nicht
funktionieren sollten, liegt das daran, dass sich die Befehlssyntax zwischen den
einzelnen LIDS-Versionen unterscheiden kann. Werfen Sie im Zweifelsfall doch
einfach einen Blick in die manpages.
Im Folgenden finden Sie einige Beispiele zu Capabilities. Die vollständige Liste
finden Sie in der Datei /usr/include/linux/capabilities.h.
Verfügbare Capabilities
Kurzbeschreibung
CAP_CHOWN
Chown(2), chgrp(2)
CAP_DEC_OVERRIDE
Dac access
CAP_DAC_READ_SEARCH
DAC read
CAP_FOWNER
Owner ID ungleich User ID
CAP_FSETID
Effective User ID ungleich Owner ID
CAP_KILL
Reale/Effective ID ungleich Process ID
CAP_SETGID
Setgid(2)
Tabelle 1.4 Beispiele zu Capabilities
Sandini Bib
12
1.1.6
1 Intrusion Detection Systems
Das System anpassen
Wir haben weiter oben schon gesehen, dass es beim Einsatz von LIDS zu Problemen kommen kann, da die meisten Verzeichnisse geschützt sind, so dass einige
Programme keine Schreibrechte mehr haben und deswegen eventuell ihren Job
nicht mehr verrichten können, was wiederum das System bremsen oder sogar
stoppen kann. Um dies zu verhindern muss man sein System genau anpassen. Da
das von der Distribution abhängt, können wir an dieser Stelle schlecht auf diese
Fehlersuche eingehen. Deshalb bitten wir Sie bei Problemen mit LIDS einen Blick
auf die Website des Buchs zu werfen oder schreiben Sie mir einfach eine E-Mail.
1.1.7
LIDS außer Kraft setzen
Nachdem nun das LIDS installiert und konfiguriert ist, haben Sie möglichen Angreifern das Leben wirklich erschwert. Doch nicht nur Hacker leiden unter den
von Ihnen vorgenommenen Veränderungen, auch Sie werden sie ab und zu zu
spüren bekommen. Denn trotz aller Sicherheit, bleibt ein System lebendig und bedarf einer Menge Pflege und Administration. Mit einem LIDS an Bord sind die
Zeiten des fröhlichen Administrierens vorbei. Wie ganz am Anfang schon erwähnt ist es das Ziel eines IDS, die Privilegien von Root einzuschränken, um den
Schaden an Ihrem System möglichst gering zu halten, falls es tatsächlich einmal
zu einem erfolgreichen Einbruch kommen sollte. Aber nicht nur Angreifer werden gehindert bestimmte Dateien zu editieren, auch Sie als Administrator können
nicht mehr wie gewohnt agieren. Doch auch hier bietet das LIDS eine Lösung. Sie
haben die Möglichkeit mit Hilfe des LIDS-Passwortes einen Terminal von LIDS
»zu befreien« und können dort anschließend wie gewohnt arbeiten. Sie befinden
sich dann in der LIDS Free Session (LFS). Der Befehl hierfür lautet:
Linux:~# lidsadm –S -- -LIDS
Für einfachere Administrationsaufgaben ist diese Methode sicherlich am besten
geeignet, doch stößt sie bei komplexeren Arbeiten schnell an ihre Grenze. Einige
Aufgaben bedingen das Verlassen der aktuellen Shell (z.B. Service neu starten,
Reboot … .) und verlassen damit auch das LFS. Um dieses Problem zu lösen bleibt
Ihnen nichts anderes übrig als das LIDS zu deaktivieren. Dies erreichen Sie mit
dem folgenden Kommando:
Linux:~# lidsadm –S -- -LIDS_GLOBAL
Jetzt haben Sie die Möglichkeit so zu arbeiten, wie Sie es aus LIDS-losen Zeiten
gewohnt sind.
Sandini Bib
1.2 Snort
1.1.8
13
Wenn nichts mehr geht
Es kann durchaus einmal vorkommen, dass man sich verkonfiguriert. Es soll
auch schon Administratoren gegeben haben, die ihr System so sicher gemacht haben, dass nicht mal mehr sie selbst Zugriff darauf hatten. Falls Ihnen das einmal
mit LIDS passieren sollte, ist dies noch kein Beinbruch. Natürlich gibt es auch
hierfür die passende Syntax.
Geben Sie in einem solchen Fall einfach Ihrem Bootmanager (lilo) folgende Parameter:
Security=0
Danach sollten Sie ohne Probleme in Ihr System kommen um das Missgeschick
wiedergutzumachen.
1.2
Snort
Snort ist ein Network Intrusion Detection System (NIDS) und fungiert – wie der
Name schon erkennen lässt – im Netzwerk. Die Größe des Netzwerks kann dabei
vom kleinen SOHO bis zum mittelgroßen Firmennetzwerk variieren. Wichtiger
als die Größe des Netzwerks ist die Positionierung. Grundsätzlich hat man dabei
die Wahl, das NIDS vor oder hinter der Firewall zu installieren. Falls Sie jetzt
nicht wissen, wo Sie Snort gerne einsetzen würden, wägen Sie doch einfach die
Vor- und Nachteile ab.
Vor der Firewall bekommt Ihr NIDS alle Angriffe gegen Ihr Netzwerk voll mit.
Dies hat aber auch den Nachteil, dass ein Hacker direkt das IDS angreifen kann.
Falls Sie Snort hinter der Firewall einrichten, ist es vor direkten Angriffen zwar
geschützt, bekommt aber nur die Angriffsversuche mit, die durch die Firewall
hindurch kommen. Außerdem können Sie – bei einem internen Einsatz – zusätzlich noch den Netzwerkverkehr überwachen, was immer wichtiger wird, da ca.
80 % aller Angriffe aus dem internen Netz kommen.
1.2.1
Funktionsweise
Um zu erklären, wie Snort funktioniert, sollten wir als Erstes einmal einen Blick auf
die Möglichkeiten werfen, die wir mit Snort haben. Dieses mächtige Tool vereint
mehrere praktische Werkzeuge in sich. Zum einen kann es als Paketsniffer fungieren
(ähnlich zu tcpdump). Des Weiteren haben Sie mit diesem NIDS einen Paketlogger
zur Verfügung, der Ihnen bei der Analysierung Ihres Netzwerkverkehrs enorm weiterhelfen kann. Natürlich ist Snort aber auch ein hervorragendes Network Intrusion
Detection System, das sich bestens eignet, um Angriffe zu erkennen.
Sandini Bib
14
1 Intrusion Detection Systems
Um solche Angriffe zu erkennen, vergleicht Snort mögliche Angriffe mit einem
gespeicherten Muster und schreibt erkannte Angriffe dann in ein Logfile. Dabei
bietet Snort eine durchaus sehenswerte Bandbreite an Angriffsarten an, die es erkennen kann. So werden Sie zum Beispiel über mögliche CGI-Angriffe, Bufferoverflow-Attacken oder versteckte Scans durch eine Zeile im Logfile informiert.
Wie Sie erkennen können, werden Sie nicht direkt von Snort selbst benachrichtigt,
wenn ein Angriff stattgefunden hat. Dies ist ein Missstand den man unbedingt
beseitigen sollte, da der Administrator stets über Gefahren, die sein Netzwerk betreffen, informiert werden sollte. Da wir aber alle mit einem vernünftigen Betriebssystem arbeiten (nämlich Linux), sollte dies kein Problem sein.
Es gibt für dieses Problem mehrere Lösungen. Den ersten Lösungsansatz bietet
uns Snort selbst. Bei der Erstellung des Programms könnten wir zum Beispiel die
Option –enable-smbalerts aktivieren und gäben Snort somit die Möglichkeit
Nachrichten über SMB zu verschicken Da diese Methode aber sehr unsicher ist,
wollen wir an dieser Stelle nicht weiter darauf eingehen. Das Beste ist, Sie basteln
sich eine hausgemachte Lösung. Bevor Sie sich aber an die Implementierung einer
solchen Lösung machen, müssen Sie sich erst über einen kleinen Nachteil von
Snort klar werden. Da bei diesem NIDS der Sensor und die Detection-Routine fest
miteinander verbunden sind, muss auf jedem Host, der es betreibt und damit einen Teil des Netzwerks überwacht, ein unabhängiges Snortsystem installiert sein.
Womit ein weiteres Problem ins Spiel kommt. Wie wir schon gesehen haben,
kann Snort Sie nicht direkt alarmieren, falls ein möglicher Angriff im Gange ist,
sondern schreibt diese Nachricht in ein Logfile. Da Sie aber bei größeren Netzwerken (zum Beispiel mit Switches) mehrere Systeme am Laufen haben, haben
Sie gleichzeitig auch mehrere Logfiles zu überwachen.
Das zweite Problem können Sie lösen, indem Sie einen zentralen Logfileserver anlegen, dem alle NIDS ihre Meldungen erstatten. Nun bleibt aber immer noch das
erste Problem der fehlenden Benachrichtigung. Zur Beseitigung dieses Problems
stellt uns die Open-Source-Gemeinde einige brauchbare Tools zur Verfügung. So
können Sie zum Beispiel mit einem Logfile-Analyseprogramm die gesammelten
Nachrichten auswerten und Ihnen dann über ein Pagerprogramm (zum Beispiel
yet another pager software) eine SMS mit bestimmten Daten über den Angriff auf
Ihr Handy schicken lassen. Sobald Sie dies nach Ihren Bedürfnissen erledigt haben, steht Ihnen mit Snort ein mächtiges NIDS zur Verfügung, das dazu auch
noch unglaublich stabil läuft und leicht zu konfigurieren ist.
1.2.2
Installation
Im Gegensatz zu LIDS beinhalten die meisten Distributionen Snort. Die einfachste Möglichkeit Ihr System mit einem NIDS auszustatten ist daher, den Installationsassistenten Ihrer Distribution aufzurufen und das Paket snort zu installieren. Der Nachteil hierbei ist, dass es durchaus vorkommen kann, auf diesem Weg
eine veraltete Version von Snort zu bekommen, die eventuell einige Sicherheits-
Sandini Bib
1.2 Snort
15
lücken aufweist. Es gibt drei Wege, um sicherzustellen, dass Ihr System auf dem
neuesten Stand ist. Der erste Weg führt Sie in das Internet, dort besuchen Sie die
Seite www.snort.org und erkundigen sich nach der Aktualität Ihrer Version. Der
zweite führt Sie auf die Seite www.securityfocus.com. Dort überprüfen Sie, ob für
die von Ihnen verwendete Version Bugs bekannt sind und installieren gegebenenfalls den Patch dafür. Die dritte Anlaufstelle ist die offizielle Website Ihrer
Distribution, wo Sie sich ebenfalls über die Aktualität und Sicherheit Ihrer Version erkundigen können.
Falls aber Ihre Distribution Snort nicht mitführt, dann sollten Sie sich die aktuelle
stabile Version von der offiziellen Seite www.snort.org oder von der Buchseite
downloaden. Sollten Sie das Pakete über den Installationsassistenten oder über
den Paketmanager installieren, können Sie diesen Punkt überspringen. Im Falle
des Downloads befolgende Sie bitte folgende Anweisung für die Installation:
Da die Macher von Snort Weitblick besitzen, haben sie sich entschlossen, Ihr Sicherheitsprogramm plattformunabhängig zu schreiben. Um dies zu realisieren
wurde als Basis für Snort ein systemunabhängiges Interface von der Network
Research Group des Lawrence Berkeley National Laboratory namens libpcap
benutzt. Damit Snort also auf Ihrem System funktioniert, müssen Sie als Erstes
libpcap installieren.
Linux:~# wget ftp://ftp.ee.lbl.gov/libpcap.tar.Z
Linux:~# tar zxf lip
Linux:~# cd li
Linux:~# make
Linux:~# make install
Linux:~# mkdir /usr/local/include
Linux:~# mkdir /usr/local/include/net
Linux:~# make install-incl
Linux:~# wget www.snort.org/releases/snort-1.8.3.tar.gz
Linux:~# tar zxf snort-1.8.3.tar.gz
Linux:~# cd snort-1.8.3
Linux:~#./configure
Linux:~# make
Linux:~# make install
Optionen
Wenn Sie die Seite www.snort.org/releases besuchen, werden Sie feststellen, dass es
eine Reihe von Zusatzprogrammen, Zusatzlibs und Zusatzoptionen gibt. Wir
werden an dieser Stelle nicht auf diese Programme und Optionen eingehen, da
sich die meisten noch nicht bewährt haben oder (wie im Falle der SMB–Benachrichtigung) nicht sicher sind. Falls Sie dennoch einige Optionen bei der Erstellung
des Programms aktivieren wollen, so installieren Sie bitte noch die dazugehörige
Lib. Die nötigen Informationen dazu finden Sie unter der oben angegebenen Internetadresse.
Sandini Bib
16
1.2.3
1 Intrusion Detection Systems
Optionen
Snort ist ein kommandozeilenorientiertes Programm und ist deswegen sehr leicht
zu konfigurieren. Es bietet eine Menge Optionen, die Sie benutzen können, um
Ihr System korrekt und nach Ihren Bedürfnissen zu konfigurieren. In Tabelle 1.5
sehen Sie die verschiedenen Befehle für Snort.
Option
Beschreibung
-A [alert mode]
Bei Snort stehen insgesamt sechs alert-Modi zur Verfügung. Vier davon
kann man über diese Option aktivieren:
fast – Dieser Modus erzeugt einen einfachen Eintrag in das spezifizierte
Logfile. (der Eintrag besteht aus: timestamp, Alarmnachricht, Quell- und
Ziel IP/Ports
full – Dies ist der Defaultmodus und schreibt den Paketheader und dessen Beschreibung in das spezifizierte Logfile
none – Keine Benachrichtigung
unsock – Dieser Modus sendet die Nachricht an einen Unix-Socket, auf
den ein anderes Programm »horchen« kann.
Die beiden anderen Modi syslog und smb kann man über diese Option
nicht aktivieren.
-a
Hierbei handelt es sich um die Funktion, die auch Address Resolution Protocol-Pakete anzeigt (ARP).
-b
Diese Option ermöglicht es ohne Probleme auch Netzwerke mit großer
Bandbreite (zum Beispiel 100 Mbps) abzuhören, da hierbei die gesammelten Daten nicht mehr von ihrer binären Form in das ASCII-Format umgewandelt werden, sondern ähnlich zu tcpdump gespeichert werden. Diese
Option erhört die Performance merkbar.
-c [rules]
Nach dem Optionsparameter -c muss hier eine Datei folgen, in der Filterregeln angegeben sind.
-C
Hierbei werden alle Hexadezimalinformationen in einem Paket ignoriert
und nur die Textinformationen angezeigt.
-d
Daten werden auf Applikationsebene gespeichert.
-D
Verwendet man diese Option, läuft Snort als Daemon im Hintergrund und
speichert die Alertmeldungen in der Datei /var/log/snort.alert.
-e
Zeigt und protokolliert Pakete, die auf der zweiten Schicht agieren (Ethernet-Paket-Header)
-F [bpf]
Mit dieser Option werden die BPF-Filter aus der Datei, die nach der Option
-F angegeben wird, gelesen.
-g [gname]
Falls Sie Snort keine Rootrechte geben wollen, können Sie es mit dieser
Option in eine andere Gruppe verfrachten. Snort läuft dann unter der
Gruppe, die Sie nach dem -g angeben.
-h [hn]
Benutzen Sie diesen Befehl, wenn Sie das interne Netzwerk (hn = home
network), in dem Snort laufen soll, angeben wollen.
Tabelle 1.5 Befehle Snort
Sandini Bib
1.2 Snort
17
Option
Beschreibung
-i [if]
Geben Sie hier das Netzwerkinterface an, das Snort in die Überwachung
mit einbeziehen soll.
-l [ld]
Hier können Sie ein Verzeichnis spezifizieren, das Snort als Logverzeichnis
verwenden wird, um dort zukünftig alle Nachrichten für Sie zu hinterlassen. Als Defaultverzeichnis benutzt Snort /var/log/snort.
-N
Wenn Sie diese Option verwenden, wird Snort nicht mehr protokollieren.
Die Alarmnachrichten funktionieren aber weiterhin.
-o
Um die Reihenfolge, in der Pakete die Regeln durchlaufen, von Alert-PassLog auf irgendeine andere zu ändern, benutzen Sie diesen Befehl.
-O
Falls Sie die Absicht haben, die IP-Adressen durch xxx.xxx.xxx.xxx zu
ersetzen, können Sie das mit dieser Option tun. Falls Sie aber nur die internen Adressen ersetzen wollen, verwenden Sie dazu bitte zusätzlich die
Option -h, denn dadurch bleiben die externen IP-Adressen unberührt.
-p
Promiscuous-mode wird im Sniffer deaktiviert.
-q
Mit dieser Option erreichen Sie, dass beim Start keine Banner und Statusreports angezeigt werden.
-r [tf]
Benutzen Sie diese Option um ein tcpdump File einzulesen.
-s
Nachdem Sie diese Option aktiviert haben, wird Snort alle Alert-Nachrichten in die normalen Systemlogfiles schreiben.
-S [n=v]
Diese Option wird der Wert von n in den Wert von v verwandelt.
-t [chrt]
Ändert das Rootverzeichnis von Snort in das angegebene Verzeichnis.
-u [uname]
Ähnlich zu der Option -g wird auch hier Snort der Rootstatus nicht vergönnt. Mit dieser Option können Sie die User ID ändern, unter der Snort in
Zukunft laufen soll.
-v
Man sollte diese Option nur zu Testzwecken verwenden, da hierbei alle
Pakete auf die Standardausgabe (zumeist der Monitor) ausgegeben werden
und dies führt zu enormen Performanceeinbußen, die wiederum verursachen können, dass einige Pakete verloren gehen.
-V
Gibt die Versionsnummer an
-?
Ruft die Hilfefunktion auf
-M [smb]
Falls man bei der Erstellung des Programms die Option –enable-smbalerts aktiviert hat, so kann man mit dieser Option eine Datei übergeben,
aus der alle Rechnernamen gelesen werden, die über WinPopup über eventuelle Zwischenfälle informiert werden sollen.
-n [count]
Sobald die Zahl, die Sie hinter dieser Option angeben, erreicht wird, sprich
sobald n Pakete angekommen sind, wird Snort deaktiviert.
Tabelle 1.5 Befehle Snort (Forts.)
Sandini Bib
18
1 Intrusion Detection Systems
Beispiele:
Linux:~# snort –c snort.conf –l ./log –s –h 192.168.1.0/24
Mit dieser Option schreibt Snort die gesammelten Daten in die Defaulteinstellung
und schickt Alarmnachrichten zu den regulären Systemlogdateien.
Linux:~# snort –b –A fast –c snort.conf
Dies ist ein möglicher Snortaufruf, wenn Sie ein sehr schnelles Netz (100 Mbps)
überwachen wollen. Die gesammelten Daten werden hierbei einem Format ähnlich zu tcpdump gespeichert.
Linux:~# snort –d –h 192.168.1.0/24 –l ./log –c snort.conf –o
Mit dieser Option erreichen Sie, dass sich die Reihenfolge, in der Pakete die Regeln durchlaufen, von Alert-Pass-Log auf Pass-Alert-Log ändert.
1.2.4
Regeln entwerfen
Wie ist eine Regel formatiert?
Wie wir wissen, ist Snort kommandozeilenorientiert. Das beinhaltet auch, dass
die Regeln über die Konsole eingegeben werden. Natürlich muss man dafür ein
bestimmtes Format einhalten, da Snort sonst die Regeln nicht anerkennt und sie
verwirft. Achten Sie also immer darauf, dass die Formatierung stimmt.
Grundsätzlich sollte man eine Regel in einer Zeile verfassen, da ansonsten die Gefahr besteht, dass man sich durch die Zeilenumbrüche mit der Formatierung
»vertut« und somit die Regel nicht anerkannt wird. Falls man eine Regel über
mehrere Zeilen eingeben will, so muss man am Ende einer Zeile einen Backslash
anbringen. Aber seien Sie vorsichtig, Sie können Regeln nur über mehrere Zeilen
eingeben, wenn Sie eine Version von Snort besitzen, die jünger als 1.8 ist. Falls Sie
einen Version benutzen wollen (aus welchen Gründen auch immer), die vor 1.8
erschienen ist, so müssen Sie die Regeln in einer Zeile abgehandelt haben.
Welche Bestandteile besitzt eine Regel?
Zuerst einmal sollten wir an dieser Stelle erklären, wofür eine Regel gebraucht
wird. Eingangs haben wir festgestellt, dass Snort mögliche Angriffe anhand eines
Mustervergleichs erkennt. Das heißt, Snort vergleicht alle einkommenden Pakete
mit den Filterregeln in seiner Datenbank und sucht nach Übereinstimmungen.
Falls es eine solche Übereinstimmung gefunden hat, kann man davon ausgehen,
dass ein Angriff stattfindet. Sie können nun mit der Eingabe neuer Regeln erreichen, dass Snort mit jeder neuen Regel, die Sie eingeben, klüger wird und immer
mehr Angriffsarten erkennen kann. Dabei entscheiden Sie, was Sie als Spielerei
einiger Jugendlicher sehen und was als ernsthaften Angriff. Snort trifft dann diese
Unterscheidung anhand Ihrer Filterregeln.
Sandini Bib
1.2 Snort
19
Um die Bestandteile einer solchen Regel herauszufinden, schauen wir uns am
besten eine von Martin Roesch erstellte Beispielregel an und zerlegen diese in Einzelteile:
alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|";
msg:"mountd access";)
An dieser Beispielregel lassen sich zwei essentielle Bestandteile einer Filterregel
erkennen. Der Teil alert tcp any any -> 192.168.1.0/24 111 entspricht dem
Header und der Teil (content_"|00 01 86 a5|"; msg:"mountd access";)
stellt den Optionsbereich dar. Dabei sollte man beachten, dass man den Optionsbereich nicht unbedingt braucht, damit eine Regel konform ist und von Snort akzeptiert wird. Genaueres dazu werden wir später noch erfahren.
Im Folgenden werden Sie alle möglichen Bestandteile einer Regel inklusive einer
kurzen Beschreibung kennen lernen. Dabei bedienen wir uns der Beispiele und
Ausführungen von Martin Roesch, dem ich hiermit danken möchte.
Der Header
Der erste Bestandteil eines Headers ist die Regelaktion. Insgesamt hat man dabei
fünf davon zur Auswahl:
alert: Generiert einen Alarm nach der vordefinierten Warnmeldung und
schreibt das Paket dann schließlich in das entsprechende Logfile
log – Loggt das Paket
pass – Ignoriert das Paket
activate – Schlägt Alarm und aktiviert danach eine andere dynamische Regel
dynamic – Bleibt untätig, bis es von einer aktivierten Regel aktiviert wird, und
fungiert dann als Logregel
Mit Snort haben Sie aber auch die Möglichkeit Ihre eigenen Regeltypen zu definieren und diese dann mit einem oder mehreren Outputplugins zu verbinden.
Danach können Sie diese als Regelaktionen in Snortregeln verwenden. Hierzu
einige Beispiele von Martin Roesch:
Das erste Beispiel wird einen Typ definieren, der nur in tcpdump loggt.
ruletype suspicious
{
type log output
log_tcpdump: suspicious.log
}
Sandini Bib
20
1 Intrusion Detection Systems
Das zweite Beispiel wird einen Typ definieren, welcher in die regulären Systemlogdateien und in eine MySql-Datenbank loggen wird.
rulytype redalert
{
type alert output
alert_syslog: LOG_AUTH LOG_ALERT
output database: log, mysql, user=snort dbname=snort
host=localhost
}
Das Protokoll
Das nächste Feld beschreibt das Protokoll. Zurzeit stehen uns für dieses Feld vier
Protokolle zur Verfügung: tcp, udp, icmp, ip. Aber schon bald werden Sie auch
Protokolle wie: ARP, IGRP, GRE, OSPF, RIP, IPX in dieses Feld mit aufnehmen
können.
IP-Adressen und Ports
Im darauf folgenden Feld werden die IP-Adressen und Ports beschrieben, man
kann hier für die Gesamtheit aller IP-Adressen das Schlüsselwort any setzen. Bitte
geben Sie immer eine IP-Adresse an und niemals den dazugehörigen Hostnamen,
da Snort einen CDIR-Block benutzt, um die Netmask zu beschreiben. Verwenden
Sie also für Klasse C Netzwerke /24, für Klasse B Netzwerke /16 und für einzelne
Hosts /32. Snort verfügt außerdem noch über einen !-Operator, der es Ihnen
ermöglicht, bestimmte IP-Adressen von der Überwachung auszuschließen.
Im vorangegangenen Abschnitt haben wir gesehen, dass die Formatierung der
Snortregeln Wildcards zulässt. So können Sie zum Beispiel any angeben, wenn
Sie alle IP-Adressen oder Ports einbinden wollen. Falls Sie eine bestimmte Range
angeben wollen, benutzen Sie bitte den :-Operator (Formatierung x : y). Der
Richtungsoperator gibt die Richtung des jeweiligen Netzwerkes an, so bedeutet
->, dass auf der linken Seite die Quellinformationen (IP-Adressen und Ports)
und auf der gegenüberliegenden Seite die Zielinformationen zu finden sind.
Man kann auch beide Richtungen mit einbinden, indem man den <> Operator
verwendet.
Optionsbereich
Ein weiterer Bestandteil (vielleicht sogar der mächtigste) ist der Optionsbereich.
Im Folgenden werden wir dieses Schmuckstück von Snort kennen, und verstehen
lernen. Zuvor sei an dieser Stelle aber noch kurz die Formatierung des Optionsbereichs erklärt. Alle unten aufgeführten Optionen werden durch ein Semikolon
voneinander getrennt. Wenn Sie die Optionen von ihren zugehörigen Argumenten trennen wollen, benutzen Sie bitte einen Doppelpunkt. Die verfügbaren Optionen finden Sie in Tabelle 1.6.
Sandini Bib
1.2 Snort
21
Optionen
Beschreibung
Msg
Schreibt eine Nachricht in die Alarm- und Paketlogdateien
Logto
Loggt das Paket in eine vom User spezifizierte Datei anstatt ins Standardoutputfile.
Ttl
Testet den TTL-Wert des IP-Headers
Tos
Testet den TOS-Wert des IP-Headers
Id
Hierbei wird die Fragment-ID des IP-Headers auf einen bestimmten Wert
hin überprüft.
Ipoption
Sucht in den IP-Optionsfeldern nach einem bestimmten Code.
Fragbits
Überprüft die Fragmentations-Bits des IP-Headers
Dsize
Testet die Größe eines Pakets anhand eines bestimmten Werts
Flags
Testet die TCP-Flags auf bestimmte Werte
Seq
Testet die TCP-Sequenznummer auf einen bestimmten Wert
Ack
Testet das TCP-ACK-Feld auf einen bestimmten Wert
Itype
Testet das ICMP-Typefeld anhand eines bestimmten Werts
Icode
Testet das ICMP-Codefeld anhand eines bestimmten Werts
Icmp_ip
Testet das ICMP_ECHO_ID-Feld anhand eines bestimmten Werts
Icmp_seq
Testet die ICMP_ECHO-Sequenznummer anhand eines bestimmten Werts
Content
Durchsucht den Inhalt eines Pakets nach einem bestimmten Muster
Content_list
Sucht nach einer bestimmten Musterfolge im Inhalt eines Pakets
Offset
Eine Modifikation der content-Option in Hinblick auf den Beginn der Suche
Depth
Eine Modifikation der content-Option in Hinblick auf das vorzeitige Ende
der Suche
Nocase
Deaktiviert case-sensitiv und unterscheidet daher keine Groß- und Kleinschreibung mehr
Session
Schreibt aus einem gegebenen Grund bestimmte Eingaben im Application
Layer mit
Rpc
Überwacht RPC-Dienste auf bestimmte Application/Precedure-Calls
Resp
Aktive Antwort (zum Beispiel: Verbindung beenden)
React
Aktive Antwort (zum Beispiel: Webseiten blocken)
Reference
Externe Angriffsreferenz
Sid
Snort Regel-ID
Rev
Regelkorrekturnummer
Classtype
Identifiziert die Klassifikation der Regel
Priority
Identifiziert die Strenge der Regel
Tabelle 1.6 Verfügbare Optionen
Sandini Bib
22
1 Intrusion Detection Systems
Optionen
Beschreibung
Uricontent
Sucht nach einem Muster in einem Teil einer URL
Tag
Fortgeschrittene Loggingaktionen für Regeln
Ip_proto
IP-Header Protokollwert
Sameip
Überprüft, ob die Quell-IP-Adresse mit der Ziel-IP-Adresse übereinstimmt
Stateless
Gültig, egal was der Streamstatus sagt
Regex
Wildcard für Mustererkennung
Tabelle 1.6 Verfügbare Optionen (Forts.)
Nachdem Sie die möglichen Optionen kurz anhand einer Tabelle einsehen konnten, werden wir uns jetzt an die Beschreibung der einzelnen Optionen machen
und einige Beispiele dazu sehen.
Mit der msg-Option können Sie den String ändern, den Snort bei Nachrichten
in die Logfiles schreibt.
msg: "<Nachrichtentext>";
Mit der Logto-Option kann man für jede betreffende Regel ein eigenes Logfile angeben. Diese Option funktioniert nicht, wenn Snort im Binarymodus
loggt.
logto: "<Logingdatei>";
Anhand der ttl-Option kann man einen bestimmten Time-To-Live-Wert setzen, auf den dann die Pakete überprüft werden. Diese Option ist nur erfolgreich, wenn der TTL-Wert exakt mit dem aus dem Paket übereinstimmt.
ttl: "<Time-To-Live-Wert>";
Mit der tto-Option kann man den IP-Header auf einen bestimmten TOS-Wert
überprüfen, der wiederum nur bei exakter Übereinstimmung anschlägt.
tos: "<TOS-Wert>";
Die id-Option einen Test bezüglich des Fragment-ID-Feldes im IP-Header
durchzuführen. Da viele »Hacker« Standardtools verwenden, die frei im Internet erhältlich sind, wird diese Option – wenn sie zum Beispiel auf einen bekannten Wert wie 31337 gesetzt wird – oft anschlagen.
id: "<Wert>";
Sandini Bib
1.2 Snort
23
Falls in einem Paket IP-Optionen gesetzt sind, kann man mit dieser Option nach
bestimmten Argumenten suchen. Eine lohnende Option ist zum Beispiel »Loose
source routing«. Einige dieser Argumente sind im Folgenden aufgeführt.
Ipoption: <IP-Option>;
rr – Recorded Route
eol – End of List
nop – No Op
ts – Time Stamp
sec – IP security Option
lsrr – Loose source routing
ssrr – Strict source routing
satid – Stream identifier
Die fragbits-Option untersucht die fragment bits und die reserved bits im IPHeader. Dabei kann man zum Beispiel nach einem reserved bit (RB), more fragment bit (MF) oder nach einem don`t fragment bit (DF) suchen. Um diese Bits anzuzeigen benutzen Sie bitte die folgenden Größen:
*R – Reserved bit
*D – Don’t fragment bit
*M – More fragment bit
Für diese Option stehen Ihnen zusätzlich noch einige Operatoren zur Verfügung:
*+ – All Flag – Schlägt an, wenn das angegebene und mehr Bits gesetzt sind.
** – Any Flag – Trifft zu, wenn irgendeines der angegebenen Bits gesetzt ist.
*! – No Flag – Schlägt an, wenn keines der angegebenen Bits gesetzt ist.
fragbits: "<Bit-Größen>";
Da diese Option etwas komplexer zu handhaben ist, werden wir uns die Syntax
anhand einer Beispielregel verdeutlichen.
alert tcp !$HOME_NET any -> $HOME_NET any (fragbits: R+;
msg: "Reserved Bit ist gesetzt";)
Die dsize-Option erlaubt es einem, die Größe eines Pakets zu prüfen. Auch hier
kann man – zum Beispiel um bestimmte Bereiche und Grenzen zu setzen – bestimmte Operatoren wie < und > setzen. Diese Option kann sehr nützlich sein,
wenn Sie Bufferoverflow-Attacken erkennen wollen. Dazu müssen Sie lediglich
die Puffergröße des anfälligen Programms kennen und können nun die Option
auf diesen Wert setzen, um rechtzeitig einen Angriff zu erkennen. Zwar könnte
Sandini Bib
24
1 Intrusion Detection Systems
man dies auch mit der content-Option erreichen, doch bietet die dsize-Option
eine wesentlich höhere Performance.
dsize: "[<|>] <Wert>";
Die content-Option stellt eine der wichtigeren Optionen von Snort dar. Mit ihrer
Hilfe kann man den Inhalt eines Paketes nach bestimmten – vom User angegebenen – Werten durchsuchen. Snort antwortet dann aufgrund dieser Daten. Wenn
die Suche erfolgreich ist – das heißt, wenn der vom User angegebene String irgendwo im Paket zu finden war, dann wird der Rest der Suche gestartet. Dabei
müssen Sie unbedingt auf Groß- und Kleinschreibung achten, wobei das zu suchende Muster Textstrings oder aber auch binäre Daten sein können. Falls Sie
nach binären Daten suchen wollen, müssen Sie diese in Byteform angeben und
zwischen zwei Pipes einschließen. Auch hier ist wieder eine Negierung durch
den !-Operator möglich. Versuchen Sie sich die Syntax dieser Option anhand des
folgenden Beispiels zu verdeutlichen.
content: [!] "<contentstring>";
alert tcp any any -> 192.168.1.0/24 143 (content: "|90C8 C0FF
FFFF|/bin/sh";
msg: "IMAP Bufferoverflow";)
Ein weiteres Beispiel soll Ihnen den Negierungsfaktor näher bringen.
alert tcp any any -> 192.168.1.0/24 21 (content: !"|GET"; depth:
3; nocase; dsize: > 100; msg: "Long Non-FTP-GET Befehl";)
Die offset-Option ist eine Modifikation, die Sie bei Regeln benutzen können, in
denen Sie die content-Option nutzen. Sie können diese Möglichkeit sinnvoll nutzen, wenn Sie zum Beispiel CGI-scans erkennen wollen, da sich diese Angriffe niemals in den 4 Bytes erkennen lassen. Daher ist es sinnvoll, dass Sie die offset-Option benutzen, um der content-Option beizubringen, dass sie diesen Bereich nicht
scannen soll.
offset: "<Wert>";
Die nächste Erweiterung der content-Option stellt depth dar. Bei der offsetOption haben wir gesehen, dass Sie den Startpunkt verändern können, depth bietet
Ihnen nun die Möglichkeit den vorzeitigen Endpunkt der Suche anzugeben. Dies
erscheint besonders sinnvoll, wenn Sie ein Paket nach dem String »cgi-bin/phf«
durchsuchen, da es bei einer solchen Suche nicht nötig ist selbige nach den ersten
20 Bytes fortzusetzen. Wieder werden wir diese Option anhand eines Beispiels
illustriert sehen.
depth: "<Wert>";
alert tcp any any -> 192.168.1.0/24 8080 (content: "cgi-bin/phf";
offset: 3; depth: 22; msg "CGI-PHP Angriff";)
Sandini Bib
1.2 Snort
25
Die nocase-Option ermöglicht Ihnen das Abschalten des case-sensitiv in der content-Option. Das heißt, dass nicht mehr zwischen Groß- und Kleinschreibung
unterschieden wird.
nocase;
Die flag-Option erlaubt es Ihnen, die TCP-Flags zu testen. Zurzeit können Sie
diesen Test anhand von neun Flags mit Snort starten.
F – FIN (LSB in TCP Flag Byte)
S – Syn
R – RST
P – PSH
A – ACK
U – URG
2 – Reserved bit 2
1 – Reserved bit 1 (MSB in TCP Flag Byte)
0 – No TCP Flags set
Auch hier haben Sie wieder die Möglichkeit Ihre Suche mit Operatoren zu verfeinern.
+ – All-Flag, trifft auf alle Flags und andere zu
* – Any-Flag, trifft auf irgendeine der spezifizierten Flags zu
! – Not-Flag, trifft zu, wenn keine der spezifizierten Flags gesetzt ist
Die reserved Bits können genutzt werden um ungewöhnliches Verhalten, wie zum
Beispiel IP Stack Fingerprints oder Ähnliche zu entdecken.
flags: <flags>;
Natürlich führen wir auch hier ein Beispiel an.
alert any any -> 192.168.1.0/24 any (flags: SF; msg: "Moeglicher
SYN FIN Scan";)
Die seq-Option ist dafür da, um die TCP-Sequenznummer mit einem vorgegebenen Wert zu vergleichen (Spoofing-erfahrene Menschen wissen, dass man diese
Flag manchmal gut gebrauchen kann).
seq: <Wert>;
Die ack-Option ist für die Überprüfung des Acknowledge-Feld im TCP-Header
implementiert worden. Um ein praxisnahes Beispiel aufzuführen, bedienen wir
uns des Nmap-Ping-Beispiels. Bei einem Nmap-TCP-Scan wird dieses Feld auf
Null gesetzt.
ack: <Wert>;
alert any any -> 192.168.1.0/24 any (flags: A; ack: 0; msg: "Nmap
TCP Ping";)
Sandini Bib
26
1 Intrusion Detection Systems
Mit der itype-Option können Sie den Wert des ICMP-Type-Feldes testen. Um
dies zu erreichen wird der numerische Wert dieses Feldes gesetzt. Falls Sie eine
vollständige Liste aller möglichen Werte einsehen wollen, werfen Sie einen Blick
in die Datei decode.h, die bei Snort geliefert wird. Um Denial-of-Service-Attacken oder Floodings zu erkennen, kann man diesen Wert auch außerhalb der üblichen Spezifikationen ansetzen.
itype: <Wert>;
Die icode-Option ist der itype-Option sehr ähnlich, nur dass hierbei der Code
des ICMP-Pakets überprüft wird. Natürlich kann für die Angriffserkennung auch
hier der Wert außerhalb der Spezifikationen liegen.
icode: <Wert>;
Die session-Option kann dazu benutzt werden, um vom User eingegebene Daten einer TCP-Verbindung (Telnet, FTP, rlogin oder Web) abzufangen und auszuwerten. Dabei kann man zwei Modi verwenden: printable und all. Beim ersten
Modus (printable) werden nur die Daten aufgezeichnet, die der User auch
wirklich eingeben oder sehen kann. Der all-Modus arbeitet anders. Er zeichnet
alles auf, auch die Daten, die der User nicht sehen kann. Man sollte hierbei aber
sehr vorsichtig sein, da dieser Modus sehr an der Performance nagt. Außerdem
sollte man hierbei die log-Dateien im tcpdump-Format beschreiben lassen, da die
Daten in hexadezimaler Form geschrieben werden.
Session: [printable|all];
Das folgende Beispiel zeigt einen Filter, der alle Eingaben einer FTP-Verbindung
mitloggt.
log tcp any any <> 192.168.1.0/24 21 (session: printable;)
Mit der icmp_id-Option kann man die ICMP_ID eines ICMP-Echo-Pakets auf einen bestimmten Wert hin überprüfen. Dies kann äußerst hilfreich sein um dDistributed-Denial-of-Service-Attacken zu erkennen.
icmp_id: <Wert>;
Im Grunde ist die icmp_seq-Option identisch mit der icmp_id-Option, ich werde
daher nicht näher auf sie eingehen.
icmp_seq: <Wert>;
Die rcp-Option überwacht RPC-Anwendungen. Die Überwachung kann durch
drei Variablen stattfinden (application, procedure, version), und wenn
diese Variablen anschlagen, zeigt uns Snort dies an. Wildcards sind für procedure und version möglich und werden mit einem »*« dargestellt.
rpc: <Wert, [Wert|*], [Wert|*]>;
Sandini Bib
1.2 Snort
27
Wir werden die Syntax noch anhand einiger Beispiele besser verstehen lernen.
alert tcp any any -> 192.168.1.0/24 111 (rpc: 100000,*,3;
msg: "RPC getport (TCP)";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100000,*,3;
msg: "RPC getport (UDP)";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100083,*,*;
msg: "RPC ttdb";)
alert udp any any -> 192.168.1.0/24 111 (rpc: 100232,*,*;
msg: "RPC sadmin";)
Mit resp können Sie gezielte Aktionen ausführen, falls eine Ihrer Filterregeln zutraf. Sie können diese Argumente auch kombinieren, dazu müssen Sie diese lediglich mit einem Komma trennen. Beachten Sie aber bitte dabei, dass Sie diese
Möglichkeit nur nutzen können, wenn Sie bereits bei der Installation von Snort
das Argument –enable-flexresp übergeben. Nachfolgend werden Sie die möglichen Argumente, die Sie dabei übergeben, kennen lernen.
resp: <resp_modifier[, resp_modifier …]> ;
rst_snd – sendet TCP-RST-Pakete zum sendenden Socket
rst_rcv – sendet TCP-RST-Pakete an den Empfängersocket
rst_all – sendet TCP-RST-Pakete zum Empfänger- und Sendersocket
icmp_net – sendet ein ICMP-NET-UNREACH-Paket an den Sender
icmp_host – sendet ein ICMP-HOST_UNREACH-Paket an den Sender
icmp_port – sendet ein ICMP-PORT-UNREACH-Paket an den Sender
icmp_all – sendet alle ICMP-UNREACH-Pakete an den Sender
Doch seien Sie mit dem Umgang und der Verwendung dieser Methode äußerst
vorsichtig. Wir werden anhand einiger Beispiele sehen, wozu es führen kann,
wenn man sich bei dieser Option verkonfiguriert.
alert tcp any any -> 192.168.1.0/24 any (msg: "aiee!"; resp:
rst_all;)
Sollten Sie diese Regel verwenden, definieren Sie damit eine Endlosschleife. Also
Vorsicht!
Die Option content-list erlaubt es nach mehreren Strings im Inhalt eines Pakets zu suchen. Es ist wichtig, dass Sie im Content-File jedem String eine einzelne
Zeile widmen. Im Folgenden sehen Sie ein Beispiel für eine solche Datei:
"hacking"
"cracking"
"session hijacking"
.
Sandini Bib
28
1 Intrusion Detection Systems
.
.
content-list: [!] "<Content-File>";
Sie können auch bei dieser Option den »!«-Operator benutzen, um die Regel zutreffen zu lassen, falls die Suche auf kein angegebenes Suchmuster passt.
Die react-Option basiert auf Flex Resp. Eine der Hauptfunktionen dabei ist das
Blocken einiger Websites, die von Usern angefordert werden. Dabei erlaubt der
Flex-Resp-Code Snort, aktiv Verbindungen zu beenden und/oder eine sichtbare
Nachricht an den Browser zu schicken (bald wird Snort auch die Möglichkeit bieten Warnmeldungen zu verschicken). Die dabei verschickten Nachrichten können auch Kommentare von Ihnen enthalten. Die folgenden Argumente können
für diese Option benutzt werden.
block – Verbindung beenden und sichtbare Nachricht verschicken
warn – versendet sichtbare Warnnachricht (bald verfügbar)
Diese Argumente kann man zusätzlich noch mit den folgenden verknüpfen (die
jetzt aufgeführten können aber nicht alleine stehen, sondern brauchen die
Grundargumente, die wir zuvor kennen gelernt haben).
msg – enthält die Nachricht, die Sie verschicken möchten
proxy: <Portnummer> – Diese Option verwendet den Proxyport um die Nachricht zu versenden (noch nicht verfügbar, wird aber bald implementiert sein)
Falls Sie dabei wieder mehrere Argumente in einer Regel aufführen möchten,
trennen Sie diese bitte mit einem Komma. Diese Option sollte am Ende einer Regel stehen.
react: <Grundargument [, Zusatzargumente …]>;
alert tcp any any <> 192.168.1.0/24 80 (content-list: "hacking";
msg: "You should not hurt my network!!!"; react: block,msg);
Mit der references-Option kann man externe attack-identification-Systeme in
Snortregeln mit einbinden. Neben speziellen Systemen kann man auch eigene
URLs einbinden. Folgende Systeme werden zurzeit unterstützt.
System
Adresse
Bugtraq
www.securityfocus.com/bid
CVE
http://cve.mitre.org/cgi-bin/cvename.cgi?name=
Arachnids
http://www.whitehats.com/info/IDS
McAfee
http://vil.nai.com/vil/dispVirus.asp?virus_k=
URL
http://
Tabelle 1.7 Unterstützte Systeme
Sandini Bib
1.2 Snort
29
reference:<id system>,<id>; [reference: <id system>,<id>;]
alert TCP any any -> any 7070 (msg: "IDS411/dos-realaudio"; flags:
AP; content: "|fff4 fffd 06|"; reference: arachNIDS,IDS411;)
alert TCP any any -> any 21 (msg: "IDS287/ftp-wuftp260-venglinlinux";
flags: AP; content: "|31c031db 31c9b046 cd80 31c031db|";
reference: arachNIDS,IDS287; reference: bugtraq,1387;
reference: cve,CAN-2000-1574; )
Die sid-Option erlaubt es, einzigartige Snortregeln zu erkennen. Die Bereiche,
die dabei benutzt werden, sehen so aus:
<100, Die Regeln, die in diesem Bereich liegen, sind reserviert.
100 – 1.000.000, Hier finden Sie die Regeln, die Snort schon mitbringt.
>1.000.000, Dieser Bereich wird für lokale Regeln verwendet.
sid: <snort rules id>;
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80
(msg:"WEB-IIS File permission canonicalization";
uricontent:"/scripts/..%c1%9c../";
flags: A+; nocase; sid:983; rev:1;)
Die classtype-Option kategorisiert alerts zu Angriffsklassen. Dabei kann der
User angeben, welche Priorität eine Regelklassifikation hat. Regeln, die eine Klassifikation haben, besitzen eine Default-Priorität.
Classtype: <Klassenname>;
Die Regelklassifikationen stehen in der Datei classification.config und können mit
der folgenden Syntax editiert werden.
config classification: <class name>,<class description>,<default
priority>
In der folgenden Tabelle können Sie alle Standardklassifikationen einsehen.
Klassenname
Beschreibung
DefaultPriorität
Not-suspicious
Kein ungewöhnlicher Traffic
0
Unknown
Unbekannter Traffic
1
Bad-unknown
Potentiell bösartiger Traffic
2
Attempted-recon
Versuch Informationsloch auszunützen
3
Successful-recon-limited
Informationsloch ausgenützt
4
Tabelle 1.8 Standardklassifikationen
Sandini Bib
30
1 Intrusion Detection Systems
Klassenname
Beschreibung
DefaultPriorität
Successful-recon-largescale
Sehr großes Informationsloch ausgenützt
5
Attempted-dos
DOS Versuch
6
Successful-dos
Denial of Service gelungen
7
Attempted-user
Versuch Userinformationen zu ergattern
8
Unsuccessful-user
Userinformationen nicht bekommen
7
Successful-user
Userinformationen bekommen
9
Attempted-admin
Versuch Rootinformationen zu bekommen
10
Successful-admin
Rootinformationen bekommen
11
Tabelle 1.8 Standardklassifikationen (Forts.)
Hierzu noch einige Beispiele:
alert TCP any any -> any 80 (msg: "EXPLOIT ntpdx overflow";
dsize: > 128; classtype:attempted-admin; priority:10 );
alert TCP any any -> any 25 (msg:"SMTP expn root"; flags:A+;
content:"expn root"; nocase; classtype:attempted-recon;)
Das priority–Tag stellt einen Sicherheitslevel für Regeln dar. Mit Hilfe dieses
Tags kann man die Default-Priorität der Klassentypen überschreiben. Anhand
der Syntax und eines Beispiels werden wir dies verdeutlichen.
priority: <priority integer>;
alert TCP any any -> any 80 (msg: "WEB-MISC phf attempt";
flags:A+;
content: "/cgi-bin/bash"; priority:10;)
Mit Hilfe der uricontent-Option kann man Regeln so gestalten, dass sie allein
aufgrund dieser Option zutreffen. Somit ist es möglich, nur den request-Teil
eines Angriffs zu durchsuchen.
uricontent: [!] "<content string>";
Man kann die tag-Option dazu nutzen, um mehr zu loggen, als nur das Paket,
das eine Regel betrifft. Sobald ein Paket auf eine Regel zutrifft, wird der komplette Netzwerkverkehr des Quellhosts »angehängt«. Dieser »angehängte« Traffic wird mitgeloggt. Das kann äußerst praktisch sein, wenn man Angriffe, die
nach dem ursprünglichen (ersten) Angriff stattfinden, erkennen und analysieren
will. Wie wir jetzt sehen werden, ist bei dieser Option die Syntax sehr umfangreich.
tag: <type>, <count>, <metric>, [direction]
type
Sandini Bib
1.2 Snort
31
session
Loggt die Pakete in der session, die die Regel an die Regel angehängt.
host
Dieses Argument veranlasst das Loggen des Pakets, das den tag aktiviert hat.
count
Count gibt die Anzahl der units an, welche im metric-Feld spezifiziert werden.
metric
packets
Wie viele Pakete sollen zusätzlich mitgeloggt werden?
seconds
Wie viele Sekunden soll zusätzlich geloggt werden?
direction
Die Verwendung dieses Arguments ist nur sinnvoll im Zusammenhang mit dem
host-tag. Benutzen Sie src und dst um festzulegen, welche IP-Adresse des Pakets das Anhängen des Alarms verursacht hat. Zum besseren Verständnis werfen
Sie einen Blick auf die folgenden Beispiele.
alert tcp !$HOME_NET any -> $HOME_NET 143 (flags: A+;
content: "|e8 c0ff ffff|/bin/sh"; tag: host, 300, packets,
src;
msg: "IMAP Buffer overflow, tagging!";)
alert tcp !$HOME_NET any -> $HOME_NET 23 (flags: S;
tag: session, 10, seconds; msg: "incoming telnet session";)
Die ip_proto-Option erlaubt es, Pakete bezüglich ihres Protokolls zu überprüfen. Um eine vollständige Liste aller Protokolle zu bekommen, können Sie die Datei /etc/protocols zu Rate ziehen. Wie immer werden wir auch hier ein Beispiel und
die korrekte Syntax aufführen.
ip_proto: [!] <Name oder Wert>;
alert ip !$HOME_NET any -> $HOME_NET any (msg: "IGMP traffic
detected"; ip_proto: igmp; )
Mit der sameip-Option können Sie überprüfen, ob die Quell-IP der Ziel-IP entspricht. Zur Verwendung benutzen Sie bitte diese Syntax:
sameip;
alert ip $HOME_NET any -> $HOME_NET any (msg: "SRC IP == DST IP";
sameip;)
Sandini Bib
32
1 Intrusion Detection Systems
Das stateless-Argument erlaubt – in Verbindung mit dem Stream4 Preprozessor – das Zutreffen einer Regel unabhängig vom Status der Verbindung.
stateless;
alert tcp !$HOME_NET 0 -> $HOME_NET 0 (msg: "Port 0 TCP traffic";
stateless;)
Die regex-Option erlaubt content-Optionen Wildcardoptionen zu definieren.
Mögliche Wildcards sind dabei »*« und »?«. Auch hier können Sie sich die Verwendung anhand der Syntax und eines Beispieles verdeutlichen.
regex;
alert tcp any any -> $HOME_NET any
(flags: A+;
content: "|c08f e4ff ffff|/bin/*sh"; regex;
msg: "buffer overflow!"; sid: 2341239; rev: 1;)
1.2.5
Preprocessors
Seit der Version 1.5 haben Programmierer und User die Möglichkeit Snort mit
neuen Funktionen auszustatten. Diese neuen Module oder Plugins werden gestartet, nachdem die Pakete dekodiert sind, jedoch bevor die Detection-Routine
von Snort ihre Arbeit beginnt. Damit kann man vor der eigentlichen Auswertung
der Pakete noch andere Funktionen vorschalten. Zur Konfiguration und Aktivierung benutzt man das Schlüsselwort preprocessor.
preprocessor <Name>: <Optionen>
Nachdem Sie nun die allgemeine Syntax des Preprocessors beherrschen, werden
wir im Folgenden alle erhältlichen Module dafür besprechen.
Minfrag
Wir werden dieses Modul an dieser Stelle nicht ansprechen, da es ab der Version
1.8 von dem Stream4 Modul abgelöst wurde.
HTTP Decode
HTTP Decode verarbeitet HTTP-URI-Zeichenketten und konvertiert diese Daten
in besser verständlichen ACSII-Code. Sie können diese Methode zum Beispiel zur
Abwehr von Netz-URL-Scannern oder Angreifern einsetzen, die ansonsten den
Contentanalysestrings, die den HTTP-Verkehr nach feindseligen Aktivitäten
durchsuchen, ausweichen könnten. Wie das folgende Beispiel zeigt, übergibt man
dazu die HTTP-Portnummer (getrennt durch ein Leerzeichen) an das Modul.
http_decode: <port list> [ -unicode ] [ -cginull ]
preprocessor http_decode: 80 8080 -unicode -cginull
Sandini Bib
1.2 Snort
33
Portscan Detector
Der Portscan Detector von Patrick Mullen erledigt folgende Aufgaben:
Er schreibt den Start und das Ende eines von einer einzelnen IP-Adresse ausgehenden Portscans in die dafür vorgesehene Standardlogdatei.
Falls man dafür eine spezielle Logdatei vorsieht, loggt er auch die Ziel-IP, den
Zielport und die Art des Scans.
Dabei kann dieses Modul eine ganze Reihe von Portscans entdecken (Stealth,
XMas usw.). Zu diesem Zwecke kann man folgende Argumente übergeben:
Das zu überwachende Netzwerk
Die Anzahl der Ports, auf denen innerhalb einer bestimmten Zeit Verbindungsversuche erfolgen müssen, damit es als Portscan erkannt wird
Den Zeitraum, in dem Verbindungsversuche auf einen bestimmten Port auf
einen Portscan deuten lassen
Die Logdatei, in der die Daten über Portscans festgehalten werden sollen
Als Nächstes werden wir uns kurz die Syntax und ein Beispiel dazu ansehen:
portscan: <monitor network> <number of ports> <detection period>
<file path>
preprocessor portscan: 192.168.1.0/24 5 7 /var/log/portscan.log
Portscan Ignorehosts
Wie man aus dem Namen schon schließen kann, bietet dieses Modul die Möglichkeit einige Hosts (NTP, NFS und DNS) aus der Überwachung (auf Portscans) auszuschließen. Die Syntax dazu lautet wie folgt:
portscan-ignorehosts: <host list>
preprocessor portscan-ignorehosts: 192.168.1.5/32 192.168.3.0/24
Defrag
Dieses Modul ermöglicht eine komplette IP-Defragmention, die es Hackern erschwert, die Sicherheitsmaßnahmen eines Systems zu umgehen. Wie wir gleich
sehen werden, ist der Gebrauch dieses Moduls sehr einfach. Dazu muss man nur
die Preprozessordirektive in der Configdatei angeben.
defrag
preprocessor defrag
Frag2
Frag2 stellt die Ablöse für Defrag dar, wobei dieses Modul wesentlich ressourcenfreundlicher ist. So bietet es zum Beispiel die Möglichkeit an den Speichergebrauch zu konfigurieren und »fragment timeouts« zu setzen. Falls man dem Modul keine Argumente übergibt, verwendet es das Defaultspeicherlimit von
4194304 Bytes (4 MB) und einen Timeout von 60 Sekunden.
Sandini Bib
34
1 Intrusion Detection Systems
preprocessor frag2: [Speicherkapazität <xxx>], [timeout <xx>]
preprocessor frag2: 16777216, 30
Stream
Auch hier muss ich Ihnen mitteilen, dass wir dieses Modul nicht besprechen werden, da es – ebenso wie minfrag – von der Zeit eingeholt wurde und in den neueren Versionen von Snort nicht mehr implementiert ist.
Stream4
Mit diesem Modul haben die Schöpfer von Snort den Administratoren im Kampf
gegen einige böswillige Hacker eine mächtige Waffe an die Hand gegeben. Die
Systemverantwortlichen haben damit die Möglichkeit TCP-Streams wieder zusammenzuführen und genauestens zu analysieren. Sie können damit 256 TCPStreams aufzeichnen und mit bis zu 65.000 TCP-Verbindungen fertig werden.
Stream4 bietet dabei zwei konfigurierbare Module: den stream4 preprocessor
und das damit verbundene stream4 reassembly Plugin. Die damit verfügbaren
Optionen finden Sie unter der jetzt aufgeführten Syntax.
Stream4:
preprocessor stream4: [noinspect], [keepstats],
[timeout <seconds>],
[memcap <bytes>], [detect_scans],
[detect state_problems]
noinspect
»stateful inspection« deaktivieren
keepstats
schreibt Zusammenfassung der Sitzung in <Logverzeichnis>/session.log
timeout <Sekunden>
Gibt an, wie lange ein inaktiver Stream im »state table« gehalten werden soll.
Sessions, die schon gelöscht wurden, werden automatisch wieder aufgenommen, falls mehr Aktivität zu sehen ist. Der Defaultwert liegt dabei bei 30 Sekunden.
memcap <Bytes>
Gibt an, wo die Speicherkapazität anzusetzen ist. Wenn das Limit erreicht ist,
werden inaktive Sessions gewaltsam hinausgeschmissen. Der Defaultwert
liegt bei 8 MB.
detect_scans
Aktiviert Alarm für Portscan-Events
Sandini Bib
1.2 Snort
35
detect_state_problems
Aktiviert Alarm für stream-Events (zum Beispiel ausweichende RST-Pakete,
Daten in einem SYN-Paket und Sequenznummern, die außerhalb eines Bereichs liegen).
Stream4_Reassembly:
preprocessor
stream4_reassemble: [clientonly], [serveronly], [noalerts], [ports
<portlist>]
clientonly
Ermöglicht Reassembly nur für die Clientseite einer Verbindung.
serveronly
Ermöglicht Reassembly nur für die Serverseite einer Verbindung.
noalerts
Deaktiviert Alarm für Events, die möglicherweise »insertion« oder »evasion
attacks« sind.
ports
<portlist> – Die Portliste gibt an, für welche Ports Reassembly aktiviert werden soll. Für diese Funktion stehen zwei vordefinierte Variablen zur Verfügung:
»All« aktiviert Reassembly für alle Ports und »default« für die Ports 21 23 25 53
80 110 111 143 und 513. Die Ports sind mit einem Leerzeichen zu trennen.
Bemerkungen zu diesem Modul:
Falls man die beiden Optionen (stream4 und stream4_Reassembly) ohne Argumente in der Konfigurationsdatei snort.conf aktiviert, werden sie mit folgenden
Defaultwerten gestartet.
Argument
Defaultwert
Session Timeout
30 Sekunden
Speicherkapazität einer
Session
8388608 Bytes
Stateful Inspection
Aktiviert
Stream Stats
Nicht aktiviert
State Problem Alerts
Nicht aktiviert
Portscan Alerts
Nicht aktiviert
Tabelle 1.9 Stream4-Defaultwerte
Sandini Bib
36
1 Intrusion Detection Systems
Argument
Defaultwert
Reassembly Client
Aktiviert
Reassembly Server
Nicht aktiviert
Reassembly Ports
21 23 25 53 80 143 110 111 513
Reassembly Alerts
Aktiviert
Tabelle 1.10 Stream4_Reassembly-Defaultwerte
Mit stream4 führt Snort einen neuen Kommandozeilenswitch ein: -z. Dieser
Switch kann mit zwei Argumenten aufgerufen werden: est und all, wobei all
den Defaultwert darstellt und Snort übergibt, das es normal alarmieren soll. Das
Argument est hingegen bewirkt, dass Snort nur bei TCP-Streams, die durch einen Drei-Wege-Handshake etabliert wurden, und bei Streams, bei denen eine bidirektionale Aktivität beobachtet werden konnte (wie zum Beispiel auf ein Paket,
das als Antwort kein RST oder FIN zurückschickt), Alarm schlägt. Falls man den
-z-Switch benutzt, ignoriert Snort TCP-basierende stick/snot-Angriffe.
Man hat diesen Switch aus wohlüberlegten Gründen eingeführt. Stellen Sie sich vor,
Sie haben ein Subnetwork oder ein Network, wo einige IP-Pakete mit einer ungültigen Checksumme »umherschwirren«. Unter Umständen werden diese den Switch
oder den Router niemals passieren. Falls man Snort jetzt die Aufgabe stellt, diese
Pakete auch zu untersuchen, verschenkt man wertvolle Rechenzeit (diese Aufgabe
erledigt ein Subsystem in Snort). Deshalb hat man den Administratoren mit dem -zSwitch die Möglichkeit gegeben das für die Überprüfung zuständige Subsystem abzuschalten (oder es zu modifizieren) ohne dafür eigenen Code schreiben zu müssen.
Diese Neuerung ist aber nicht die einzige. Mit dem -k-Switch hat man die Möglichkeit das im vorherigen Abschnitt erwähnte Problem mit den Checksummer
auf eine elegantere Art zu lösen. Anstatt das komplette Subsystem (das für die
Überprüfung zuständig ist) abzuschalten, kann man es mit diesem Switch für
seine Zwecke modifizieren.
Folgende Optionen sind für den -k-Switch verfügbar:
Optionen
Beschreibung
Noip
Schaltet IP-Checksummenüberprüfung ab
Notcp
Schaltet TCP-Checksummenüberprüfung ab
Noupd
Schaltet UDP-Checksummenüberprüfung ab
Noicmp
Schaltet ICMP-Checksummenüberprüfung ab
None
Schaltet alle Checksummenüberprüfungen ab
Tabelle 1.11 Verfügbare Optionen für den »-k«-Switch
Sandini Bib
1.2 Snort
1.2.6
37
Output-Module
Seit der Version 1.6 hat man auch unter Snort die Möglichkeit, die Formatierung
und die Präsentation des Outputs wesentlich flexibler zu gestalten. Die Outputmodule von Snort starten, wenn die Alarm- und Loggingsubsysteme aufgerufen
werden, aber nach dem Preprozessor und nach der Detectionengine. Dabei ist das
Format im Regelfile sehr ähnlich dem des Preprozessors.
Man kann für diesen Zweck mehrere Output-Plugins in der Konfigurationsdatei
spezifizieren. Falls dabei mehrere Plugins desselben Typs aufgeführt werden
(alert, log), werden diese in Reihe ausgeführt, falls ein Event auftritt. Genauso
wie die Standard-Logging- und Alarmsysteme senden Output-Plugins ihre Daten
in die Standardlogdatei /var/log/snort oder in ein vom User angegebenes File (zu
spezifizieren mit der -l-Option).
Output-Module werden durch die Spezifizierung der Output-Option im Regelfile
zur runtime geladen.
output <name>: <options>
output alert_syslog: LOG_AUTH LOG_ALERT
In den folgenden Abschnitten werden wir die zurzeit verfügbaren Module kennen lernen.
Alert_syslog
Dieses Modul schreibt Alarmbenachrichtigungen in die vom System vorgegebene Logdatei (ähnlich zum -s-Switch). Man kann aber auch selbst das Logfile
(Facilities) angeben, außerdem ist es möglich, Prioritäten innerhalb der Regeldatei zu vergeben. In der folgenden Auflistung finden Sie eine Aufstellung der
verfügbaren Argumente für dieses Modul.
Options
LOG_CONS
LOG_NDELAY
LOG_PERROR
LOG_PID
Facilities
LOG_AUTH
LOG_AUTHPRIV
LOG_DAEMON
LOG_LOCAL0
LOG_LOCAL1
Sandini Bib
38
1 Intrusion Detection Systems
LOG_LOCAL2
LOG_LOCAL3
LOG_LOCAL4
LOG_LOCAL5
LOG_LOCAL6
LOG_LOCAL7
LOG_USER
Priorities
LOG_EMERG
LOG_ALERT
LOG_CRIT
LOG_ERR
LOG_WARNING
LOG_NOTICE
LOG_INFO
LOG_DEBUG
Die dazu passende Syntax sieht folgendermaßen aus:
alert_syslog: <facility> <priority> <options>
Alert_fast
Dieses Modul schreibt die Alarmnachrichten innerhalb einer Zeile in das Outputfile. Diese Methode ist schneller als das Alert_full-Modul, da es nicht den kompletten Header in die Output-Datei schreibt. Wie immer werden Sie hier die Syntax und ein dazu passendes Beispiel kennen lernen.
alert_fast: <output filename>
output alert_fast: alert.fast
Alert_full
Wie wir bei der Erklärung des Alert_fast-Moduls schon gesehen haben,
schreibt Snort bei dieser Methode den gesamten Header in die Loggingdatei (/var/
log/snort oder in die vom User spezifizierte Datei). Da Snort bei dieser Option
noch einige Dateien für die Dekodierung der Pakete, die den Alarm ausgelöst haben, anlegt, sollte man diese Option nur verwenden, wenn man eine genaue Analyse seines Netzwerkverkehrs braucht und/oder ein sehr langsames Netz hat.
alert_full: <output filename>
output alert_full: alert.full
Sandini Bib
1.2 Snort
39
Alert_smb
Wir haben am Anfang gesehen, dass Snort nicht die Möglichkeit besitzt den Administrator zu benachrichtigen. Dieses Problem haben wir gefixt, indem wir ein
Pagerprogramm wie YAPS eingesetzt haben. Dabei haben wir aber gesehen, dass
es die Möglichkeit der SMB-Benachrichtigung gibt, aber wir diese aufgrund der
Sicherheitsbedenken nicht einsetzen wollen. Außerdem handelt dieses Buch von
Linux-Security und in einem solchem Werk sollten NETBIOS Tools und Ähnliches meiner Meinung nach nicht beschrieben werden. Ich bitte Sie also an dieser
Stelle, diese Möglichkeit nicht zu nutzen, und werde sie auch nicht näher beschreiben (wie gesagt dürfte es die meisten Leser sowieso nicht betreffen, da diese
ein Serversystem ohne Windows fahren). Falls es aber aus irgendwelchen Gründen für Sie doch notwendig sein sollte, dieses Modul zu starten, können Sie dies
anhand folgender Syntax bewerkstelligen.
alert_smb: <alert workstation filename>
output alert_smb: workstation.list
Alert_unisock
Obwohl dieses Modul noch in der Experimentalphase steckt, wollen wir es an
dieser Stelle aufführen, da es eine gute Alternative zu SMB ist und im Allgemeinen eine gewisse Möglichkeit der Benachrichtigung in einem Netzwerk darstellt.
Man hat hierbei die Möglichkeit Alarmbenachrichtigungen auf einen Unixdomainsocket zu schicken. Andere Programme können nun auf diesen Socket
»horchen« und diese Nachrichten oder auch Paketdaten in Echtzeit empfangen.
alert_unixsock
output alert_unixsock
Log_tcpdump
Obwohl wir schon andere Möglichkeiten kennen gelernt haben, um die Loggingdaten im tcpdump-Format zu erhalten, wollen wir auch einen Blick auf das Output-Modul werfen, das uns dies ermöglicht. Um eine unnötige Wiederholung zu
vermeiden, werde ich an dieser Stelle die Vorteile dieses Formats nicht noch einmal besprechen und gleich zur Syntax übergehen.
log_tcpdump: <output filename>
output log_tcpdump: snort.log
XML
XML dürfte mittlerweile für jeden, der in der IT-Branche progressiv arbeitet, ein
Begriff sein. Auch Snort führt nun ein XML-Plugin mit, welches es ermöglicht, in
SNML (simple network markup language alias snort markup language) in eine
Datei oder über das Netzwerk zu loggen. Wir haben bei der allgemeinen Besprechung von Snort schon gesehen, dass es manchmal notwendig und sinnvoll ist, in
eine zentrale Logdatei zu schreiben. Mit diesem Plugin ist es nun möglich, einen
Sandini Bib
40
1 Intrusion Detection Systems
oder mehrere Sensoren im Netzwerk dazu zu bringen, in eine solche zentrale Datenbank zu loggen. Außerdem erlaubt es dieses Modul, automatisch Alarmbenachrichtigungen an das CERT Coordination Center zu senden. Selbstverständlich ist diese Erweiterung von Snort ein phantastisches Hilfsmittel bei der
Administration, aber Sie sollten dennoch bedenken, dass sich dieses Modul noch
in der Entwicklungsphase befindet und daher noch nicht voll einsatzfähig ist.
Den aktuellen Stand dieses Projekts können Sie (und sollten Sie) stets unter der
Adresse http://www.cert.org/DTD/snml-1.0.dtd erfragen. Die dazugehörige Syntax
und die verfügbaren Parameter werden Sie im nächsten Abschnitt erfahren.
output xml: [log | alert], [Parameterliste]
Verfügbare Parameter:
[log | alert]
Spezifiziert log oder alert, um den XML-Plugin mit der log- oder alertFacility zu verbinden.
Parameterliste
Die Parameterliste enthält key/value-Paare, welche jeweils mit einem Leerzeichen zu trennen sind (Format: key=value).
file: Falls dies der einzige Parameter ist, wird in eine Datei auf dem lokalen
System geloggt. Ansonsten (falls http oder https eingebunden ist) stellt file
das Script dar, das auf einem Remotesystem ausgeführt werden soll.
protocol: Die möglichen Werte (values) für dieses Feld können Sie Tabelle 1.12
entnehmen.
Werte (values)
Beschreibung
http
Sendet einen POST über http zu einem Webserver (benötigt einen
[file]-Parameter)
https
Ähnlich zu http, mit dem Unterschied der SSL-Verschlüsselung
(benötigt einen [file]-, [cert]- oder [key]-Parameter)
tcp
Eine einfach TCP-Verbindung. Dazu benötigen Sie ein Programm, das
auf einen bestimmten Port horcht. (benötigt einen [port]-Parameter)
iap
Dies stellt eine (noch nicht funktionierende) Implementierung eines
Intrusion Alert Protocols dar.
Tabelle 1.12 Values für Protocol
host: Gibt den Port auf dem Remoterechner an, zu dem die Logs gesendet
werden. Die Defaultwerte können Sie Tabelle 1.13 entnehmen.
Sandini Bib
1.2 Snort
41
Protokoll
Defaultports
http
80
https
443
Icp
9000
Iap
9000
Tabelle 1.13 Defaulports für host
cert: Nur jemand, der https einsetzt, muss diese Aufgabe bewältigen. Wir
könnten über die Option seitenweise diskutieren und damit sicherlich auch einiges lernen. Doch dies soll eine Kurzbesprechung einiger Optionen werden.
Zuerst sollten Sie die Option kennen lernen, die es Ihnen ermöglicht, einen
Schlüssel (mit dem X.509 Zertifikat) zu erstellen:
% openssl x509 -subject -in <server certificate>
Der folgende Abschnitt soll Ihnen die Konfiguration innerhalb eines Snortsenors
anhand des sanatize-Arguments näher bringen.
Ein wichtiges Argument innerhalb eines Snortsensors ist sanatize. Dieses Argument ist eine Kombination aus dem Netzwerk und der Netzwerkmaske. Jede IPAdresse innerhalb eines Bereichs, den Sie durch dieses Argument spezifizieren,
wird durch xxx.xxx.xxx.xxx repräsentiert. Sie können auch Alarme mit diesem
Argument definieren, dann wird kein Anhang eines Pakets mitgeloggt. Sie können dieses Argument mehrfach nutzen, um mehrere IP-Bereich anzugeben. Sie
können die Logdaten leider nur in binärer Form aufzeichnen, da es zurzeit keinen
Standardweg gibt, um diese in ASCII umzuwandeln. Welche binäre Form für Sie
am besten geeignet ist, können Sie aus den folgenden Punkten entnehmen.
hex: Sie können die binären Daten als HEX anzeigen lassen (Dies stellt die
Defaulteinstellung dar). Die für Sie verfügbaren Optionen hierbei finden
Sie in Tabelle 1.14.
Option
Kommentar
storage requirements
2x Größe von binären Daten
Searchability
Empfehlenswert
human readability
Sehr schwer zu lesen, benötigt post processing
Tabelle 1.14 Optionen zu hex
base64: Daten werden in base64 Strings dargestellt. Hier wird Ihnen die
dazugehörige Tabelle 1.15 weiterhelfen.
Sandini Bib
42
1 Intrusion Detection Systems
Option
Kommentar
storage requirements
1.3x Größe von binären Daten
Searchability
Ohne post processing unmöglich
Human readability
Sehr schwer zu lesen, benötigt post processing
Tabelle 1.15 Optionen zu base64
ascii: Hierbei werden die Daten im ASCII-Format dargestellt. Seien Sie aber
sehr vorsichtig damit, denn dies ist die einzige Option, bei der Sie tatsächlich
Daten verlieren. Nicht-ASCII-Zeichen werden als ».« dargestellt. Falls Sie sich
für diese Option entscheiden, sollten Sie wissen, dass es keinen Sinn macht,
Daten für IP- und TCP-Daten in ASCII darzustellen, deshalb werden sie auch
in HEX dargestellt. Wie bei den beiden vorhergegangenen Punkten werden
Sie zum besseren Verständnis auch hier eine Tabelle mit den Optionen und
Martin-Roesch-Kommentaren dazu finden (Tabelle 1.16).
Option
Kommentar
Storage requirements
Nur ein bisschen größer als binäre Daten, da einige Charakter
mit Sonderzeichen versehen sind.
Searchability
Sehr brauchbar, falls Sie nach Textstrings suchen, die Suche
nach binären Stings stellt sich als unmöglich dar.
Human readability
Sehr gut
Tabelle 1.16 Optionen zu ascii
detail: Diese Option erweist sich als sehr brauchbar, wenn Sie sehr viele
Daten von Snort bekommen. Hierbei können Sie angeben, wie viele Details
Sie gerne gespeichert hätten.
Optionen
Beschreibung
Fast
Bei dieser Option speichern Sie nur ein Minimum der Daten, dies kann die
Analyse zwar sehr einschränken, bietet sich aber dennoch als beste Lösung
für einige Applikationen an. Die folgenden Felder werden geloggt.
Timestamp
Signature
Quell-IP-Adresse
Ziel-IP-Adresse
Zielport
Quellport
TCP Flags
Protokoll
Full
Loggt die gesamten Daten des Pakets, welches den Alarm ausgelöst hat
Tabelle 1.17 Optionen zu detail
Sandini Bib
1.2 Snort
43
Sollten Sie diesen Abschnitt nicht sofort verstanden haben, ist dies nicht weiter
schlimm. Wir haben es hier mit einer durchaus komplexen und sehr umfangreichen Option zu tun, die man unmöglich bis ins kleinste Detail beschreiben kann,
wenn man den Rahmen des Kapitels in einem vernünftigen Maße halten will. Die
hier aufgeführten Daten beruhen zum Großteil auf den Schriften von Martin
Roesch und sollten Ihnen (mit Hilfe der Manpages) einen kompletten Eindruck
über die Funktionsmöglichkeiten von Snort geben. Zum Abschluss dieses Abschnittes werden wir einen Blick auf die Syntax werfen, welche die besprochene
Theorie etwas verdeutlichen sollte.
xml: <output facility>
output xml: log, file=output output xml: log, protocol=https
host=air.cert.org file=alert.snort cert=mycert.crt
key=mykey.pem ca=ca.crt server=srv_list.lst
Database
Dieses Output-Modul von Jed Pickel ermöglicht es, Daten an eine SQL-Datenbank zu schicken. Die zu übergebenden Argumente dafür sind die Datenbank, in
die geloggt werden soll, und die Parameterliste (Format: Parameter = Argument).
Werfen Sie dazu einen Blick auf die Syntax, gefolgt von der Beschreibung der verfügbaren Parameter.
database: <log | alert>, <database type>, <parameter list>
Verfügbare Parameter:
host: Dieser Parameter gibt den Host an, mit dem eine Verbindung initialisiert
werden soll. Falls Sie keinen Hostnamen übergeben, wird sich Snort mit Hilfe
eines lokalen Unix Domain Sockets verbinden
port: Spezifiziert den Port auf dem Serversystem, auf dem die Verbindung zu
Stande kommen soll. Kann aber auch die Socket Filename Extension der Unix
Domain Verbindungen angeben.
dbname: Datenbankname und Username für die Datenbank
password: Gibt das Passwort für die Datenbank an, falls die Datenbank danach verlangen sollte.
sensor_name: Mit diesem Parameter können Sie Ihrem Snortsenor einen eigenen Namen geben. Falls Sie aber keinen Namen angeben, wird Snort automatisch einen Namen dafür generieren. Auch hierbei müssen wir wieder ein
Wort zur Kodierung verlieren. Da Snort keinen Standard vorgibt, können Sie
wieder auswählen, welcher für Sie der geeignete ist. Betrachten Sie dazu Tabelle 1.14 bis Tabelle 1.16.
detail: Die Beschreibung zu Detail ist identisch mit der Detailbeschreibung
des XML-Moduls.
Sandini Bib
44
1 Intrusion Detection Systems
Bitte beachten Sie bei diesem Modul die Option »log«. Denn zurzeit unterstützt
Snort vier Datenbanken, die Sie mit dieser Option definieren.
1. MySQL
2. PostgreSQL
3. Oracle
4. Unix-ODBC-kompatible Datenbanken
5. Die genaue Syntax dazu lautet:
output database: log, mysql, dbname=snort user=snort
host=localhost password=snort
CSV
Dieses Modul erlaubt es, Alarmnachrichten in einem Format zu loggen, welches
leicht in Datenbanken importiert werden kann. Dieses Plugin benötigt zwei Argumente: die Pfadangaben für die Logdatei und das Format. In der folgenden
Auflistung können Sie erkennen, welche Formatierungen Ihnen hierbei zur Verfügung stehen:
timestamp
msg
proto
src
srcport
dst
dsport
ethsrc
ethdst
ethlen
tcpflags
tcpseq
tcpack
tcplen
tcpwindow
ttl
tos
id
dgmlen
Sandini Bib
1.2 Snort
45
iplen
icmptype
icmpcode
icmpid
icmpseq
Um dieses Plugin nutzen zu können, verwenden Sie bitte folgende Syntax:
output CSV: <filename> <format>
output CSV: /var/log/alert.csv default
output CSV: /var/log/alert.csv timestamp, msg
Unified
Dieses Plugin stellt den schnellstmöglichen Weg dar, um in Snort Daten zu loggen. Dabei loggt es in ein Alarmfile und in ein Paketlogfile. Das Alarmfile enthält
dabei die High-Level-Details eines Events (ips, protocol, port, message id), das
Paketlogfile hingegen enthält detaillierte Informationen über ein Paket und die
entsprechende message-id. Beide Dateien enthalten binäre Daten. Die Beschreibung zum Format dieser Daten können Sie der Datei spo_unified.h entnehmen.
Auch hier haben Sie die Möglichkeit die Verwendung dieses Moduls anhand der
Syntax und eines Beispiels zu erlernen.
output alert_unified: <file name>
output log_unified: <file name>
output alert_unified: snort.alert
output log_unified: snort.log
SNMP Trap
Mit Hilfe dieses Moduls können Sie Alarmnachrichten an eine Network-Management-Station schicken. Zur Verwendung benutzen Sie bitte folgende Syntax.
trap_snmp: : alert, <sensorID>, {trap | inform},
[SnmpOptions] , <snmptrapdAddress>, <community>
Verfügbare Optionen:
alert: Gibt an, welche Alarmtypen an die NMS weitergeleitet werden sollen
senorID: Bezeichnet die Sensor-ID, um verschiedene Systeme zu unterscheiden
trap: Bei Angabe dieser Option wird SNMP v2 traps verwendet
inform: Verwendet SNMP v2 informs
SNMPOptions: Die verfügbaren Optionen finden Sie in Tabelle 1.18.
Sandini Bib
46
1 Intrusion Detection Systems
Option
Beschreibung
-v 2c
SNMP v2 c community
-p
Remoteportnummer für Empfänger
Tabelle 1.18 Verfügbare Optionen zu SNMPOptions
snmptrapdAddress: Netzwerkadresse für SNMP-Empfänger
community: SNMP community String
Ein passendes Beispiel dazu könnte folgendermaßen aussehen:
trap_snmp: alert, internal, trap, 192.168.1.10, private
Log Null
Es kann durchaus in einigen Fällen nützlich sein, über einen Alarm informiert zu
werden, ohne dass dies gleich einen Logfileeintrag zur Folge hat. Das können Sie
mit diesem Plugin (und dem »-n« Kommando) bewerkstelligen.
output log_null
Sie können damit aber auch einen eigenen Regeltypen erstellen (wir haben
dies ja bereits kennen gelernt):
ruletype info {
type alert
output alert_fast: info.alert
output log_null
}
Dies ist ein Regeltyp, der zwar über einen Alarm informiert, aber keinen Logfileeintrag hervorruft.
1.2.7
Fazit
Wie Sie gesehen haben, ist Snort ein unglaublich mächtiges Werkzeug und bietet
eine Vielzahl von Optionen. Wenn Sie dieses Kapitel gründlich gelesen und die
aufgeführten Beispiele ausprobiert haben, sollten Sie fit genug sein, um Ihr eigenes sicheres Snortsystem aufzuziehen, und damit wieder etwas an Boden gegenüber Angreifern gewonnen haben. An dieser Stelle möchte ich mich aber noch
kurz entschuldigen, dass einige Optionen, Argumente, Module oder Parameter
etwas zu kurz kamen. Aber es ist einfach nicht möglich, alle Informationen ausführlich aufzuführen, da dies mit Sicherheit den Rahmen des Buchs sprengen
würde.
Sandini Bib
2 Netzwerk-Tools
Ich muss gestehen, ich war mir nicht sicher, ob ich dieses Kapitel ins Buch mit aufnehmen sollte, da es vielleicht auf den ersten Blick keinen direkten Bezug zur ITSecurity unter Linux aufweisen kann. Doch das ist ein reines Definierungsproblem. Wer ein sicheres Linuxsystem auf die Beine stellen will, der wird sein Ziel
nicht erreichen, wenn er nur so genannte »reinrassige« Security-Tools verwendet.
Denn es werden Situationen aufkommen, in denen ein Administrator bestimmte
Vorgänge in seinem Netzwerk nicht versteht und ein ihm noch nicht bekanntes
Problem lösen muss. Es wäre möglich, dass die Lösung eines solchen Problems in
einem Sicherheitstool zu finden ist. Aber welches Programm man für die Beseitigung des Missstandes einsetzen muss, das ist bei der Problementdeckung natürlich noch nicht klar. Um nun einer solchen Situation Herr zu werden, muss man
das Problem zerlegen. Man muss Schritt für Schritt analysieren, an welchem
Punkt sich (zum Beispiel) Pakete abnorm verhalten oder an welcher Stelle ein Signal verloren geht. Damit man eine solche Fehlersuche durchführen kann, benötigt
man wiederum Programme, die einem dabei helfen. Und genau diese Tools
möchte ich Ihnen in diesem Kapitel näher bringen.
2.1
Traceroute
Obwohl ich mir sicher bin, dass bereits die meisten Leser dieses Utility kennen,
werde ich es an dieser Stelle trotzdem ansprechen, da es einfach ein unverzichtbares Programm in der Bekämpfung der Netzwerkgeräte ist, die Pakete verwerfen.
Wir alle wissen, dass das Internet alles andere ist als ein perfekt geplantes und gut
strukturiertes Netzwerk. Es ist ein riesengroßes, ständig wachsendes Gebilde an
Rechnern, Routern und ähnlichen Netzwerkgeräten, die weltweit miteinander
verbunden sind und versuchen Daten auszutauschen. Jetzt hat man bereits versucht den anhaltenden Paketverlusten im Internet mit der Implementierung der
TCP/IP-Protokollsuite entgegenzuwirken, doch leider müssen geplagte Admins
wie wir täglich feststellen, dass auch das beste verbindungsorientierte Protokoll
nichts gegen den Paketverlust anrichten kann, den wir täglich erleiden müssen.
Richtig schlimm ist es jedoch, wenn man merkt, dass sich jetzt auch ein solcher
Bug in das hauseigene Netzwerk eingeschlichen hat und auf mysteriöse Weise einige Pakete nie ihr Ziel erreichen. Oftmals haben wir nur ein kleines Netz und es
stehen keine Ausweichrouten wie im Internet zur Verfügung und falls doch, geht
unser Durchsatz merklich in den Keller. Was bleibt uns also anderes übrig als Pakete bis zu ihrem Verschwinden zu verfolgen und somit den Übeltäter, der unsere Daten verschlingt, zu entlarven und dem ein jähes Ende zu bereiten. Genau
dafür hat man uns Administratoren Traceroute geschenkt. Dieses Tool erlaubt es,
unseren Plan der Paketverfolgung bis zum Verschwinden durchzuführen, und
gibt uns somit die Möglichkeit schnell an die Wurzel des Problems zu gelangen.
Sandini Bib
48
2 Netzwerk-Tools
An sich ist es ein sehr einfach gehaltenes Programm, das eigentlich nur ein Argument braucht, um zu funktionieren und seinen Dienst zu tun (die IP-Adresse oder
den Hostnamen). Nachdem man das Programm installiert hat (sollte bei jeder
Distribution mitgeliefert werden und falls nicht, ist es überall im Internet erhältlich), kann man sofort damit beginnen, die Paketwege nachzeichnen zu lassen.
Dazu ruft man das Programm auf und übergibt die IP-Adresse oder den Rechnernamen, der das Paket erhalten soll, es aber leider nie bekommt, da es irgendwo
auf dem Weg dorthin verloren geht. Die Syntax dafür sieht logischerweise so aus:
Traceroute 10.209.100.1
Das folgende Listing zeigt Ihnen eine Beispiel-Paketverfolgung mit Traceroute:
traceroute to 62.54.19.249 (62.54.19.249), 30 hops max, 40 byte
packets
1 cishelios2.helios.de (193.141.98.1) 3 ms 2 ms 2 ms
2 pop9.pop-hannover.de (193.98.1.212) 5 ms 5 ms 5 ms
3 popcore.pop-hannover.de (193.98.1.213) 4 ms 4 ms 4 ms
4 ffmcore.pop-hannover.net (62.48.66.58) 43 ms 24 ms 24 ms
5 62.67.32.137 (62.67.32.137) 24 ms 24 ms 24 ms
6 unknown.Level3.net (195.122.136.45) 24 ms 24 ms 24 ms
7 rdcx-frnk-de01.mediaways.net (194.31.232.89) 24 ms 24 ms
24 ms
8 rmws-frnk-de01-ln5-6-0.nw.mediaways.net (213.20.255.237) 25 ms
25 ms 25 ms
9 rmws-stgt-de01-pp3-3-3.nw.mediaways.net (195.71.254.126)
29 ms 29 ms 29 ms
10 rmws-mnch-de01-pp3-5-0-0.nw.mediaways.net (195.71.254.78)
48 ms 41 ms 33 ms
11 srv48.mnc2.mediaWays.net (62.53.207.94) 33 ms 35 ms 33 ms
12 mnc2-3e3613f9.pool.mediaWays.net (62.54.19.249) 288 ms
260 ms 258 ms
So sieht eine Tracerouteausgabe aus, wenn Sie keine weiteren Parameter angeben. Um die Ausgabe zu verändern oder andere Schwerpunkte zu legen, können
Sie einen der folgenden Parameter zur Spezifizierung nutzen.
2.1.1
Optionen
Optionen
Beschreibung
-l
Zeigt den TTL-Wert des Antwortpaketes an. Dies kann sehr nützlich sein,
falls Sie asymmetrisches Routing überprüfen wollen.
-m max_ttl
Diese Option gibt an, wie hoch der maximale time-to-live-Wert in ausgehenden Paketen sein darf. Der Defaultwert hierbei liegt bei 30 Hops.
Tabelle 2.1 Verfügbare Argumente für Traceroute
Sandini Bib
2.1 Traceroute
49
Optionen
Beschreibung
-n
Diese Option verändert die Ausgabe Ihres Testlaufes ein wenig. Hierbei
wird anstatt des Hostnamens die IP-Adresse des Gateways ausgegeben.
-p port
Damit können Sie den UDP-Port, der in den Tests verwendet wird, angeben (der Defaultwert liegt bei 33434). Sie müssen diesen Parameter eigentlich nicht ändern, außer Sie wissen, dass ein bestimmtes Programm auf
einem Gateway auf diesem Port »horcht«.
-q nqueries
Diese Option gibt an, wie viele Pakete losgeschickt werden sollen.
Der Defaultwert liegt bei drei.
-r
Mit dieser Option umgehen Sie die Routingtabellen und sprechen den
Host direkt an.
-s src_addr
Hiermit können Sie die IP-Adresse der ausgehenden Pakete setzen (bitte
beachten Sie aber dabei, dass Sie eine IP-Adresse und keinen Hostname
angeben müssen). Dies ist nützlich, falls Ihr Rechner mehrere IP-Adressen
belegt.
-t tos
Um den type-of-service-Wert in ausgehenden Paketen auf einen anderen
Wert zu setzen (der Defaultwert liegt bei Null), können Sie diese Option
benutzen. Sie können diese Option nutzen, um zu sehen, ob das Paket
einen anderen Weg einschlägt, falls Sie den tos-Wert ändern.
-v
Falls Sie dieses Argument übergeben, werden alle erhaltenen ICMPPakete angezeigt (außer TIME_EXCEEDED und UNREACHABLE)
-w
Hiermit können Sie angeben, wie lange auf ein Antwortpaket gewartet
wird. (Der Defaultwert liegt bei drei Sekunden).
Tabelle 2.1 Verfügbare Argumente für Traceroute (Forts.)
2.1.2
Funktionsweise
Bevor wir auf die technische Seite von Traceroute eingehen, werden wir vorher
noch kurz erörtern, wobei einem dieses Werkzeug behilflich sein kann.
Wie wir in der Einführung schon gesehen haben, ist Traceroute ein sehr nützliches Programm um defekte Gateways in einem Netzwerk zu finden. Dies ist aber
nicht die einzige Hilfestellung, die man von diesem Netzwerktool angeboten bekommt. Im Folgenden werden Sie eine Auflistung einsehen können, die Ihnen einige Situationen näher bringt, in denen Ihnen Traceroute behilflich sein kann.
Einsatzmöglichkeiten
Providertest
Das Internet wächst und gedeiht. Es bringt neue Arbeitsplätze und schafft eine gute
Basis für Neugründungen. Unter diesen Firmenneugründungen befinden sich auch
sehr viele Internet Service Provider, die durch ihren Preis bestechen. Doch nicht nur
der Preis ist bei der Providerwahl entscheidend. Neben dem Finanziellen stellt auch
die zur Verfügung gestellte Bandbreite eine entscheidende Richtlinie zur Auswahl
Sandini Bib
50
2 Netzwerk-Tools
dar. Wer sich nicht auf die providereigenen Angaben über die Geschwindigkeit ins
Internet verlassen will, kann diese mit Traceroute testen und entscheiden.
Nachdem Sie das Preis/Leistungsverhältnis dank Traceroute einsehen konnten,
stellt sich noch die Frage, ob wirklich jeder Provider sein eigener Chef ist und sein eigenes Rechenzentrum besitzt. In der Praxis ist dies nicht immer der Fall. Ein eigenes
Rechenzentrum kostet enorm viel Geld, Fachwissen und Administrationsaufwand.
Viele Neueinsteiger wollen anfangs natürlich die Kosten gering halten und fragen
daher an, ob Sie sich vielleicht in ein anderes Rechenzentrum einmieten können. Mit
Traceroute haben Sie die Möglichkeit genau festzustellen, wo dieses Rechenzentrum
ist und wie schnell es erreichbar ist. Wie und ob Sie diese Information nutzen, bleibt
Ihnen überlassen. Aber es ist immer besser, etwas mehr zu wissen.
Erreichbarkeit
Es kann durchaus von Vorteil sein, die Erreichbarkeit eines bestimmten Rechners
oder Netzwerkes von mehreren Stellen aus zu testen oder auch zu bestimmen Tageszeiten (zum Beispiel merken es einige Internetsurfer extrem, wie ihr Datendurchsatz an Feiertagen dank der Telekom-XXL-User sinkt).
Erstellung eines Netzwerkplans
Dokumentation ist ein wichtiger Bestandteil der Aufgaben eines Administrators.
Traceroute kann dabei sehr hilfreich sein, indem es zum Beispiel fast die komplette Routenplanerstellung übernimmt.
Datenversand im Internet
Nachdem wir nun wissen, wozu man dieses Programm nutzen kann, sollten wir
uns daran machen, seine Funktionsweise zu verstehen. Um diese vollkommen zu
verstehen, müssen wir als Erstes wissen, wie man im Internet Daten verschickt.
Nehmen wir dazu an, dass Sie eine Datei auf einen FTP-Server schieben wollen.
Das Einzige, was Sie vom Datenversand mitbekommen, ist Ihre Befehlseingabe
und das Feedback des FTP-Servers:
ftp www.server.de
put datei
quit
Das sind die einzigen Befehle (außer der Authentifizierung), die Sie angeben müssen. Den Rest erledigen das File Transport Protocol und die aufgerufene Applikation
für Sie. (Dabei ist es egal, ob Sie nun eine Datei auf einen FTP-Server schieben oder
eine Internetseite öffnen wollen. Das Prinzip ist immer dasselbe). Als Erstes wird
Ihre Datei in kleine Stücke zerlegt, die sich alle einzeln auf den Weg zum Ziel machen. Um dieses Ziel zu erreichen müssen diese Pakete bestimmte Gateways passieren, welche die Pakete an den nächsten weiterreichen. Dieser Prozess wird so lange
durchgeführt, bis das Paket am Zielort angekommen ist. Dort wird es wieder zusammengebaut und auf Fehler überprüft. Außerdem erhält der Absender eine Antwort,
Sandini Bib
2.1 Traceroute
51
dass alles gut geklappt hat. Dies war im Groben das Prinzip der Datenübertragung
im Internet. Damit Sie die Funktionsweise von Traceroute aber verstehen können,
müssen wir noch etwas tiefer in die Materie einsteigen. Wie Sie gesehen haben, passieren die versendeten Pakete Vermittlungsstellen (so genannte Gateways), welche
die Pakete dann weiterleiten. Falls nun auf dem Weg zum Ziel ein Problem auftaucht
(es könnte zum Beispiel ein Gateway nicht erreichbar sein), so wird das Paket zurückgeschickt und über einen anderen Weg weitergeleitet. Aus diesem Zurückschicken und Umleiten kann aber sehr schnell ein großes Problem mutieren. Es könnte
nämlich durchaus vorkommen, dass ein Gateway (zum Beispiel ein Router) fehlerhaft arbeitet und die Pakete immer wieder zu seinem »Vordermann« zurückschickt,
was wiederum zu einer Endlosschleife führen könnte. Um dies zu verhindern, hat
man eine Begrenzung eingeführt, die besagt, dass maximal 255 Vermittlungsstellen
passiert werden dürfen. Dies wird dadurch erreicht, dass Pakete einen bestimmten
(8 Bit großen) Wert zugewiesen bekommen, der zwischen 0 und 255 liegen muss. Jeder Gateway, der passiert wird, hat nun die Aufgabe diesen Wert um 1 zu verringern. Erreicht diese Zahl den Wert 0, so wird das Paket gelöscht und der Gateway
versendet eine Time exceeded in transit-Nachricht (über das Internet Control
Message Protocol) an die Absendermaschine, was Ihnen diese über die Ausgabe eines time out auf Ihrem Bildschirm mitteilt. Sie brauchen sich jetzt aber keine Sorgen
zu machen, dass Pakete, die einen langen Weg bis zum Ziel vor sich haben, nicht ankommen könnten, da zu viele Gateways passiert werden müssten. Das ist ausgeschlossen, da die meisten Rechner im Internet über 15 Hops (so nennt man den
Sprung über einen Gateway) zu erreichen sind. Die Begrenzung für das Passieren
der Gateways nennt man time-to-live-Wert (TTL) und genau hier setzt Traceroute
an.
Wie funktioniert Traceroute?
Traceroute nutzt diesen time-to-live-Wert, um Ihnen alle passierten Hops mitzuteilen. Im Grunde ist die Funktionsweise einfach. Machen Sie sich das gerade
eben verdeutlichte Modell der Datenübertragung im Internet noch einmal klar,
denn genauso funktioniert Traceroute.
Nachdem Sie Traceroute gestartet haben, generiert das Programm drei Pakete
und setzt den time-to-live-Wert dieser Pakete auf 1. Natürlich werden diese Pakete nie beim Zielrechner ankommen (außer es liegt nur ein Gateway zwischen
Sender und Empfänger), da der erste Gateway den Wert um eins verringert und
die Pakete somit gelöscht werden und der Absender eine Fehlermeldung bekommt. Anhand dieser Fehlermeldung weiß Traceroute, dass das Paket angekommen ist, und erfährt gleichzeitig die IP des Gateways. Jetzt schickt das Programm wieder drei Pakete auf die Reise zum Zielrechner, doch diesmal setzt es
den TTL-Wert auf 2, so dass auch der zweite Gateway erreicht wird. Dieses Spiel
wird so lange wiederholt, bis die Pakete verloren gehen oder an ihrem Bestimmungsort angekommen sind.
Sandini Bib
52
2 Netzwerk-Tools
2.2
IPTraf
2.2.1
Allgemeines
Dieses von Gerard Paul Java geschriebene Programm ist eines der besten Network Statistics Utilities, die es auf dem Markt gibt. Wie Sie in der folgenden Auflistung sehen werden, erlaubt Ihnen dieses ncurses-basierende Program verschiedenste Statistiken anfertigen zu lassen. Im Laufe des Kapitels werden Sie mehr
über diese Statistiken und die dazugehörigen Module erfahren. Dafür nehmen
wir das offizielle Howto von Gerard Paul Java zur Hand.
TCP Info
UDP Counts
ICMP und OSPF Informations
Ethernet Load Info
Node Stats
IP Checksum Errors
Und so weiter
Bevor wir uns an die genaue Beschreibung dieses Netzwerk-Monitors machen,
werde ich Ihnen ein kurzes Summary über dieses Programm vorstellen, damit Sie
einen Überblick bekommen, was dieses Programm für Sie leisten kann.
Funktionsumfang
Dieses Programm enthält einen IP-Traffic-Monitor, der Ihnen ein Bild über den
IP-Datenverkehr, der sich über Ihr Netzwerk bewegt, verschafft. Dazu gehören Informationen über die TCP-Flags, Paket- und Byte-Counts. Außerdem
noch Details über ICMP- und OSPF-Pakettypen.
Zeigt allgemeine und detaillierte Interfacestatistiken über IP, TCP, UDP,
ICMP, non-IP und andere IP-Pakete, IP-Checksummenfehler, Interfaceaktivitäten und Statistiken über die Größe der passierenden Pakete.
Einen TCP- und UPD-Service-Monitor, der Ihnen anzeigt, wie viele eingehende und ausgehende Pakete gezählt wurden.
Ein LAN-Statistik-Modul, das aktive Hosts sucht und deren Datentransferaktivität aufzeigt.
TCP-, UDP- und andere Displayfilter, die es Ihnen ermöglichen, nur die Daten
anzeigen zu lassen, die Sie auch sehen wollen.
Eine Loggingfunktion
Unterstützt Ethernet, FDDI, ISDN, SLIP, PPP und loopback Interfacetypen
Sandini Bib
2.2 IPTraf
53
Macht sich das build-in-raw-Interface des Linuxkernels zu Nutzen, um über
eine enorm große Anzahl von verschiedenen Netzwerkkarten verfügbar zu
sein.
Menügesteuert
Unterstützte Protokolle
IP
TCP
UDP
ICMP
IGMP
IGP
IGRP
OSPF
ARP
RARP
Nicht-IP-Packete werden einfach als »non-IP« deklariert und – in Ethernet LANS –
mit der passenden Ethernetadresse versorgt.
Unterstützte Schnittstellen
Local loopback
All Linux-supported Ethernet interfaces
All Linux-supported FDDI interfaces
SLIP
Asynchronous PPP
Synchronous PPP over ISDN
ISDN with Raw IP encapsulation
ISDN with Cisco HDLC encapsulation
Parallel Line IP
Nun sollten Sie oberflächlich über IPTraf Bescheid wissen und wir können uns an
die Installation machen.
2.2.2
Installation
Bevor wir das Paket installieren können, müssen wir es aus einer sicheren Quelle beziehen. Da die meisten Distributionen IPTraf mitliefern, können Sie sich den Download sparen. Falls Sie aber die aktuellste Version haben wollen, werden Sie daran
nicht vorbeikommen. Eine mögliche Bezugsadresse wäre: ftp://iptraf.seul.org/pub/
iptraf.
Sandini Bib
54
2 Netzwerk-Tools
Falls Sie das Paket über den Installationsmanager Ihrer Distribution installieren,
können Sie diesen Punkt überspringen, falls nicht, folgen Sie bitte den Anweisungen um das Programm korrekt in Ihr System mit einzubinden.
Als Erstes müssen Sie das Paket entpacken. Dazu geben Sie bitte folgende Befehle
ein:
Linux:~# tar zxvf iptraf-version.i386.bin.tar.gz
Linux:~# cd iptraf-version
Linux:~# ./Setup
Damit werden alle benötigten Ordner und Dateien erzeugt und Sie können IPTraf
starten.
2.2.3
Start
IPTraf bietet Ihnen für die Arbeit ein sehr gutes Menü an. Dieses können Sie von
der Konsole mit folgendem Befehl aufrufen:
Linux:~# iptraf
Nachdem Sie den Befehl ausgeführt haben, erscheint das in Abbildung 2.1
gezeigte Menü.
Abbildung 2.1 Hauptmenü
Sie können IPTraf aber auch mit einigen Argumenten starten. Was diese bewirken wird Ihnen Tabelle 2.2 zeigen.
Sandini Bib
2.2 IPTraf
55
Argumente
Beschreibung
-i iface
Wenn Sie dieses Argument übergeben, zeigt Ihnen IPTraf sofort das
gewünschte Interface, falls Sie -i all übergeben, werden Ihnen alle
Interfaces gezeigt.
-g
Startet die allgemeinen Interface-Statistiken
-d iface
Zeigt detaillierte Statistiken für das spezifizierte Interface
-s iface
Startet den TCP/UDP Traffic-Monitor für das angegebene Interface
-z iface
Startet den Packet Size Breakdown für das angegebene Interface
-l iface
Startet den LAN Station Manager für das aufgeführte Interface. Auch
hier hat man die Möglichkeit mit -l all alle Interfaces aufzeigen zu
lassen.
-t timeout
Diesen Parameter finden Sie nur in der Kommandozeile; im Menümodus
wird er ignoriert. Falls Sie dieses Argument zusätzlich mit einem anderen übergeben, wird die aufgerufene Option für timeout Minuten aktiv
sein. Falls Sie diesen Parameter nicht angeben, wird die Option so lange
laufen, bis Sie den Exitbutton betätigen.
-B
Diese Option leitet alle Ausgaben nach /dev/null (ins Nirwana), schließt
die Standardeingabe und stellt das Programm in den Hintergrund. Dieses Argument kann nur zusammen mit den Optionen: -i, -g, -d, -s, -z
oder -l übergeben werden.
-L Dateiname
Mit dieser Option können Sie ein eigenes Logfile spezifizieren, falls Sie
keinen absoluten Pfadnamen angeben, wird ein neuer Ordner im Standardlogverzeichnis erstellt.
-q
Diesen Parameter benötigen Sie nicht mehr.
-f
Seien Sie bei der Benutzung dieses Parameters sehr vorsichtig, er
bewirkt, dass IPTraf alle Einstellungen auf Null zurücksetzt und somit
»denkt«, es wäre sein erster Aufruf.
-h
Ruft die Hilfefunktion auf
Tabelle 2.2 Parameter für IPTraf
2.2.4
IPTraf Basics
Bevor wir auf die einzelnen Möglichkeiten, die dieses Programm bietet, eingehen,
werden wir einige Basics darüber erfahren.
Zahlensystem
IPTraf kann Bytes und Pakete als Wert (Counts) ausgeben. Wenn diese größer
werden, passt es das Programm an und stellt Ihnen eine andere Werteeinheit vor.
Eine Zahl, die alleine – ohne einen Anhang – ausgegeben wird, stellt einen exakten Wert dar. In Tabelle 2.3 sehen Sie alle möglichen Einheiten, die einer Zahl vorgestellt werden können, und die passende Erklärung dazu.
Sandini Bib
56
2 Netzwerk-Tools
Anhang
Bedeutung
K
K steht für Kilo und bedeutet tausend
M
M steht für Mega und bedeutet eine Million
G
G steht für Giga und bedeutet eine Milliarde
T
T steht für Tera und bedeutet eine Billion
Tabelle 2.3 Mögliche Zahlenwerte
Tabelle 2.4 enthält einige Beispiele zu diesen Zahlenwerten
Beispiel
Bedeutung
18827937
18827937
1882K
Ungefähr 1882000
1882M
Ungefähr 1882000000
1882G
Ungefähr 1882000000000
1882T
Ungefähr 1882000000000000
Tabelle 2.4 Beispiele zu den Zahlenwerten
Instanzen und Logging
Seit Version 2.4 ist es möglich, mehrere Instanzen eines Moduls zur selben Zeit in
unterschiedlichen Prozessen laufen zu lassen (so können Sie jetzt zum Beispiel
mehre IP Traffic-Monitore laufen lassen), obwohl Sie dabei unbedingt beachten
müssen, dass jeweils nur eine Instanz auf ein bestimmtes Interface »lauschen«
kann (oder auf alle). Wie jede Regel hat auch diese eine Ausnahme. So können Sie
dieses neue Feature für alle Module anwenden bis auf das General Interface
Statistics Modul, welches immer noch auf eine Instanz beschränkt ist.
Diese Neuerung hat zur Folge, dass nun jede Instanz eigene Logfiles mit dem jeweiligen Instanznamen abhängig von ihrer Instanz oder vom Interface, auf dem
sie lauschen generiert. Falls Sie die Loggingoption aktiviert haben, wird IPTraf
Sie nach einem Dateinamen dafür fragen und Ihnen dabei auch einen Defaultnamen vorschlagen. Sie können diesen Defaultwert oder den von Ihnen spezifizierten Dateinamen mit Drücken der Eingabetaste (Enter) annehmen oder Logging mit der Tastenkombination (STRG) + (X) abschalten. Abbildung 2.2 zeigt das
dazugehörige Menüfenster.
Sandini Bib
2.2 IPTraf
57
Abbildung 2.2 Dateiname für Logfile
Unterstütze Netzwerkinterfaces
Tabelle 2.5 zeigt die derzeit unterstützten Netzwerkinterfacetypen.
Interfacetyp
Beschreibung
Lo
lo bezeichnet das Loopbackinterface (IP-Adresse ist 127.0.0.1)
eth n
Eth bezeichnet ein Ethernetinterface, n beginnt bei 0 und erhöht sich für
jedes weitere Interface um den Wert eins. So lautet das erste Ethernetinterface eines Rechners eth0, das zweite eth1 und so weiter.
Fddi n
Bezeichnet ein FDDI Interface, wobei auch hier n bei 0 beginnt.
Ppp n
Bezeichnet ein PPP Interface, auch hier startet n bei 0 und erhöht für jedes
weitere Interface den Wert um 1.
sli n
Bezeichnet ein SLIP Interface, auch hier beginnt n bei 0.
ippp n
Bezeichnet ein synchrones PPP Interface, welches ISDN benützt, n startet
auch hier bei 0.
isnd n
Obwohl man ISDN Interfaces willkürliche Namen geben kann, sollte
man diese isdn n (n steht hier wieder für einen Wert beginnend bei 0, so
dass das erste Interface den Namen isdn0, das zweite isdn1 … trägt), nennen, da nur so gewährleistet ist, dass IPTraf mit Ihren ISDN Interfaces
arbeiten kann. IPTraf unterstützt neben dem oben erwähnten synchronen
ISDN auch raw IP und Cisco HDLC encapsulation.
plip n
Bezeichnet plip-Interfaces, das sind Point–to–Point-Verbindungen, die
über den Parallelport laufen.
Tabelle 2.5 Unterstützte Netzwerkinterfacetypen
Bitte benutzen Sie die in Tabelle 2.5 aufgeführten Namen für Ihre Interfaces, da
IPTraf ansonsten nicht korrekt funktionieren wird.
Sandini Bib
58
2.2.5
2 Netzwerk-Tools
IP Traffic-Monitor
Falls Sie IPTraf mit der Option –i starten oder den ersten Punkt im Menü ausführen, gelangen Sie zu dem IP Traffic-Monitor. Der IP Traffic-Monitor ist ein Echtzeit-Überwachungssystem, das alle Pakete auf den erkannten Interfaces abfängt
und die Informationen darin dekodiert und anzeigt. Zusätzlich wird auch das dazugehörige Protokoll dazu ausgegeben.
Der IP Traffic-Monitor besteht aus zwei Fenstern. Beide können durch den Up- und
Down-Button durchgescrolled werden. Abbildung 2.3 zeigt den IP Traffic-Monitor.
Abbildung 2.3 IP Traffic Monitor
Im Folgenden werden wir sehen, welche Informationen die beiden Fenster beinhalten und wie man sie steuern kann.
Das obere Fenster
Dieses Fenster zeigt die aktuell erkannten TCP-Verbindungen und Informationen
über die TCP-Pakete. Man kann es in folgende Unterpunkte aufteilen:
Quelladresse und Quellport
Packet count
Byte count
Quell Mac-Adresse
Packetgröße
Window-Größe
TCP Flag-Status
Closed/Idle/Timed Out Connections
Sortieren der TCP-Einträge
Sandini Bib
2.2 IPTraf
59
Quelladresse und Quellport
Wie der Name schon sagt, kann man hier die Quelladresse und den Quellport
eines Pakets – dargestellt durch address:port – ersehen.
Packet count
Zeigt die Anzahl der bei dieser TCP-Verbindungen angekommenen Pakete.
Byte count
Dieses Feld zeigt die Anzahl, der Bytes, die bei dieser TCP-Verbindung angekommen sind. Die Summe dabei errechnet sich aus dem kompletten IP bzw. TCP Header und den aktuellen Daten, Data Link Header werden dabei nicht mit eingerechnet.
Quell Mac-Adresse
Gibt die Mac-Adresse des Host in Ihrem LAN an, der das Paket übergeben hat.
Dies kann man durch Drücken der M-Taste ersehen, falls man Source MAC addrs
in traffic monitor im Configure…- Menü aktiviert hat.
Paketgröße
Dieses Feld gibt die Größe des zuletzt angekommenen Pakets an, wobei auch hier
der Data Link Header nicht mit eingerechnet ist. Wie auch schon das Feld zuvor
können Sie dieses durch Drücken der M-Taste für mehr TCP-Informationen einsehen.
Window-Größe
Durch Drücken der M-Taste können Sie bei diesem Feld die Window-Größe des
zuletzt angekommenen Paketes einsehen.
TCP Flag-Status
Dieses Feld zeigt Ihnen die Flags des zuletzt angekommenen Pakets an. Mögliche
Optionen hierbei könnten sein:
Flag
Erklärung
S
Beschreibt ein SYN Flag. Um eine Verbindung vorzubereiten, wird hierbei eine
Synchronisation vorgenommen. Falls nur ein S (S--) vorhanden ist, will der Quellhost eine Verbindung initialisieren. Falls auch ein A vorhanden ist (S-A-), handelt
es sich um ein Acknowledgement als Antwort auf eine bereits gestellte Verbindungsanfrage.
A
ACK. Hierbei handelt es sich wie bereits beschrieben um ein Acknowledgement
auf ein empfangenes Paket.
P
PSH beschreibt eine Anfrage alle Daten an die Spitze der Warteschlange zu stellen.
U
URG besagt, dass das Paket wichtige Daten enthält.
RESET
Ein RST Flag besagt, dass der Quellhost die Verbindung beendet.
DONE
Alle Daten der Verbindung und ein FIN-Paket wurden gesendet, um die Verbindung zu beenden. Der andere beteiligte Host hat dem aber noch nicht zugestimmt.
Tabelle 2.6 Mögliche Optionen für Flag-Status
Sandini Bib
60
2 Netzwerk-Tools
Flag
Erklärung
CLOSED
Hierbei wurde das FIN-Paket durch den anderen Host mit einem angenommen
und zugestimmt (acknowledged).
-
Es ist kein Flag gesetzt.
Tabelle 2.6 Mögliche Optionen für Flag-Status (Forts.)
Closed/Idle/Timed Out Connections
Ein TCP-Verbindungseintrag, der geschlossen wird, wird zurückgesetzt oder
bleibt untätig, bis er durch neue Verbindungen ersetzt wird. Falls diese aber zu
häufig vorkommen, kann es zu Fehlern kommen.
IPTraf kann auch hier Abhilfe schaffen. Es kann so konfiguriert werden, dass es
automatisch alle geschlossenen, zurückgesetzten oder untätigen Verbindungen
löscht (dies erreichen Sie durch die TCP closed/idle persistence-Konfigurationsoption oder durch Drücken der Taste (F)).
Sortieren der TCP-Einträge
IPTraf bietet die Möglichkeit TCP-Einträge mit Hilfe von einigen setzbaren Kriterien zu sortieren. Das Fenster mit den verfügbaren Sortierungskriterien erreichen
Sie durch Drücken der Taste (S). Falls Sie die Einträge nach packet counts sortieren wollen, benützen Sie die Taste (P), für ein Sortieren nach byte counts die Taste
B. Falls Sie eine andere Taste betätigen, wird das Fenster geschlossen und die
Aktion abgebrochen.
Abbildung 2.4 TCP-Einträge nach bestimmten Kriterien sortieren
Sandini Bib
2.2 IPTraf
61
Das untere Fenster
Dieses Fenster bringt Ihnen ebenfalls einige Informationen über den Datenverkehr in Ihrem Netzwerk näher. Im Folgenden sehen Sie eine Auflistung der hier
erkannten Protokolle:
User Datagram Protocol (UDP)
Internet Control Message Protocol (ICMP)
Open Shortest-Path First (OSPF)
Interior Gateway Routing Protocol (IGRP)
Interior Gateway Protocol (IGP)
Internet Group Management Protocol (IGMP)
General Routing Encapsulation (GRE)
Address Resolution Protocol (ARP)
Reverse Address Resolution Protocol (RARP)
Von allen Paketen werden Sie hier nur das erste IP-Fragment aufgezeigt finden.
Damit Sie die Protokolle leichter erkennen können, hat man sich dazu entschlossen, jedem einen bestimmten Farbcode zuzuteilen. Tabelle 2.7 zeigt zu jedem
Protokoll die dazugehörigen Farben.
Protokoll
Farbschema
UDP
Rot auf Weiß
ICMP
Gelb auf Blau
OSPF
Schwarz auf Zyan
IGRP
Helles Weiß auf Zyan
IGP
Rot auf Zyan
IGMP
Hellgrün auf Blau
GRE
Blau auf Weiß
ARP
Helles Weiß auf Rot
RARP
Helles Weiß auf Rot
Anderes IP
Gelb auf Rot
Non IP
Gelb auf Rot
Tabelle 2.7 Farbschemata zu den dazugehörigen Protokollen
Sie können auch hier durch die möglichen 512 Einträge mit den Up- und DownTasten scrollen. Außerdem scrollt IPTraf automatisch jedes Mal, wenn ein neuer
Eintrag hinzukommt. Falls mehr als 512 Einträge in der Liste sind und neue dazukommen, werden die alten gelöscht.
Sandini Bib
62
2 Netzwerk-Tools
Bei Paketen, die von einem Host im LAN geschickt wurden, wird zusätzlich noch die
MAC-Adresse des Absenders angezeigt (Sie können dies durch das Aktivieren der
Source MAC addrs in traffic monitor-Option im Konfigurationsmenü erreichen).
Grundsätzlich enthält ein Eintrag im unteren Fenster das Protokoll des Pakets, die IP
Datagrammgröße, die Quell- und Zieladresse und das Interface, an dem das Paket
angekommen ist. Bei bestimmten Protokollen ist es jedoch der Fall, dass mehr Informationen angezeigt werden. Für welche Protokolle dies gilt und welche zusätzlichen Informationen angezeigt werden, können Sie im Folgenden ersehen.
ICMP
ICMP-Einträge haben folgendes Format:
ICMP type (subtype) (size bytes) from source to destination [(src
HWaddr srcMACaddress)] on interface
Tabelle 2.8 zeigt mögliche Werte für das Argument type.
Werte
Beschreibung
echo req, echo rply
ICMP echo request und reply. Normalerweise von Ping und anderen
Netzwerkdiagnoseprogrammen genutzt.
dest unrch
ICMP destination unreachable. Ein Fehler ist aufgetreten, so dass das
Ziel nicht erreicht werden konnte.
redirect
ICMP redirect. Normalerweise werden diese Nachrichten von einem
Router generiert, um den Host mitzuteilen, dass ein besserer Gateway
zur Verfügung steht.
src qnch
Das ICMP source quench ist eine Art von Flowcontrole-Mechanismus,
der dem Host dazu bringt, nichts mehr zu übermitteln.
time excd
Zeigt TTL-Werte derjenigen Pakete an, die ihr Ziel nicht erreicht
haben. Meistens liegt das daran, dass das Ziel zu weit entfernt oder
nicht erreichbar ist.
router adv
ICMP router advertisement
router sol
ICMP router solicitation
timestmp req
ICMP timestamp request
timestmp rep
ICMP timestamp reply
info req
ICMP information request
info rep
ICMP information reply
addr mask req
ICMP address mask request
addr mask rep
ICMP address mask reply
param prob
ICMP parameter problem
bad/unknown
Ein nicht bekanntes oder beschädigtes ICMP-Paket wurde empfangen.
Tabelle 2.8 Mögliche Wert für type
Sandini Bib
2.2 IPTraf
63
Auch Destination Unreachable enthält weiterführende Informationen. Die möglichen Argumente hierfür finden Sie in Tabelle 2.9.
Argumente
Erklärung
ntwk
Netzwerk nicht erreichbar
host
Host nicht erreichbar
proto
Protokoll nicht erreichbar
port
Port nicht erreichbar
pkt fltrd
Paket gefiltert (normalerweise bei einer ACL auf einer Firewall oder
auf einem Router)
DF set
Das Paket muss an irgendeiner Stelle geteilt werden, doch das don’t
fragment bit ist gesetzt.
src rte fail
Quellroute ist fehlgeschlagen
src isltd
Quelle ist isoliert (nicht mehr in Gebrauch)
net comm denied
Network communication denied
nost comm denied
Host communication denied
net unrch for TOS
Das Netzwerk ist für den spezifizierten type-of-service-Wert nicht
erreichbar.
host unrch for TOS
Der Host ist für den spezifizierten type-of-service-Wert nicht erreichbar.
prec violtn
Precedence violation (Verletzung der Priorität)
prec cutoff
Precedence cutoff
dest net unkn
Zielnetzwerk nicht bekannt
dest hots unkn
Zielhost nicht bekannt
Tabelle 2.9 Argumente für Destination Unreachable
OSPF
Auch das OSPF-Protokoll schenkt uns mehr Informationen. Das Format hierfür
sieht folgendermaßen aus:
OSPF type (a=area r=router) (size bytes) from source to
destination [(src HWaddr srcMACaddress)] on interface
Tabelle 2.10 zeigt mögliche Werte für das Argument type.
Wert
Beschreibung
hlo
OSPF hello. Diese Nachrichten bauen OSPF-Verbindungen auf und
halten Router über die Verfügbarkeit auf dem Laufenden.
DB desc
OSPF Database Description
LSR
OSPF Link State Request
Tabelle 2.10 Mögliche Werte für type
Sandini Bib
64
2 Netzwerk-Tools
Wert
Beschreibung
LSU
OSPF Link State Update. Diese Nachrichten zeigen den Status eines
Netzwerklinks.
LSA
OSPF Link State Acknowledgement
Tabelle 2.10 Mögliche Werte für type (Forts.)
2.2.6
General Interface Statistics
Die zweite Menüoption, die uns IPTraf bietet, gibt uns die Möglichkeit eine Auflistung aller verbundenen Netzwerkschnittstellen und einige allgemeine Informationen über Paket Counts zu erhalten. Wie Sie aus Abbildung 2.5 ersehen können, werden ein- und ausgehende Pakete gezählt und in drei Bereiche aufgeteilt:
1. IP
2. Non IP
3. Bad IP (für IP Checksummenfehler)
4. Außerdem enthält dieses Menüfenster ein Activityfeld, welches uns über den
Netzwerkverkehr auf dem Interface unterrichtet (Sie können zwischen kbits/
s und k/bytes im Activity Mode im Konfigurationsmenü wechseln).
Abbildung 2.5 General Interface Statistics
Falls Sie direkt von der Konsole in dieses Menüfenster gelangen wollen, geben Sie
bitte folgenden Befehl ein:
Linux:~# iptraf –g
Um von diesem Menüpunkt wieder zurück ins Hauptmenü zu kommen, drücken
Sie bitte die Tasten (X) oder (Q).
Sandini Bib
2.2 IPTraf
2.2.7
65
Detailed Interface Statistics
Dieser dritte Menüpunkt ist dem General Interface Statistics Menüpunkt sehr
ähnlich, gibt uns aber – wie Sie der nächsten Auflistung entnehmen können –
wesentlich mehr Informationen aus:
IP packet und byte counts
TCP packet und byte counts
UDP packet und byte count
ICMP packet und byte counts
Andere IP-Typen packet und byte counts
Non-IP packet und byte counts
Checksummenfehler count
Interface-Aktivität
Wie Sie anhand von Abbildung 2.6 sehen können, beinhaltet der obere Teil des
Menüfensters byte und packet counts für abgefangenen IP- und Non-IP-Pakete.
Den unteren Teil bildet die Gesamtheit alle eingehenden und ausgehenden Datenraten. Auch hier können Sie im Konfigurationsmenü wieder bestimmen, in
welcher Einheit (kbits/s oder kbytes/s) die Raten angezeigt werden sollen. Falls
Sie diesen Menüpunkt direkt von der Konsole aus aufrufen wollen, geben Sie
bitte folgenden Befehl ein:
Linux:~# iptraf –d eth0
Diese Syntax wird das Menü aufrufen und es veranlassen auf dem Interface eth0
zu lauschen. Welches Interface Sie bei diesem Befehl übergeben, bleibt Ihnen
überlassen, Sie sollten jedoch darauf achten, dass Sie eines angeben, da IPTraf ansonsten nicht starten wird.
Abbildung 2.6 Detailed Interface Statistics
Sandini Bib
66
2.2.8
2 Netzwerk-Tools
Statistical Breakdowns
Statistical Breakdown: Packet Sizes
Falls Sie IPTraf schon länger benutzen, werden Sie sich vielleicht daran erinnern,
dass dieses Modul früher in detailed interface statistics eingebettet war. Doch nun
hat man sich entschlossen daraus einen eigenen Menüpunkt zu machen, der die
Aufgabe hat, die Maximum Transmission Unit (MTU) der Schnittstelle in 20 Teile
aufzusplittern, wobei jeder Teil einen bestimmten Bereich umfasst. In Abbildung
2.7 können Sie diesen Menüpunkt betrachten.
Abbildung 2.7 Statistical Breakdown: Packet Sizes
Natürlich können Sie auch diesen Punkt direkt von der Konsole aufrufen. Geben
Sie dazu folgenden Befehl ein:
Linux:~# iptraf –z interface
Beachten Sie dabei, dass Sie ein Interface (zum Beispiel eth0) angeben, da IPTraf
ansonsten nicht starten wird.
Falls Sie Logging aktiviert haben, so finden Sie die Logdateien für diesen Punkt
unter folgendem Namen:
packet_size-interface.log
Statistical Breakdown: TCP and UDP Traffic Statistics
Dieser Menüpunkt generiert TCP- und UDP-Statistiken und zeigt Ihnen dabei
alle Counts an, die als Ziel oder als Quelle einen Port haben, der unter 1024 liegt
(well-known Ports). Natürlich gibt es aber auch Applikationen, die Ports über
dieser Grenze benutzen. Falls diese für Sie interessant sind, können, Sie sie über
Sandini Bib
2.2 IPTraf
67
den Menüpunkt Configure/Additional port... ebenfalls der Überwachung durch IPTraf unterstellen. Wie Sie anhand von Abbildung 2.8 sehen können enthält dieses
Fenster folgende Informationen:
Protokoll (TCP oder UDP)
Portnummer
Die Anzahl der Counts (Pakete und Bytes), die diese spezielle Port/Protokoll
Kombination aufweisen
Die Anzahl der Counts, die für eine bestimmte Port/Protokoll-Kombination
bestimmt waren
Die Anzahl der Counts, die von dieser Port/Protokoll Kombination kommen
Beachten Sie dabei bitte, dass auch hierbei der Data Link Header nicht zu den
Bytes dazugerechnet wird.
Abbildung 2.8 Statistical Breakdown: TCP and UDP Traffic Statistics
Wie Sie weiter aus Abbildung 2.8 ersehen können, sind Einträge, die das UDP betreffen, grün unterlegt und TCP-Einträge gelb. Die Standardlogdatei finden Sie
unter folgendem Namen:
tcp_udp_services-interface.log
TCP/UDP Einträge sortieren
Auch hier haben wir wieder die Möglichkeit unsere Einträge nach bestimmten Kriterien sortieren zu lassen. Um das Fenster mit den möglichen Optionen dazu zu öffnen drücken Sie bitte die (S)-Taste und es wird das in Abbildung 2.9 gezeigte Fenster
erscheinen, welches Ihnen einige Optionen für das Sortieren zur Auswahl stellt.
Sandini Bib
68
2 Netzwerk-Tools
Abbildung 2.9 Sortierungsfunktion
Um diesen Menüpunkt direkt von der Shell aufzurufen benötigen Sie folgenden
Befehl:
Linux:~# iptraf –s interface
2.2.9
LAN Station Statistics
Wie Sie aus Abbildung 2.10 erkennen können, steht vor jeder Statistikzeile eine
gelbe Zeile, die die Mac-Adresse und den LAN Type (Ethernet, PLIP, FDDI) aufzeigt. Die darunter liegende Zeile beinhaltet dahingegen sehr viel mehr Informationen. Welche das genau sind, erfahren Sie im Folgenden:
Gesamtsumme aller eingehenden Pakete
Gesamtsumme aller eingehenden IP-Pakete
Gesamtsumme der eingehenden Bytes
Eingangsrate
Gesamtsumme aller ausgehenden Pakete
Gesamtsumme aller ausgehenden IP-Pakete
Gesamtsumme der ausgehenden Bytes
Ausgangsrate (Sie können auch hier die Raten im Activity mode des Konfigurationsmenüs – kbits/s oder kbytes/s – ändern)
Bitte beachten Sie dabei, dass bei der Data Link Header diesmal in den Bytes
eingerechnet ist. Die Standardloggingdatei für dieses Modul heißt lan_
statistics-n.log, wobei n für die jeweilige Instanz steht.
Sandini Bib
2.2 IPTraf
69
Abbildung 2.10 LAN Station-Monitor
Sortieren der Einträge
An dieser Stelle des Kapitels werden Sie sicherlich nicht mehr überrascht sein,
dass uns die Option zur Verfügung steht, und Sie werden inzwischen auch eine
gewisse Intuition für deren Bedienung entwickelt haben. Nichtsdestotrotz wollen
wir auch jetzt wieder auf die Sortierungsoption eingehen und werfen dazu einen
Blick auf Abbildung 2.11, wo wir erkennen können, dass diese Option mit der
Taste (S) aufgerufen wird. Die weiteren Tastenkombinationen werde ich nicht
mehr ansprechen, da Sie sie ja aus der Abbildung ablesen können.
Abbildung 2.11 Sortierungsfunktion des LAN Station-Monitors
Sandini Bib
70
2 Netzwerk-Tools
2.2.10 Anzeigefilter
Dieses Modul ist kein Überwachungsmonitor oder Ähnliches, es gibt uns vielmehr die Möglichkeit die von IPTraf angezeigten Informationen so zu filtern,
dass aus dieser unglaublich großen Menge an Daten die für uns wichtigen auf
dem Monitor sichtbar werden. Solche Filter wirken sich auch auf die Logeinträge
aus. Abbildung 2.12 zeigt Ihnen, wie Sie diesen Menüpunkt erreichen.
Abbildung 2.12 Anzeigefilter
Wie Sie dort erkennen können, erreichen Sie das Managementsystem der Anzeigefilter durch das Submenü FILTERS... . Dort haben wir die Auswahl zwischen folgenden Filtern, die wir sogleich genauer besprechen werden:
TCP
UDP
Other IP
ARP
RARP
Non IP
TCP-Filter
Aus Abbildung 2.13 können Sie erkennen, dass – falls Sie die TCP-Filter-Option
ausgewählt haben – ein neues Popupfenster aufspringt, welches Ihnen einige Optionen bietet, um die Ausgabe bestimmter TCP-Verbindungen zu unterbinden
oder zu verändern.
Sandini Bib
2.2 IPTraf
71
Abbildung 2.13 TCP-Filter-Option
Define new filter…
Die erste Option, die uns vom Popupfenster zur Verfügung gestellt wird, ist nach
einer Neuinstallation von IPTraf sicherlich die interessanteste, da IPTraf an dieser
Stelle noch keine Filter kennt. Wenn Sie diesen Punkt ausführen, wird das in Abbildung 2.14 gezeigte Fenster aufgehen und Sie nach einer Beschreibung für den
neuen Filter fragen. Geben Sie dort bitte einen passenden Namen ein und bestätigen Sie Ihre Eingabe.
Abbildung 2.14 Define new filter
Sandini Bib
72
2 Netzwerk-Tools
Wenn Sie eine Beschreibung für Ihren neuen Filter angegeben haben, wird das in
Abbildung 2.15 gezeigte Fenster aufspringen und Sie wieder nach einigen Informationen fragen.
Abbildung 2.15 Informationen für TCP-Filter
Füllen Sie als Erstes das Feld HOST NAME / IP ADDRESS aus. Um in das nächste
Feld zu hüpfen, benutzen Sie bitte die Tab–Taste. Falls Sie sich fragen, warum Sie
an dieser Stelle zwei Felder für die Angabe einer IP-Adresse finden, müssen Sie
sich nur kurz ins Gedächtnis rufen, dass eine TCP-Verbindung einen End- und einen Startpunkt hat, und genau diese beiden Punkte geben Sie in den Feldern an.
Dabei ist es egal, in welcher Reihenfolge Sie die Punkte angeben (ob zuerst Startoder Endpunkt).
Danach kommen Sie in das Feld WILDCARD MASK. Diese Maske ist der Subnetmask
sehr ähnlich, aber auf keinen Fall dasselbe. Sie benutzen diese Option, um bestimmte
Bits zu ignorieren. Setzen Sie eine 1 unter ein Bit, das Sie erkennen wollen, und eine
0 unter diejenigen, die ignoriert werden sollen. Im Folgenden sind einige Beispiele
aufgeführt, die Ihnen helfen die Wildcard mask zu verstehen.
Um den Host 207.0.115.44 zu erkennen
Enter IP address:207.0.115.44
Wildcard mask:
255.255.255.255
Um alle Host, die zum Netzwerk 202.47.132.x gehören, zu erkennen
Enter IP address:
202.47.132.0
Wildcard mask:
255.255.255.0
Um jeden Host mit egal welcher IP-Adresse zu erkennen
Sandini Bib
2.2 IPTraf
73
Enter IP address:
Wildcard mask
0.0.0.0
0.0.0.0
Das nächste auszufüllende Feld ist das PORT–Feld. Über dieses Feld gibt es nicht viel
zu sagen, nur dass Sie mit der Angabe einer 0 den Filter dazu bringen, dieses Feld zu
ignorieren. Außerdem sei noch gesagt, dass Sie ein größeres Augenmerk auf den
Zielport legen sollten, da die Quellports nach Belieben verändert werden können.
Das letzte Feld ist das INCLUDE/EXCLUDE-Feld, das es Ihnen erlaubt, Pakete, die
dem Filter entsprechen, entweder ein (I)- oder auszuschließen (E).
Nachdem Sie alle Angaben nochmals überprüft haben, können Sie diese mit der
Eingabetaste bestätigen und Sie werden eine weitere Maske erhalten. Sie können
so viele Masken ausfüllen, wie Sie wollen. Falls Sie mit Ihrer Filterdefinition jedoch fertig sind, so können Sie mit (STRG)+(X) diesen Menüpunkt verlassen. Im
Folgenden sehen Sie einige Beispiele, die Sie mit der oben beschriebenen Filteroption realisieren können.
Benutzen Sie dieses Beispiel, um den gesamten Netzwerkverkehr von Host
202.47.132.1 nach 207.0.115.44 zu sehen ohne dabei den TCP Port zu beachten.
Host name/IP address
202.47.132.2
Wildcard mask
255.255.255.255
Port
0
Include/Exclude
I
207.0.115.44
255.255.255.255
0
Falls Sie die Werte dieses Beispiels übernehmen, so werden Sie den gesamten
Netzwerkverkehr von 207.0.115.44 zum Netzwerk 202.47.32.0 sehen.
Host name/IP address
207.0.115.44
Wildcard mask
255.255.255.255
Port
0
Include/Exclude
I
202.47.132.0
255.255.255.0
0
Um den gesamten Webverkehr zu sehen, ohne dabei auf den Ziel- oder Quellhost
einzugehen, müssen Sie diese Einstellungen vornehmen.
Host name/IP address
0.0.0.0
Wildcard mask
0.0.0.0
Port
80
Include/Exclude
I
0.0.0.0
0.0.0.0
0
Um den Mailverkehr von irgendwoher zu einem bestimmten Host (202.47.132.2)
zu sehen, sind diese Einstellungen zu gebrauchen.
Host name/IP address
202.47.132.2
Wildcard mask
255.255.255.255
Port
25
Include/Exclude
I
0.0.0.0
0.0.0.0
0
Sandini Bib
74
2 Netzwerk-Tools
Um den gesamten Traffic von Host triblen.de zu books.triblen.de zu sehen, können
Sie das folgende Beispiel benutzen.
Host name/IP address
triblen.de
Wildcard mask
255.255.255.255
Port
0
0
Include/Exclude
I
books.triblen.de
255.255.255.255
Um den Netzwerkverkehr von 140.66.5.x nach irgendwo zu ignorieren, ist dieses
Listing für Sie geeignet.
Host name/IP address
Wildcard mask
Port
Include/Exclude
140.66.5.x
255.255.255.0
0
E
0.0.0.0
0.0.0.0
0
Das nächste Beispiel wird Ihnen zeigen, wie Sie den gesamten Netzwerkverkehr mit
einigen Ausnahmen (SMTP, Web und Netzwerkverkehr von/nach 207.0.115.44) betrachten können. Das ist wichtig, da Filter normalerweise nur das anzeigen, was
auch genau einem Filter entspricht.
Host name/IP address
Wildcard mask
Port
Include/Exclude
0.0.0.0
0.0.0.0
25
E
0.0.0.0
0.0.0.0
0
Host name/IP address
Wildcard mask
Port
Include/Exclude
0.0.0.0
0.0.0.0
80
E
0.0.0.0
0.0.0.0
0
Host name/IP address
Wildcard mask
Port
Include/Exclude
207.0.115.44
255.255.255.255
0
E
0.0.0.0
0.0.0.0
0
Host name/IP address
Wildcard mask
Port
Include/Exclude
0.0.0.0
0.0.0.0
0
I
0.0.0.0
0.0.0.0
0
Wie Sie sehen können, ist der Mailverkehr (Port 25), der Webverkehr (Port 80) und
der gesamte Verkehr von Host 207.0.115.44 mit einem E (ausschließen) gekennzeichnet, wohingegen der gesamte Restverkehr durch ein I (einschließen) vertreten ist.
Apply-Filter
Der zweite Punkt in der Liste für TCP Filter-Optionen erlaubt es Ihnen, die Filter,
die Sie im Menüpunkt DEFINE NEW FILTER ... erstellt haben, anzuwenden. Diese
Filter bleiben so lange aktiv, bis Sie sie wieder deaktivieren.
Sandini Bib
2.2 IPTraf
75
Detach-Filter
Dieser Punkt deaktiviert von Ihnen ausgewählte Filter wieder.
Edit-Filter
Um einen Filter zu verändern brauchen Sie diese Option. Wenn Sie sie aktiviert
haben, wird das in Abbildung 2.16 gezeigte Fenster mit allen von Ihnen spezifizierten Filtern erscheinen, durch das Sie mit den Pfeiltasten scrollen können, um
dann mit der Eingabetaste den gewünschten Filter zu aktivieren und im darauf
folgenden Dialogfeld zu editieren. Beachten Sie dabei bitte, dass Sie den editierten Filter wieder neu aufnehmen müssen (APPLY FILTER-Punkt).
Abbildung 2.16 Edit-Filter
Delete-Filter
Diese Option gibt Ihnen die Möglichkeit bestimmte Filter zu löschen.
UDP-Filter
Um Wiederholungen zu vermeiden werden wir an dieser Stelle nicht weiter auf
die Erstellung/Änderung etc. eingehen, da die Handhabung sehr der von den
TCP-Filtern ähnelt.
Weitere IP Protokoll-Filter
Seit Version 2.5 haben Sie die Möglichkeit über den Menüpunkt FILTERS.../OTHER
IP Filter für nicht TCP und nicht UDP zu definieren. Wie aus Abbildung 2.17 hervorgeht, ist der Anfangsdialog, den man erhält, wenn man die Option DEFINE
NEW FILTER wählt, derselbe, den man auch bei Filtern für TCP bzw. UDP erhält.
Wir können daraus schließen, dass auch die restliche Bedienung annähernd
gleich ist. Alle Abweichungen hierfür werden wir im Folgenden genauestens besprechen.
Sandini Bib
76
2 Netzwerk-Tools
Abbildung 2.17 Verschiedene Protokoll-Filter
Wenn Sie Ihre Beschreibung mit der Eingabetaste bestätigen, kommen Sie zum
nächsten Dialog, der, wie Sie der Abbildung 2.18 entnehmen können, mehr Optionen als üblich enthält.
Abbildung 2.18 Netzwerkdialog
Dieses Fenster sollte Ihnen bereits bekannt sein (siehe TCP- bzw. UDP-Filter) und
die Handhabung kein Problem mehr darstellen. Die einzige Neuerung hierbei
stellt das PROTOCOLS TO MATCH-Feld dar. Unter dieser Rubrik finden Sie weitere
Protokollarten, auf die Ihr Filter ausgerichtet werden kann. Um ein bestimmtes
Sandini Bib
2.2 IPTraf
77
Protokoll für den Filter zu aktivieren, schreiben Sie in das weiße Feld hinter dem
Protokollnamen ein Y, falls Sie wollen, dass der Filter Pakete eines Protokolls ignoriert, lassen Sie es einfach leer (Sie können auch irgendeinen anderen Buchstaben in das Feld setzen, das würde dasselbe bewirken).
Wahrscheinlich werden Sie noch einen weiteren kleinen, aber feinen und wichtigen Unterschied zwischen den beiden Dialogboxen bemerkt haben. So war die
Adressbezeichnung bei TCP- bzw. UDP-Dialogen first und last, hier jedoch source
und destination. Dies hat zu bedeuten, dass – im Gegensatz zu den TCP- und
UDP-Filtern – die Richtung der Pakete genau angegeben werden muss. Ein Paket,
das von 10.207.100.1 nach 10.209.100.2 geht, wird hierbei also ignoriert, falls es
von 10.207.100.2 nach 10.207.100.1 geht, bei TCP-Filtern würde es auch auf den
Filter zutreffen. Der Vollständigkeit halber werden wir auch hier einige Beispiele
aufführen.
Um alle OSPF-, IGP- und IGRP-Packete von egal woher nach egal wohin anzuzeigen, wählen Sie bitte folgendes Beispiel:
Address:
Wildcard mask:
Protocols to
match:
Include/Exclude:
0.0.0.0
0.0.0.0
OSPF: Y
IGP: Y
0.0.0.0
0.0.0.0
IGRP: Y
I
Um alle ICMP Pakete außer denjenigen, die für 207.0.115.45 bestimmt sind, anzuzeigen, hilft Ihnen das nächste Listing weiter.
Erster Eintrag:
Address:
Wildcard mask:
Protocols to
match:
Include/Exclude:
0.0.0.0
0.0.0.0
ICMP: Y
207.0.115.45
255.255.255.255
E
Zweiter Eintrag:
Address:
Wildcard mask:
Protocols to
match:
Include/Exclude:
0.0.0.0
0.0.0.0
ICMP: Y
0.0.0.0
0.0.0.0
I
Um das Buch bzw. dieses Kapitel nicht unnötig in die Länge zu ziehen, werden
wir die nächsten Optionen nicht genauer besprechen, da Sie diese bereits von den
TCP- und UDP-Filtern kennen. Es werden mit Sicherheit einige kleine Unterschiede in der Handhabung auftreten, die Sie aber ohne Probleme intuitiv lösen
können.
Sandini Bib
78
2 Netzwerk-Tools
2.2.11 IPTraf konfigurieren
IPTraf ist ein leicht zu konfigurierendes Programm, das seine Settings in die Datei
/var/local/iptraf/iptraf.cfg schreibt. Falls diese Datei nicht gefunden wird, benutzt
IPTraf die Defaulteinstellungen. Abbildung 2.19 zeigt das Konfigurationsmenü.
Abbildung 2.19 Konfigurationsmenü
Reverse DNS Lookups
Falls man diese Option aktiviert, wird IPTraf den passenden Host zu den Adressen in den IP-Paketen finden. Dabei startet der IP Traffic-Monitor den rvnamed
dns lookup Server, der im Background die Namensauflösung übernimmt, während IPTraf weiter Pakete erfasst.
Diese Option ist per Default nicht aktiviert. Sie sollten dabei beachten, dass diese
Option die Performance verringern kann.
TCP/UDP Service Names
Diese Option gibt einem die Möglichkeit IPTraf die Servicenamen anstatt der dazugehörigen Portnummern anzeigen zu lassen (zum Beispiel: pop3 statt 110
usw.). Die Servicenamen liest IPTraf dabei aus der Datei /etc/services, falls
dort für einen bestimmten Port kein Servicename aufgeführt ist, wird die Portnummer angezeigt.
Diese Option ist per Default nicht aktiviert. Sie sollten dabei beachten, dass auch
diese Option die Performance verringern kann.
Sandini Bib
2.2 IPTraf
79
Force promiscuous mode
Mit dieser Option können Sie alle TCP-Verbindungen, die Ihr LAN-Segment passieren, sehen, auch wenn diese nicht von Ihrer Maschine kommen bzw. für Ihren
Computer bestimmt sind. Falls Sie mehrere LAN-Schnittstellen haben, wird diese
Neuerung für alle aktiv (zum Beispiel Ethernet und FDDI).
Color
Wie Sie sicher schon erahnt haben, können Sie mit dieser Option festlegen, ob IPTraf Farben benutzen soll oder nicht. Wie wir bereits gesehen haben, sind die
Farbunterlegungen von bestimmten Protokollarten usw. sehr hilfreich. Sie sollten
deshalb diese Option aktiviert lassen.
Logging
Sie erinnern sich bestimmt noch an den Anfangsdialog, nachdem wir IPTraf das
erste Mal gestartet haben. Dieser Dialog hat uns nach einem Namen für das Logfile, in das es loggen soll, gefragt. Um das Logging in dieser Datei (oder in die Dateien der einzelnen Module) aber zu starten müssen Sie zuerst diese Option aktivieren. Dabei wird jeder Eintrag mit Datum und Zeit versehen. Welche Einträge
der IP Traffic-Monitor genau in die Datei schreibt, werden Sie im Folgenden erfahren:
Start des IP Traffic-Monitors
Empfang des ersten TCP-Paketes einer Verbindung. Falls es sich hierbei um
ein SYN-Paket handelt, wird dies ebenfalls in die Datei geschrieben (Das erste
empfangene Paket einer Verbindung muss nicht immer ein SYN sein, da es
durchaus vorkommen kann, dass Sie IPTraf starten und schon eine Verbindung besteht, dann wird das erste Paket, das der IP Traffic-Monitor empfängt,
kein SYN sein).
Empfang eines FIN
Das ACK eines FIN
Timouts von TCP-Einträgen
Alles was im unteren Fenster des IP Traffic-Monitors erscheint
Beenden des IP Traffic-Monitors
Falls Sie eine Logdatei sichern oder löschen wollen, sollten Sie dies auf keinen Fall
machen, wenn IPTraf noch in diese Datei loggt. Sie sollten als Erstes die Logdatei
umbenennen (zum Beispiel XXX.log.sav) und danach ein USR1-Signal an den
laufenden IPTraf-Prozess schicken (mit dem kill-Befehl). Das wird IPTraf dazu
veranlassen, das Logging zu stoppen und eine Datei mit dem ursprünglichen Namen zu erstellen und das Logging in dieser Datei wieder aufzunehmen. Jetzt können Sie die umbenannte Datei ohne Probleme löschen oder sichern.
Logging ist per Default nicht aktiviert.
Sandini Bib
80
2 Netzwerk-Tools
Activity mode
Sie können mit Hilfe dieser Option bestimmte Module veranlassen zwischen kilobits per second (kbits/s) und kilobytes per second (kbytes/s) umzuschalten.
Der Defaultwert liegt bei kilobits per second.
Source MAC addrs in traffic monitor
Wenn Sie diese Option aktivieren, wird IPTraf die Quell-MAC-Adresse für NonIP-Pakete im unteren Fenster anzeigen, falls diese auf einem Ethernet, FDDI oder
PLIP Interface ankommen. Bei TCP-Verbindungen reicht es, die M-Taste zu drücken, um die MAC-Adresse zu sehen. Für Pakete, die auf Schnittstellen, die keine
MAC-Adressen benutzen, (zum Beispiel PPP) ankommen, werden auch keine Informationen angezeigt.
Diese Option ist per Default deaktiviert. (Falls Sie sie aktivieren, wird die MACAdresse auch in den Logfiles auftauchen).
Timers…
Das Timers… -Submenü erlaubt es Ihnen, die in Abbildung 2.20 aufgeführten
Optionen zu verändern.
Abbildung 2.20 Timers-Submenü
TCP timeout…
Mit dieser Option können Sie das Zeitintervall angeben, nach dem leere (idle)
Verbindungen durch neue ersetzt werden. Sie können dies auf LANs reduzieren,
die nicht mit dem Internet verbunden sind oder die sehr schnelle Verbindungen
ins Internet haben.
Der Defaultwert liegt bei 15 Minuten.
Sandini Bib
2.2 IPTraf
81
Logging interval…
Dieser Menüpunkt bestimmt den Intervall zwischen dem Loggen von InterfaceStatistiken, TCP/UDP-Modulen und LAN Host-Statistiken. Der Defaultwert liegt
bei 60 Minuten. Falls Sie Logging nicht aktiviert haben, ist dieser Punkt offensichtlich bedeutungslos.
Screen Update Interval
Dieser Punkt betrifft das Updaten des Bildschirms und wirkt sich auf alle Module
von IPTraf aus. Der Defaultwert liegt bei 0, was bedeutet, dass der Bildschirm so
schnell wie möglich aktualisiert wird. Sie können diesen Wert auch höher setzen
und damit die Aktualisierungen hinauszögern. Sie sollten diese Option unbedingt in Erwägung ziehen, falls Sie IPTraf remote laufen haben (zum Beispiel
über eine Telnetsitzung), da ansonsten eine enorm hohe Netzwerkbelastung entstehen könnte.
TCP closed/idle persistence
Sie können mit dieser Option den Zeitabstand (in Minuten) angeben, zwischen
dem IPTraf das TCP-Fenster von leeren (idle), geschlossenen (closed) und timed
out-Einträgen klärt. Wenn Sie dieser Option den Parameter 0 angeben, werden
diese Verbindungen so lange angezeigt, bis sie durch neue ersetzt werden.
Additional port
Wir haben weiter oben gesehen, dass die TCP/UDP Service-Statistik-Module nur
privilegierte Services (Portnummern unter 1024) in die Statistiken aufnimmt.
Falls Sie einen zu überwachenden Service haben, der über dieser Grenze liegt
(zum Beispiel http-proxy auf 8080), müssen Sie dies hier angeben.
Sie werden dann ein Dialogfeld mit zwei Feldern sehen. Falls Sie nur einen speziellen Port (8080) in die Überwachung mit einschließen wollen, füllen Sie nur das erste
aus. Falls Sie aber einen bestimmten Bereich überwachen lassen wollen, füllen Sie
bitte auch das zweite Feld aus. Der Bereich geht dann vom Port im ersten Feld bis zu
dem im zweiten. Sie können auf diese Weise auch mehrere Bereiche definieren.
Delete port/range
Falls Sie die oben spezifizierten Portbereiche wieder löschen wollen, benutzen Sie
bitte diesen Menüpunkt.
Ethernet/PLIP host descriptions und FDDI host descriptions
Die Stations der LAN Station Statistics Monitor-Module basieren auf den dazugehörigen MAC-Adressen, da man sich diese sehr schlecht merken kann, hat man
diese beiden Module hinzugefügt, die einem durch Beschreibungen helfen sollen,
welche Station welche ist.
Falls Sie nun eine der beiden Optionen wählen, wird sich ein neues Fenster öffnen, das Sie fragen wird, ob Sie Beschreibungen verändern, löschen oder hinzufügen wollen.
Sandini Bib
82
2 Netzwerk-Tools
Um eine neue Beschreibung hinzuzufügen wählen Sie bitte die Option Add description. Es wird sich dann ein neues Dialogfenster öffnen, das Sie nach der
MAC-Adresse und der dazugehörigen Beschreibung fragen wird. Beachten Sie
bei der Eingabe der MAC-Adresse unbedingt die Groß- und Kleinschreibung!
Nachdem Sie Ihre Eingabe bestätigt haben, werden Sie die eingegebene Beschreibung neben der MAC-Adresse zusammen mit dem Frametypen (Ethernet, PLIP
oder FDDI) im LAN Station-Monitor finden.
Sie können so eingegebene bereits existierende Beschreibungen durch die Option
Edit description... aber auch wieder ändern. Falls Sie diesen Punkt aktivieren, werden Sie ein Listing mit allen bereits verfassten Beschreibungen erhalten, von denen Sie dann eine bestimmte auswählen. Danach können Sie die ausgefüllten Felder nach Belieben ändern.
Natürlich können Sie die gemachten Einträge auch komplett löschen. Sie müssen
dafür lediglich die Option Delete description... wählen.
2.2.12 Background-Operation
Nachdem Sie IPTraf nach Ihren Wünschen konfiguriert haben, können Sie das
Programm so einstellen, dass es im Hintergrund läuft und nur loggt. Es wird
dann aber keine Eingaben von der Tastatur erkennen oder Ausgaben auf den
Bildschirm werfen. Um dies zu bewerkstelligen, müssen Sie IPTraf von der Konsole mit der Option –B aufrufen (Damit es als Daemon läuft). Das folgende Listing
zeigt ein Beispiel, das Sie benutzen können, falls Sie das Programm für alle Interfaces im Hintergrund laufen lassen wollen.
Linux:~# iptraf –i all –B
Um das Modul Detailed Interface Statistics für das Interface eth0 für fünf Minuten
im Hintergrund laufen zu lassen, geben Sie bitte folgenden Befehl ein:
Linux:
~# iptraf –d eth0 –t 5 –B
Falls Sie das Argument –t nicht übergeben, läuft IPTraf ohne Zeitbeschränkung
im Hintergrund. Um es zu beenden, müssen Sie ein USR2 Signal an die Prozess
ID des Programms schicken, dazu müssen Sie aber zuerst mit folgendem Befehl
die pid (process id) finden:
Linux:~# ps ax | egrep iptraf
Linux:~# kill –USR2 pid
Wenn IPTraf im Hintergrund läuft, werden alle Fehlermeldungen in die Datei
daemon.log geschrieben.
Sandini Bib
2.3 NTop
2.3
83
NTop
Nach IPTraf ist NTop das zweite hervorragende Tool, das uns Informationen
über unser Netzwerk liefern kann. Die Vorteile von NTop liegen klar in der Darstellung des Traffics, der das Netzwerk durchquert.
Dabei bekommt man nach dem Start eine Liste von Rechnern, die zurzeit Traffic
(IP und non-IP) auf dem spezifizierten Netzwerk verursachen. NTop kann dabei
in zwei verschiedenen Modi ablaufen:
1. Konsolenmodus
2. Webmodus
2.3.1
Konsolenmodus
Der erste Modus, den wir besprechen werden, ist der Konsolenmodus, da dieser
einige Vorteile mit sich bringt:
Braucht weniger Ressourcen
Kann auf einem System ohne X-Server laufen
Ausgaben können leichter weiterverarbeitet werden
NTop im Konsolenmodus lässt sich in Skripte einbauen
Syntax
Die Syntax von NTop ist wieder einmal denkbar einfach gehalten:
Linux:~# ntop [Optionen]
Optionen
Da wir nun den allgemeinen Aufruf von NTop kennen, sollten wir uns daran machen, die verfügbaren Optionen dazu kennen zu lernen. Tabelle 2.11 enthält alle verfügbaren Optionen und gibt zu jedem aufgeführten Punkt eine kurze Beschreibung.
Option
Beschreibung
-I
Diese Option erlaubt es Ihnen, NTop im interaktiven Modus zu starten.
Dieses Flag ist veraltet und sollte nicht mehr benutzt werden, da sie durch das
zusätzliche Netzwerk-Browser-Programm »intop« ersetzt wurde (wir werden dieses Programm im Laufe dieses Kapitels noch besprechen).
-R
Spezifiziert die Filterregeln, die von NTop genutzt werden um Alarmmeldungen
oder Warnungen auszugeben, falls ein Paket (oder eine Paketfolge) dem angegebenen Filter entspricht.
Wir werden, die Filterregeln von NTop weiter unten in diesem Kapitel noch ausführlicher besprechen.
Tabelle 2.11 Verfügbare Optionen für NTop
Sandini Bib
84
2 Netzwerk-Tools
Option
Beschreibung
-r
Hiermit können Sie das Intervall (in Sekunden) angeben, das zwischen den einzelnen Updates der Bildschirmausgabe liegt.
Seien Sie bei dieser Option aber sehr vorsichtig, da (ähnlich zu IPTraf) ein zu häufiges Update der Bildschirmausgabe dazu führen kann, dass NTop nicht den gesamten Netzwerkverkehr abfangen und bearbeiten kann.
Der Defaultwert liegt bei 3 Sekunden.
Falls hierzu zusätzlich das Flag »-l« benutzt wird, gibt diese Option an, wie oft Einträge in das Logfile geschrieben werden.
-f
Mit dieser Option können Sie eine Datei angeben, die Aufzeichnungen über einen
Netzwerkverkehr, der von Tcpdump abgefangen wurde, enthält. NTop wird den
dort aufgezeichneten Verkehr benutzen.
Beachten Sie aber dabei, dass NTop kein Paket in Ihrem Netzwerk mehr abfangen
wird, nachdem Sie diese Flag gesetzt haben.
Wie man mit Tcpdump Netzwerkverkehr abfängt, werden wir im Laufe dieses
Kapitels noch erfahren.
-N
Hiermit geben Sie an, dass NTop den Netzwerkscanner nmap nicht benutzen darf.
-M
Nachdem Sie diese Option übergeben haben, wird NTop keine Netzwerkschnittstellen mehr mischen. Das bedeutet, dass NTop für jedes einzelne Interface eine
Statistik aufstellen wird.
-n
Falls Sie anstelle der gezeigten symbolischen Namen lieber IP-Adressen ausgegeben haben wollen, können Sie das mit dieser Option erreichen.
Sie sollten diese Option benutzen, wenn Sie keinen DNS zur Verfügung haben oder
dieser sehr ausgelastet ist.
Sie können zwischen den beiden Formaten (IP-Adressen und symbolische Namen)
durch das Drücken der N-Taste umschalten, während NTop läuft.
-p
Mit dieser Option geben Sie das IP-Protokoll bzw. die IP-Protokolle an, die NTop
überwachen soll. Das hierbei zu verwendende Format sieht folgendermaßen aus:
<Label>=<Protokollliste> [, <Label>=<Protokollliste> …].
Der Platzhalter »Label« kann von Ihnen zur Identifizierung der verschiedenen
Protokolllisten dienen.
Das Format des Platzhalters »Protokollliste« lautet:
<Protokoll 1>[|Protokoll 2]
Wobei das angegebene Protokoll entweder ein Protokollname aus der Datei /etc/
services oder eine numerische Portliste sein kann (zum Beispiel: 80 oder 2000-2090).
Falls Sie diese Option nicht spezifizieren, wird folgender Defaultwert verwendet:
FTP=ftp|ftp-data,
HTTP=http|www|https,
DNS=name|domain,
Telnet=telnet,login,
NBios-IP=netbios-ns|netbios-dgm|netbios-ssn,
Mail=pop-2|pop-3|kpop|smtp|imap|imap2,
Tabelle 2.11 Verfügbare Optionen für NTop (Forts.)
Sandini Bib
2.3 NTop
Option
85
Beschreibung
SNMP=snmp|snmp-trap,
NEWS=nntp,
NFS=mount|pcnfs|bwnfs|nfs|nfsd-status,
X11=6000-6010, SSH=ssh"
Falls Sie aber zum Beispiel alle Loginprogramme, die auf Ihren Rechnern laufen,
überprüfen wollen und diese Liste sehr lang würde, können Sie auch eine Datei
übergeben, die die Protokolllistenspezifikationen enthält. Dazu müssen Sie beim
Aufruf folgenden Befehl übergeben:
Linux:~# ntop -p Datei
-i
Diese Option gibt an, welches Netzwerkinterface NTop benutzen soll. Falls Sie
mehrere Schnittstellen angeben wollen, müssen Sie diese mit Kommas voneinander
trennen.
Zum Beispiel:
Linux:~# ntop -i "eth0,eth1,eth2,ipsec0"
Beachten Sie dabei aber, dass (außer Sie verwenden die Option -M) die Daten dieser
Schnittstellen zusammengemischt werden.
-e
Dieses Flag macht nur Sinn, falls Sie NTop im Webmodus betreiben, da Sie die
maximale Anzahl von HTML-Tabellenreihen angibt, die NTop anzeigen soll.
-w
Das ist die Option, die den NTop-Webserver startet und NTop somit in den Webmodus übergehen lässt.
Wir werden diese Option im Laufe dieses Kapitels noch genauer besprechen.
-W
Auch diese Option bezieht sich auf den Webmodus und wird daher später im
Kapitel genauer besprochen (Diese Option ermöglicht HTTPS).
-d
Wenn Sie diese Option übergeben, wird NTop zum Daemon und arbeitet im Hintergrund.
-S
Diese Option bewirkt, dass NTop Informationen über den Netzwerkverkehr bei
einem Shutdown speichern wird, so dass keine schon gewonnenen Daten während
den verschiedenen NTop-Sitzungen verloren gehen.
Beachten Sie dabei aber, dass Informationen über TCP-Sitzungen verloren gehen.
-P
Mit dieser Option können Sie bestimmen, wo Datenbankdateien (db-files) gesucht
oder erstellt werden.
Der Defaultwert ist ».«
Zusätzlich wird die Variable DBPATH/html zu der Suchliste für Web-Dateien hinzugefügt.
-m
Mit diesem Flag können Sie Subnetze angeben, deren Traffic lokal betrachtet wird.
Das Format hierzu ist:
<Netzwerkadresse>/<# Subnetzmasken – Bits> [Netzwerkadresse>/
<# Subnetzmasken – Bits>…]
Zum Beispiel:
140.140.19.0/24, 10.0.0.0/255.0.0.0
Tabelle 2.11 Verfügbare Optionen für NTop (Forts.)
Sandini Bib
86
2 Netzwerk-Tools
Option
Beschreibung
-l
Diese Option gibt an, dass in periodischen Abständen (spezifiziert mit der -r Flag)
Informationen über die Netzwerkdaten in die Datei ntop.log geschrieben werden.
-a
Per Default loggt NTop HTTP-Zugriffe in die Datei ntop.access.log im aktuellen
Verzeichnis. Sie können aber den Pfad dieser Datei (und somit die Datei selbst)
auch selbst übergeben.
-u
Durch diese Option können Sie den User, unter dem NTop nach dem Start laufen
wird, angeben. Dieser Username muss dabei ein gültiger Username aus der Passwortdatei /etc/passwd sein oder eine gültige numerische User ID.
-t
Dieses Flag gibt an, welches Level NTop bei der Verfolgung des Programmverlaufs
auf die Standardausgabe ausgeben soll. Sie müssen dieser Option einen Integerwert
von 0 (keine Verfolgung) bis 5 (volle Verfolgung zu Debugzwecken) zuweisen.
Der Defaultwert liegt bei 3.
Je höher der Level wird, desto mehr Informationen erhalten Sie.
-F
Ähnlich wie NeTraMet spezifiziert diese Option die Netzwerk »Flows«. Ein »Flow«
ist eine Folge von abgefangenen Paketen, die auf eine bestimmte Regel passen. Das
Format hierzu lautet:
<Flowlabel>=’<Regelausdruck>’ [,<Flowlabel>=’<Regelausdruck>’]
Der Platzhalter »Flowlabel« wird wieder dazu genützt, um den Flow zu spezifizieren. Das Format der Regelausdrücke werden Sie im Laufe dieses Kapitels noch kennen lernen (Regeln).
Für Webuser sei gesagt, dass Sie diese Statistik über den Link »List NetFlows« erreichen.
Tabelle 2.11 Verfügbare Optionen für NTop (Forts.)
2.3.2
Regeln
Mit diesen Filterregeln können Sie bestimmen, welchen Traffic Sie abfangen wollen. So können Sie Pakete von einem bestimmten Host abfangen oder die Regel
auf ein Protokoll anwenden. Die Möglichkeiten hierbei sind wirklich sehr groß.
Falls Sie bereits fit im Umgang mit Tcpdump sind, brauchen Sie diesen Abschnitt
über die Erstellung von NTop-Regeln nicht zu lesen. Ansonsten können Sie entweder diesen Abschnitt oder den Abschnitt über Tcpdump lesen, um in der Lage
zu sein, solche Filterregeln erstellen zu können.
Wir werden dieses Kapitel nicht so ausführlich besprechen wie den Abschnitt
über Regeln bei Tcpdump, Sie sind aber nach der Lektüre dieses Abschnittes in
der Lage, alle Möglichkeiten und Features von NTop-Regeln voll auszuschöpfen.
Syntax
Die Syntax einer NTop-Regel ist recht simpel gehalten und hat folgendes Format:
Protokoll Regel-Label Regel-Optionen
Sandini Bib
2.3 NTop
87
Wir werden nun im Laufe dieses Abschnittes jedes dieser drei Felder einer Regel
ausführlich besprechen, so dass Sie nach der Lektüre des Regelabschnittes in der
Lage sind, effektiv und sauber NTop-Regeln zu erstellen.
Protokoll
NTop bietet Ihnen die Möglichkeit, die abzufangenden Pakete nach drei verschiedenen Protokollarten auszuwählen:
1. TCP
2. UDP
3. ICMP
4. Das heißt also, dass eine dieser drei aufgeführten Protokollarten das erste
Feld einer Regel darstellt.
Regel-Label
Wie Sie das von NTop schon gewohnt sind, können Sie mit einem Label ein
bestimmtes Feld oder ähnlich eindeutig identifizieren. Genauso verhält sich die
Sache auch mit den Regeln bei NTop. Wählen Sie als Label ein Wort, das die betreffende Regel genau beschreibt und eindeutig zu identifizieren ist.
Regel-Optionen
Die Regel-Optionen unterscheiden sich von Protokoll zu Protokoll, beachten Sie
dabei also bitte, dass die gewählte Option auch zu dem gewählten Protokoll
passt. Es wäre ziemlich nutzlos, eine Regel zu definieren, die nach TCP-Paketen
suchen soll und als Regel-Option ICMP Echo Replies spezifiziert hat. Sie werden
sich sehr schwer tun, ein solches Paket in einem normalen Netzwerk zu finden.
Tabelle 2.12 stellt uns die verfügbaren Regel-Optionen kurz vor und gibt uns zu
jedem aufgeführten Punkt eine kurze Beschreibung.
Option
Beschreibung
shost/sport dhost/
dport
Diese Option wird benutzt, um festzulegen, woher das Paket kommt
bzw. wohin es geht.
Bei ICMP-Paketen wird nur shost/dhost benutzt.
Mögliche Werte für shost und dhost sind:
any (trifft auf jeden Host zu)
broadcast (eine Broadcastadresse)
multicast (eine Multicastadresse)
gateway (ein Rechner, den NTop als Gateway identifiziert hat, da er
von anderen Rechnern für das Routen von Paketen benutzt wurde)
dns (ein Rechner, den NTop als DNS identifiziert hat, da er von
anderen Rechnern für Address-Mapping genutzt wurde)
Tabelle 2.12 Verfügbare Regel-Optionen
Sandini Bib
88
Option
2 Netzwerk-Tools
Beschreibung
Sie können diese Angaben durch den Operator "!" auch negieren
(zum Beispiel !dns). Beachten Sie dabei aber, dass eine Negierung
von "any" (!any) nicht zulässig ist.
Zulässige Werte für sport/dport sind:
any (trifft auf jeden Port)
!any (trifft auf jeden Port des Zielrechners zu, egal ob der Port auch
in der letzen Regel benutzt wurde)
usedport (trifft auf einen Port zu, bei dem NTop Netzwerkverkehr
bemerkt hat)
!usedport (trifft auf einen Port zu, bei dem NTop keinen Netzwerkverkehr bemerkt hat)
flags
TCP-Pakete haben im 13. Oktett die so genannten Codebits. Dies
sind 8 Flags, die das Ziel einen Pakets beschreiben.
Unter NTop haben Sie die Möglichkeit Pakete nach vier verschiedenen Flags zu sortieren:
F (FIN)
P (PUSH)
A (ACK)
R (RESET).
Ein Fragment aus einer Beispielregel könnte daher folgendermaßen
aussehen:
flags AP
ICMP Type
Hiermit können Sie den ICMP-Pakettypen einer Regel spezifizieren.
Verfügbare Werte hierfür sind:
ICMP_ECHOREPLY
ICMP_ECHO
ICMP_UNREACH
ICMP_REDIRECT
ICMP_ROUTERADVERT
ICMP_TIMXCEED
ICMP_PARAMPROB
ICMP_MASKREPLY
ICMP_MASKREQ
ICMP_INFO_REQUEST
ICMP_INFO_REPLY
ICMP_TIMESTAMP
ICMP_TIMESTAMPREPLY
ICMP_SOURCE_QUENCH
Tabelle 2.12 Verfügbare Regel-Optionen (Forts.)
Sandini Bib
2.3 NTop
89
Option
Beschreibung
type packet/fragment
Hiermit geben Sie an, ob die Regeln auf Pakete oder auf Fragmente
zutreffen sollen.
Falls Sie keinen Wert übergeben, wird angenommen, dass die
Regeln auf Pakete zutreffen sollen.
pktsize/pktcount
Operator Integerwert
Sie können mit dieser Option die Regel noch weiter einschränken.
Mit dem Schlüsselwort »pktsize« können Sie die Größe des betreffenden Paketes spezifizieren. Mit »pktcount« können Sie angeben,
das wievielte Paket für diese Regel zutrifft.
Die Werte, die Sie dabei übergeben, müssen Integerwerte sein, welche Sie mit Hilfe der folgenden Operatoren noch weiter einschränken können:
<
>
=
unit Sekunden
Mit dieser Option können Sie die zuletzt vorgestellte Option »pktcount« weiter einschränken. Sie können hiermit bestimmen, in welchem Zeitraum die von Ihnen angegebene Zahl von Paketen auf
diese Regel zutreffen soll.
Zum Beispiel:
pktcount > 100 unit 60
Gibt an, dass innerhalb 1 Minute (60 Sekunden) 100 Pakete auf diese
Regel zutreffen müssen.
action
Hiermit geben Sie an, was NTop machen soll, wenn ein Paket auf
eine Regel zutrifft. Mögliche Werte hierfür sind:
alarm (Sendet einen Alarm aus)
mark (Paket wird für weitere Verarbeitung markiert)
cleans Regelname
Diese Option kann benutzt werden, um Pakete, die durch die Regel,
die Sie durch das Argument »Regelname« übergeben, markiert
wurde, zu reinigen. Falls Sie alle Pakete reinigen wollen, können Sie
die Wildcard »all« nach dem Regelnamen benutzen.
rearm Sekunden
Hiermit können Sie angeben, für wie lange (Sekunden) eine Regel
außer Kraft gesetzt sein soll.
Tabelle 2.12 Verfügbare Regel-Optionen (Forts.)
Beispiele
Wie Sie gesehen haben, sind die Möglichkeiten mit NTop durchaus begrenzt. Doch
ich denke, dass dieses Programm für Administratoren, die sich nicht lange einarbeiten können, durchaus interessant sein kann. Außerdem bietet es eine Reihe nützlicher Features und Zusatzprogramme (Webinterface und Netzwerkbrowser).
Damit Sie das eben erlangte theoretische Wissen auch praktisch umsetzen können, werden wir uns im Folgenden einige Beispiele zu den Optionen der aufgeführten Regeloptionen anschauen.
Sandini Bib
90
2 Netzwerk-Tools
Beispiel 1:
Wenn ein Host ein ICMP Route Redirect-Paket von einem Rechner, der kein Gateway ist, bekommt, so wird mit der unten aufgeführten Syntax ein Alarm generiert.
icmp route-advertisement
alarm
ICMP_ROUTERADVERT
!gateway/any action
Beispiel 2:
Hierbei wird Alarm geschlagen, wenn sich der Superuser in einen FTP-Server
einloggt.
tcp root-ftp any/ftp any/any contains
Beispiel 3:
Wenn Sie Scans durch nmap entdecken wollen, können Sie folgende Syntax verwenden.
tcp tcp-nmap-scan any/!any any/!any flags SF action alarm
2.3.3
Netzwerk-Browser (Intop)
Der Netzwerk-Browser von NTop stellt ein Netzwerkinterface dar, das Ihnen die
Arbeit mit diesem Tool erheblich erleichtern kann.
Befehlszeile und Initialisierung
Der Netzwerk-Browser InTop stellt Ihnen eine eigene Befehlszeile zur Verfügung, die es Ihnen zum Beispiel erlaubt, Netzwerkschnittstellen zu öffnen oder
Pakete abzufangen.
Programm starten
Um die Shell (bzw. den Netzwerk-Browser) zu starten, benutzen Sie bitte folgenden Befehl:
Linux:~# intop
Danach sollten Sie folgende Bildschirmausgabe erhalten:
Linux:~# intop
-- intop 0.0.1 (Sep. 21 2001) -- The first interactive ntop program.
(C) Copyright 2000 L. Deri and R. Carbone. All rights reserved.
It allows you to control the power of ntop using fingers rather than
mouse!
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Sandini Bib
2.3 NTop
91
the Free Software Foundation; either version 2 of the Licence, or
(at your opinion) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR PARTICULAR PURPOSE. See the
GNU General Public Licence for more details.
Initializing ntop engine.... Please wait.
Type ? for help.
intop>
Netzwerkinterface öffnen
Nachdem Sie nun die InTop-Shell gestartet haben, ist es an der Zeit, ein Netzwerkinterface zu öffnen. Dies können Sie mit folgendem Befehl erreichen (Sie erhalten
im Laufe dieses Kapitels eine vollständige Befehlsreferenz):
intop> open -i <Netzwerkinterface>
Wenn Sie dem Programm eine zu öffnende Schnittstelle übergeben haben, sollte sich
die Shell ändern. Lassen Sie uns dies anhand eines kleinen Beispieles weiter erklären.
Mit folgendem Befehl öffnen Sie das Netzwerkinterface eth0:
intop> open -i eth0
intop@eth0>
Wie Sie sehen können, ändert sich der Befehlsprompt und gibt nun das zu überwachende Interface wieder.
Netzwerkschnittstellen auflisten
Falls Sie nicht mehr genau wissen, welche Netzwerkschnittstelle Sie zur Verfügung haben (normalerweise sollten Sie dies aber wissen!), können Sie sich mit folgendem Befehl alle zur Verfügung stehenden Schnittstellen auflisten lassen:
intop> lsdev
Danach erhalten Sie eine Liste mit allen verfügbaren Schnittstellen:
intop> lsdev
Warning: this function could not work on systems where struct
ifreq
has the sa_len field.
Warning: I will try to fix it asap. Sorry for the inconvenience.
5 interface(s) were found on this system.
The list of those suitable for using with intop is:
1. lo
2. eth0
Sandini Bib
92
2 Netzwerk-Tools
3. eth1
4. eth2
5. ipsec0
iptop>
Befehlsreferenz
Da Sie nun wissen, wie Sie der InTop-Kommandozeile Befehle übergeben können, werden Sie in diesem Kapitel eine Befehlsreferenz dafür erhalten. Tabelle
2.13 stellt Ihnen alle zurzeit zur Verfügung stehenden Befehle auf und gibt zu jedem Punkt eine kurze Beschreibung.
Befehl
Beschreibung
help
Nach der Übergabe dieses Befehls erhalten Sie eine kleine Übersicht aller verfügbaren Befehle. Alle Befehle, die in spitzen Klammern (< und >) eingeschlossen
sind, stehen zurzeit noch nicht zur Verfügung, werden aber bald implementiert.
Um eine extra Hilfefunktion für einen speziellen Befehl zu erhalten, können Sie
folgendes Format verwenden:
intop> help "Befehl"
zum Beispiel:
intop> help arp
Hiermit erhalten Sie eine genauere Beschreibung des angegebenen Befehls
(in unserem Beispiel über den Befehl: »arp«).
?
Dieser Befehl bewirkt exakt dasselbe wie der eben vorgestellte Befehl »help«.
arp
Zeigt den NTop ARP Cache auf und gibt Informationen über die Filter einen
Benutzers aus
close
Schließt ein Netzwerkinterface
exit
Beendet das Programm
filter
Setzt den BPF-Filter verbunden mit dem Netzwerkinterface
history
Zeigt die History der Kommandozeile
hosts
Zeigt den NTop HOST Cache und gibt Hostinformationen betreffend der
benutzerdefinierten Filter aus
info
Gibt detaillierte Informationen über den aktuellen Status einer Netzwerkschnittstelle aus.
lsdev
Dieser Befehl zeigt Ihnen alle Netzwerkschnittstellen, die Sie für dieses Programm benutzen können.
nbt
Gibt den NTop (Netbios over TCP/IP) Cache aus und zeigt detaillierte Hostinformationen betreffend der benutzerdefinierten Filter
open
Öffnet eine Netzwerkschnittstelle
prompt
Hiermit können Sie die Farben für den prompt ändern.
quit
Beendet das Programm
Tabelle 2.13 Befehlsreferenz für InTop
Sandini Bib
2.3 NTop
93
Befehl
Beschreibung
sniff
Damit können Sie die zwei zuletzt genutzten Netzwerkschnittstellen tauschen
(falls diese existieren).
top
Zeigt Netzwerkverwendung ähnlich zum UNIX-Befehl »top«.
uptime
Gibt allgemeine Informationen über alle aktivierten Netzwerkschnittstellen aus
und teilt Ihnen mit, wie lange das Programm schon läuft
Tabelle 2.13 Befehlsreferenz für InTop (Forts.)
Wie Sie aus den Inhalten der eben gezeigten Tabelle 2.13 entnehmen können,
kann Ihnen der Netzwerk-Browser InTop einige Arbeit ersparen und ist relativ
leicht und intuitiv zu handhaben.
Im Folgenden werden wir aber eine noch komfortablere Möglichkeit kennen lernen, die die Überwachung Ihres Netzwerkverkehrs zum Kinderspiel macht.
2.3.4
Webmodus
Wie bereits erwähnt haben Sie die Möglichkeit NTop im Webmodus laufen zu
lassen, dies bringt einige unschlagbare Vorteile mit sich:
Netzwerkstatistiken können von jedem Rechner im Netz betrachtet werden
Komfortable Menüführung
Darstellung ist sehr übersichtlich gehalten
Sichere Datenübertragung durch SSL
Mehrere User haben Zugriff auf die Netzwerkstatistiken
und vieles mehr
Aufteilung der Webseite
Am oberen Rand der Webseite stehen Ihnen folgende sieben Obermenüpunkte
zur Auswahl:
About
Data Rcvd
Data Sent
Stats
IP Traffic
IP Protos
Admin
Nachdem Sie einen dieser Punkte ausgewählt haben, erhalten Sie auf der linken Seite (linker Frame) eine Auswahl an weiteren Menüpunkten.
Sandini Bib
94
2 Netzwerk-Tools
Start
Wenn Sie einen Blick in Tabelle 2.11 werfen, werden Sie feststellen, dass Sie zum
Start von NTop im Webmodus zwei Optionen benutzen können:
1. -w (HTTP)
2. -W (HTTPS)
3. Nachdem wir dies nun wissen, wollen wir uns daran machen, den Webmodus
(HTTP) zu starten. Dafür übergeben wir folgenden Befehl:
Linux:~# ntop -w 90
4. Dies bewirkt, dass wir NTop nun über den Webbrowser auf Port 90 unserer
Maschine (ntop.secure.de) erreichen können.
5. Sie sollten nach der Übergabe dieses Befehls folgende Bildschirmausgabe
erhalten:
Linux:~# ntop -w 90
26/Jul/2001:23:30:30 SSL is present but https is disabled: use -W
<https port> for enabling it
26/Jul/2001:23:30:31 ntop v.1.3.2 MT (SSL) [i686-suse-linux]
(09/24/01 02:43:10 AM build)
26/Jul/2001:23:30:31 Listening on [eth0]
26/Jul/2001:23:30:31 Copyright 1998-2000 by Luca Deri
<deri@ntop.org>
26/Jul/2001:23:30:31 Get the freshest ntop from http://
www.ntop.org/
26/Jul/2001:23:30:31 Initialising...
26/Jul/2001:23:30:31 Loading plugins (if any)...
26/Jul/2001:23:30:31 Searching plugins in /usr/lib/ntop/plugins
26/Jul/2001:23:30:31 Welcome to arpWatchPlugin. (C) 1999 by Luca
Deri.
26/Jul/2001:23:30:31 Welcome to icmpWatchPlugin. (C) 1999 by Luca
Deri.
26/Jul/2001:23:30:31 Welcome to LastSeenWatchPlugin. (C) 1999 by
Andrea Marangoni.
26/Jul/2001:23:30:31 Welcome to nfsWatchPlugin. (C) 1999 by Luca
Deri.
26/Jul/2001:23:30:31 Welcome to ntop Remote Interface
26/Jul/2001:23:30:31 Loading plugin '/usr/lib/ntop/plugins/
rmonPlugin.so'
[/usr/lib/ntop/plugins/rmonPlugin.so: undefined symbol:
debugmsgtoken]
26/Jul/2001:23:30:31 Welcome to WAPPlugin. (C) 2000 by Luca Deri.
26/Jul/2001:23:30:31 WARNING: For security reasons it is STRONGLY
recommended to
26/Jul/2001:23:30:31
run ntop as unprivileged user by
using the -u option!
Sandini Bib
2.3 NTop
95
26/Jul/2001:23:30:31 Resetting traffic statistics...
26/Jul/2001:23:30:32 Thread 1026 for LSOF support started.
26/Jul/2001:23:30:32 Thread 2051 for Network Packet Capturing
started (_main_ thread).
26/Jul/2001:23:30:32 Thread 3076 for Host Traffic Statistics
started.
26/Jul/2001:23:30:32 Thread 4101 for Throughput Update started.
26/Jul/2001:23:30:32 Thread 5126 for Scan Idle Host started.
26/Jul/2001:23:30:32 Thread 6151 for DNS Address Resolution
started.
26/Jul/2001:23:30:32 Starting plugin threads (if any)...
26/Jul/2001:23:30:32 Remote Interface started [port 92][/var/
run/ntop.sock]
26/Jul/2001:23:30:32 Waiting for HTTP connections on port 90...
26/Jul/2001:23:30:32 Sniffying...
26/Jul/2001:23:30:32 Thread 9226 for Network Packet Sniffing
started (_main_ thread).
Zugriff über Webbrowser
Ab jetzt können wir von jedem Client, der auf dieses Netzwerk zugreifen darf,
Netzwerkstatistiken abfragen.
Wir wollen im Laufe dieses Kapitels mit einem Windowsrechner auf einen Linuxserver zugreifen, auf dem NTop auf Port 90 läuft. Um eine ausführliche und detailgetreue Darstellung zu bekommen, werden wir für die Erklärung und Navigation viele Screenshots verwenden.
Startseite (What’s ntop)
Sie haben nun die Möglichkeit Ihre NTop-Statistiken via Web von jedem Rechner
aus abzufragen. Dafür benutzen Sie als URL die IP-Adresse des Servers, auf dem
NTop läuft, gefolgt vom Port, auf dem das Programm lauscht. In unserem Fall
lautet die einzugebende URL also:
http://10.209.100.3:90
Danach erhalten Sie die in Abbildung 2.21 gezeigte Startseite. Wie Sie sehen können ist diese Seite dieselbe, die Sie auch unter dem Menüpunkt »What’s ntop?«
aus der »About« – Sparte erreichen würden.
In dieser Seite bekommen Sie allgemeine Informationen über NTop (welche Protokolle werden abgefangen etc.). Für den weiteren Gebrauch wird diese Seite daher nicht sehr nützlich sein.
Configuration
Als Nächstes wollen wir uns den Menüpunkt »Configuration« aus demselben
Oberpunkt (»About«) ansehen. Dazu werfen wir einen Blick auf Abbildung 2.22.
Sandini Bib
96
2 Netzwerk-Tools
Abbildung 2.21 Startseite
Abbildung 2.22 Config
Sandini Bib
2.3 NTop
97
Wie Sie erkennen können, bietet Ihnen diese Seite einige Informationen über den
Host, auf dem das Programm, läuft an. Auch diese Seite werden Sie bei der Überwachung Ihres Netzwerkverkehrs nicht allzu oft aufrufen.
Credits
Hier erfahren Sie mehr über den Entwickler von NTop (Luca Deri). Außerdem
werden Sie über Verbesserungen der installierten Version und weitere nützliche
Fakten aufgeklärt.
Abbildung 2.23 Credits
Man Page
Die letzte Seite aus dem Menüpunkt »About« bietet die erste nützliche und hilfreiche Information für einen Administrator, welcher über diesen Punkt Zugriff
auf die Man Page von NTop bekommt. Dies kann in vielen Situationen sehr nützlich sein (Abbildung 2.24).
Data Rcvd
Nachdem wir nun alle Unterpunkte des Menüpunktes »About« ausführlich besprochen haben, werden wir uns mit dem nächsten Punkt »Data Rcvd« beschäftigen. Dieser Punkt kann Ihnen nützliche und hilfreiche Informationen über die
empfangenen Daten aus Ihrem Netzwerk (die von NTop abgefangen werden
konnten) ausgeben.
Sandini Bib
98
2 Netzwerk-Tools
Abbildung 2.24 Man Page
All Protocols
Wie Sie aus Abbildung 2.25 ersehen können, erhalten Sie in diesem Menüpunkt
nützliche Informationen darüber, welche Hosts mit welchem Protokoll wie viele
Daten empfangen haben. Es werden Statistiken über folgende Protokolle zur Verfügung gestellt.
TCP
UDP
ICMP
DLC
IPX
DECNET
(R)ARP
Apple Talk
OSPF
NetBios
IGMP
OSI
Sandini Bib
2.3 NTop
99
QNX
Other
Falls Sie detaillierte Auflistungen über einen einzelnen Host wollen, klicken Sie
auf die IP-Adresse des gewünschten Hosts. Für Informationen über die dargestellten Protokolle klicken Sie auf das betreffende Protokoll. Um die vorhandenen
Einträge zu sortieren, können Sie den Pfeilbutton neben dem Punkt »Received«
benutzen.
Grundsätzlich gilt, dass ein Klick auf einen Link weitergehende nützliche Informationen über den dargestellten Punkt bringt. Scheuen Sie sich also nicht davor,
dieses Feature zu nutzen.
Abbildung 2.25 All Protocols
IP
Ähnlich zum Menüpunkt »All Protocols« erhalten Sie hier Informationen über
die verfügbaren IP-Protokolle, den betreffenden Host und die dazugehörige Domain (Abbildung 2.26)
Aufgelistete Protokolle sind:
FTP
HTTP
Sandini Bib
100
2 Netzwerk-Tools
DNS
Telnet
NetBios-IP
MAIL
SNMP
NEWS
NFS
X11
SSH
andere IP-Protokolle.
Abbildung 2.26 IP
Throughput
Dieser Menüpunkt gibt Ihnen Aufschluss über den erreichten Durchsatz beim Empfangen Ihrer Daten. So erhalten Sie hier zum Beispiel Informationen über den:
aktuellen Durchsatz in bps (Actual Thpt)
durchschnittlichen Durchsatz in kbs (Avg Thpt)
maximal erreichten Durchsatz in kbs (Peak Thpt)
Sandini Bib
2.3 NTop
101
aktuellen Paketdurchsatz in Paketen pro Sekunde (Actual Pkt Thpt)
durchschnittlichen Paketdurchsatz pro Sekunde (Avg Pkt Thpt)
maximal erreichten Paketdurchsatz pro Sekunde (Peak Pkt Thpt)
Für weitere Informationen werfen Sie einen Blick auf Abbildung 2.27.
Abbildung 2.27 Throughput
Host Activity
Abbildung 2.28 zeigt die Seite, die Sie erhalten, wenn Sie den Menüpunkt »Host
Activity« wählen. Dort erhalten Sie Informationen darüber, wann welcher Host
wie stark aktiv war.
NetFlows
Abbildung 2.29 zeigt Ihnen den Menüpunkt »NetFlows«, der Sie über Paket- und
Trafficfluss in Ihrem Netzwerk informiert.
Data Sent
Nachdem wir nun den Oberpunkt »Data Rcvd« abgeschlossen haben, wollen wir
uns mit dem dazugehörigen Gegenstück beschäftigen – »Data Sent«. Wie der
Name schon erkennen lässt, erhalten Sie durch diesen Punkt ein Menü, welches
Ihnen detaillierte Statistiken über die in Ihrem Netzwerk gesendeten Daten liefern kann.
Sandini Bib
102
2 Netzwerk-Tools
Abbildung 2.28 Host Activity
Abbildung 2.29 NetFlows
Sandini Bib
2.3 NTop
103
All Protocols
Der erste Menüpunkt von »Data Sent« informiert darüber, wie viele Daten über welches Protokoll verschickt wurden. Dabei werden folgende Protokolle aufgelistet:
TCP
UDP
ICMP
DLC
IPX
Decnet
(R)ARP
Apple Talk
OSPF
NetBios
IGMP
OSI
QNX
und andere Protokolle
Falls Sie weitere Informationen dazu wünschen, können Sie einen Blick auf Abbildung 2.30 werfen.
Abbildung 2.30 All Protocols
Sandini Bib
104
2 Netzwerk-Tools
IP
Abbildung 2.31 zeigt diesen Menüpunkt, der Ihnen Aufschluss über die gesendeten IP-Pakete gibt. Es werden für folgende Protokolle Statistiken erstellt:
FTP
HTTP
DNS
Telnet
NetBIOS IP
MAIL
SNMP
NEWS
NFS
X11
SSH
andere IP-Protokolle
Abbildung 2.31 IP
Sandini Bib
2.3 NTop
105
Throughput
Auch der Überbegriff »Data Sent« informiert Sie über den erreichten Durchsatz
beim Senden von Daten. Dabei werden folgende Statistiken angefertigt:
Aktueller Durchsatz in bps (Actual Thpt)
Durchschnittlicher Durchsatz in kbs (Avg Thpt)
Maximal erreichter Durchsatz in kbs (Peak Thpt)
Aktueller Paketdurchsatz in Paketen pro Sekunde (Actual Pkt Thpt)
Durchschnittlicher Paketdurchsatz pro Sekunde (Avg Pkt Thpt)
Maximal erreichter Paketdurchsatz pro Sekunde (Peak Pkt Thpt)
Abbildung 2.32 zeigt diese Seite.
Abbildung 2.32 Throughput
Host Activity
Auch im Feld »Data Sent« ist eine Statistik verfügbar, die Ihnen Aufschluss über
die zeitlichen Aktivitäten Ihrer Hosts gibt. Die hier gezeigten Daten werden grafisch in einer Tabelle dargestellt, wobei jedes Tabellenfeld genau eine Stunde repräsentiert. Wenn dieses Feld leer ist, so war der Host in dieser Zeit nicht aktiv.
Sandini Bib
106
2 Netzwerk-Tools
Dies kann sehr nützlich sein, wenn Sie die Verfügbarkeit Ihrer Serversysteme
feststellen müssen.
Abbildung 2.33 zeigt diese Seite.
Abbildung 2.33 Host Activity
Stats
Der vierte Überpunkt des Webinterfaces von NTop bietet allgemeine Statistiken
an, die sich nicht auf gesendete oder empfangene Daten, sondern auf die Gesamtheit beziehen, an.
Multicast
Dieser Menüpunkt informiert Sie über die aktuellen Multicaststatistiken.
Traffic
Unter diesem Punkt finden Sie enorm viele hilfreichen Informationen über den
entstandenen Netzwerkverkehr in Ihrem Netzwerk. So werden Sie hier zu Beginn
über allgemeine Daten informiert: Danach bekommen Sie eine Auflistung des gesendeten und empfangenen Pakete, des Durchsatzes und der dabei verwendeten
Protokolle (Abbildung 2.34).
Sandini Bib
2.3 NTop
107
Abbildung 2.34 Traffic
Hosts
Hier finden Sie Informationen über die von den verschiedenen Hosts verwendete
IP- und MAC-Adresse, die durchschnittliche Bandbreite, den Rechnernamen
(und gegebenenfalls die Arbeitsgruppe) und noch vieles mehr.
Abbildung 2.35 zeigt diese Seite. Die weiterführenden Links werden in diesem
Rahmen aber nicht abgebildet, da dies definitiv den Rahmen dieses Buches sprengen würde und außerdem nicht von großem Nutzen für Sie wäre.
Auch hier gilt, dass jeder zur Verfügung gestellte Link benutzt werden sollte, da
die dahinter liegenden Daten durchaus interessant und nützlich sein können.
Throughput
Wie Sie in Abbildung 2.36 erkennen können, erhalten Sie unter diesem Punkt eine
Seite, die Ihnen die durchschnittliche Bandbreite eines Tages bzw. einer Stunde
mitteilt. Wenn Sie dabei auf die verschiedenen Spitzen der Grafik klicken, erhalten Sie nützliche weiterführende Informationen über den dabei entstandenen
Traffic (beteiligte Rechner und so weiter).
Sandini Bib
108
2 Netzwerk-Tools
Abbildung 2.35 Hosts
Abbildung 2.36 Throughput
Sandini Bib
2.3 NTop
109
Domain
Unter diesem Menüpunkt erhalten Sie Informationen und Statistiken über den
aktuellen Status Ihrer Internetdomain.
Plugins
Wie aus Abbildung 2.37 hervorgeht, erhalten Sie unter diesem Menüpunkt Daten
über die verfügbaren Plugins.
Abbildung 2.37 Plugins
Falls ein Plugin nicht aktiviert ist, hat es den Status »No«. Sie können dieses Plugin
durch einen Klick auf den Link »No« aktivieren. Es erhält danach den Status
»yes«.
Um weiterführende Informationen über das betreffende Plugin zu bekommen,
klicken Sie auf den entsprechenden Link. Abbildung 2.38 und Abbildung 2.39 zeigen zwei Seiten, die die entsprechenden Plugins beschreiben.
Sandini Bib
110
2 Netzwerk-Tools
Abbildung 2.38 arpWatch Plugin
Abbildung 2.39 ICMP Statistics Plugins
Sandini Bib
2.3 NTop
111
IP Traffic
Im fünften Oberpunkt finden Sie Informationen über den entstandenen IP Traffic.
Dabei können Sie zwischen drei Statistiken wählen:
1. Remote zu lokal
2. Lokal zu remote
3. Lokal zu lokal
4. Ein Klick auf die einzelnen IP-Adressen gibt weiterführende Informationen
aus. So erhalten Sie dadurch zum Beispiel folgende Daten:
Allgemeine Informationen über den betreffenden Host
Statistiken über den Netzwerkverkehr (zeitlich eingeteilt)
TCP-Paketstatistiken
IP-Protokollaufteilung
TCP
UDP
(R)ARP
NetBIOS
Zuletzt kontaktierte Rechner
IP-Sitzungshistory
Aktive TCP-Sitzungen
und einiges mehr
R>L
Die Seite, die sich hinter diesem Link verbirgt, gibt Aufschluss über den Netzwerkverkehr, der vom externen Netz ins lokale Netz angefallen ist.
L>R
Dieser Punkt beschreibt den Netzwerkverkehr, der vom internen Netzwerk ins
Internet ging.
L <> L
Wie Sie aus Abbildung 2.40 erkennen können, behandelt dieser Punkt die Statistiken über den Netzwerkverkehr, der in Ihrem internen Netz angefallen ist.
Matrix
Unter diesem Punkt erhalten Sie die IP Subnet-Matrix. Dabei können Sie durch
eine farbliche Kennung genau erkennen, welcher Host wie viel gesendet bzw.
empfangen hat (Abbildung 2.41).
Sandini Bib
112
2 Netzwerk-Tools
Abbildung 2.40 L <> L
Abbildung 2.41 Matrix
Sandini Bib
2.3 NTop
113
Local Usage
Dieser Menüpunkt gibt Ihnen Aufschluss über den entstandenen lokalen Netzwerkverkehr. Dabei erhalten Sie eine Aufteilung in die folgenden zwei Kategorien (Abbildung 2.42):
1. Netzwerkverkehr versucht durch einen Prozess
2. Netzwerkverkehr bezogen auf die verschiedenen Ports
3. Ein Klick auf den entsprechenden Prozess oder Port öffnet eine neue Seite
(Abbildung 2.43), welche Daten über den Prozess bzw. den Port enthält (zum
Beispiel: empfangene Daten, gesendete Daten, geöffnete Ports, Prozess ID,
Username)
Abbildung 2.42 Local Usage
IP Protos
Der vorletzte Oberpunkt enthält Informationen über die zur Verfügung stehenden und genutzten IP-Protokolle, über die verwendeten Router und die Subnetmaske.
Sandini Bib
114
2 Netzwerk-Tools
Abbildung 2.43 Local Usage proftpd
Distribution
Dieser Menüpunkt zeigt Ihnen den gesamten Netzwerkverkehr aufgeteilt in folgende drei Bereiche:
Lokaler Netzwerkverkehr
Remote zu lokal
Lokal zu remote
Diese drei Bereiche enthalten wiederum Grafiken, die Ihnen anschaulich den
Anteil bestimmter Protokolle am entstandenen Netzwerkverkehr illustrieren.
Abbildung 2.44 zeigt diese Seite.
Usage
Diese Seite enthält Informationen über die IP Subnet-Verwendung und zeigt die
dabei beteiligten Protokolle und die dazugehörigen Portnummern. Ein Klick auf
die angezeigten IP-Adressen liefert weitere interessante Daten.
Abbildung 2.45 zeigt diese Seite.
Sandini Bib
2.3 NTop
115
Abbildung 2.44 Distribution
Abbildung 2.45 Usage
Sandini Bib
116
2 Netzwerk-Tools
Sessions
Unter diesem Punkt finden Sie die zurzeit aktiven TCP-Sitzungen. Dabei werden
die Einträge für jede Sitzung in folgende Felder unterteilt:
Client IP Adresse/Dienst
Server IP Adresse/Dienst
Gesendete Daten
Empfangene Daten
Aktiv seit
Zuletzt beobachtet
Dauer
Abbildung 2.46 zeigt einen Screenshot, der den Inhalt dieser Seite darstellt.
Abbildung 2.46 Session
Routers
Wie Sie sich sicherlich bereits gedacht haben, enthält der letzte Link des »IP Protos« Oberpunkts eine Statistik und eine dazu passende Beschreibung für die verwendeten Router.
Sandini Bib
2.3 NTop
117
Admin
Diesem Bereich sollten Sie als Erstes Ihre Aufmerksamkeit schenken, da Sie damit
NTop steuern und administrieren können.
Switch NIC
Falls Sie mehrere Netzwerkkarten in Ihrem Server haben, können Sie mit diesem
Link die aktuelle Karte gegen eine andere austauschen (im Sinne der Überwachung, natürlich nicht physikalisch).
Reset Stats
Hiermit können Sie alle Statistiken zurück auf Null stellen.
Users
Um diesen Bereich betreten zu können, brauchen Sie ein Passwort und einen gültigen Benutzernamen. Falls Sie NTop zum ersten Mal benutzen, sind die Defaultwerte gesetzt. Sie können sich somit mit dem Usernamen »admin« und dem dazugehörigen Passwort »admin« einloggen. Selbstredend sollten Sie diese Werte
sofort nach der Initialisierung von NTop ändern.
Nachdem Sie sich erfolgreich eingeloggt haben, sollten Sie zu der in Abbildung
2.47 dargestellten Seite gelangen.
Abbildung 2.47 Users
Sandini Bib
118
2 Netzwerk-Tools
Um neue User anzulegen folgen Sie dem Link »Add User«. Sie sollten danach zu
der in Abbildung 2.48 gezeigten Seite weitergeleitet werden. Falls Sie jedoch einen bereits existierenden Benutzer ändern wollen, können Sie dies tun, indem Sie
auf den gezeigten Stift im »Actions«-Feld klicken.
Abbildung 2.48 Add User
Wenn Sie einen Benutzer löschen wollen, klicken Sie auf das durchgestrichene
Gesicht im »Actions« Feld (nicht in der gezeigten Abbildung zu sehen).
URLs
Wie Sie in Abbildung 2.49 gut erkennen können, erlaubt Ihnen diese Seite die vordefinierten URLs zu ändern oder neue zu erstellen.
Um eine neue URL hinzuzufügen, müssen Sie auf das Feld »Add URL« klicken.
Die dabei aufgerufene Seite ist in Abbildung 2.50 zu sehen.
Shutdown
Wenn Sie Ihren NTop Webserver herunterfahren wollen, können Sie das mit
diesem Link erledigen. Nachdem der Server erfolgreich heruntergefahren wurde,
erhalten Sie die in Abbildung 2.51 gezeigte Meldung.
Sandini Bib
2.3 NTop
119
Abbildung 2.49 URL
Abbildung 2.50 Add URL
Sandini Bib
120
2 Netzwerk-Tools
Abbildung 2.51 Shutdown
2.4
Tcpdump
Beim nächsten Tool, mit dem wir uns beschäftigen, handelt es sich um ein PaketCapture-Programm, das Ihnen die Möglichkeit gibt, bestimmte Pakete aus dem
Netzwerk auszulesen und anzuzeigen. Auch dieses Tool kann einem Administrator, der auf Fehlersuche ist, eine enorme Hilfe sein. Laienhaft könnte man sagen,
dass dieses Tool Ihnen die Möglichkeit bietet die Pakete, die sich in Ihrem Netzwerk befinden, mit Hilfe verschiedenster Filter darzustellen und Ihnen damit eine
Basis für die Kontrolle bestimmter Netzwerkgeräte wie Firewalls, Router, Switches … zu bieten.
2.4.1
Installation
Sie können sich dieses Tool wie immer von der Buchpage downloaden oder es
aus der Paketdatenbank Ihrer Distribution beziehen. Bedenken Sie bitte, dass das
Programm Rootrechte braucht, um korrekt zu laufen.
Sandini Bib
2.4 Tcpdump
2.4.2
121
Lauschangriff
Bevor Sie den großen Lauschangriff auf Ihr Netzwerk starten können, sollten Sie
wissen, welche Möglichkeiten Ihnen dabei zur Verfügung stehen. Im Grunde ist
die Bedienung und Handhabung dieses Tools unkompliziert, da es sich komplett
über die Konsole steuern lässt. Es handelt sich dabei jedoch um ein äußerst umfangreiches Tool, was zur Folge hat, dass Sie einer Vielzahl von Optionen und Argumenten gegenüberstehen. Welche Ihnen dabei genau zur Verfügung stehen
und welchen Nutzen sie für Sie haben, werden Sie in den folgenden Abschnitten
dieses Kapitels erfahren.
Am Ende der Besprechung von Tcpdump werden wir einige sinnvolle Beispiele aufführen, die Ihnen hoffentlich helfen, dieses Tool zielstrebig und effektiv einzusetzen.
Allgemeine Syntax
Die allgemeine Syntax für dieses Programm kann man nicht gerade als kurz bezeichnen, deshalb werden wir auf jedes Feld des Befehlsaufrufes genau eingehen,
um Ihnen einen kompletten Einblick in die Funktionsweise von Tcpdump geben
zu können.
Bevor wir aber auf bestimmte Felder eingehen können, sollten wir uns den Befehl
mit allen Optionen und Argumenten genauer anschauen.
Linux:~# tcpdump [Optionen] [ -c count ]
[ -C file_size ] [ -F file ]
[ -i interface ] [ -m module ] [ -r file ]
[ -s snaplen ] [ -T type ] [ -w file ]
[ -E algo:secret ] [ expression ]
Optionen
Optionen bieten Ihnen den grundlegendsten und gröbsten Filter, um den Verkehr
auf Ihrem Netzwerk zu überwachen. Welche Filter (Optionen) Sie benutzen können und was Sie bewirken, werden Sie in Tabelle 2.14 erfahren.
Optionen
Beschreibung
-a
Versucht Netzwerk- und Broadcastadressen in Namen umzuwandeln
-c count
Bricht ab, nachdem ein count-Paket empfangen wurde (benötigt Angabe des
Pakets)
-C file-size
Bevor ein RAW-Paket in ein »safefile« geschrieben wird, wird überprüft, ob
diese Datei größer als die angegebene Dateigröße (file-size) ist. Falls dies der
Fall ist, wird eine neue Datei erstellt.
-dd
Zeigt den Code des Paket Matching als C fragment. Bsp:
{ 0x6, 0, 0, 0x00000060 },
Tabelle 2.14 Tcpdump Optionen
Sandini Bib
122
2 Netzwerk-Tools
Optionen
Beschreibung
-ddd
Zeigt den Code des Paket Matching in Dezimalzahlen. Bsp:
1
6 0 0 96
-e
Zeigt den Link Level Header in jeder Zeile
-E algo:secret
Benutzen Sie diese Option, um IPsec ESP-Pakete zu entschlüsseln. Folgende
Algorithmen stehen Ihnen dabei zur Verfügung:
des-cbc (Defaultwert)
3des-cbc
blowfish-cbc
rc3-cbc
cast128-cbc
none
Sie können diese Option nur nutzen, falls tcpdump mit der Option crytographie kompiliert wurde. Den Platzhalter secret füllen Sie bitte mit
dem ESP Secret key (ASCII-Format, binär ist noch nicht möglich). Weiter
funktioniert diese Option nur mit RFC2406 ESP, nicht mit RFC1827 ESP.
-f
Zeigt nicht lokale Internetadressen numerisch anstatt symbolisch an. Wurde
speziell für Suns yp Server entwickelt.
-F file
Sie können Ihre Filter in der in File angegebenen Datei speichern und
Tcpdump wird sie daraus lesen. Alle Filter aus der Kommandozeile werden
ignoriert.
-i interface
Gibt das abzuhörende Interface an. Falls Sie kein Interface angeben, sucht
Tcpdump in der Systeminterfaceliste nach dem ersten Eintrag und benutzt
dieses Interface. Loopback Devices werden ignoriert. Sie können auch den
Pattern any übergeben und es werden alle Interfaces abgehört.
-l
Standartausgabezeilen werden gepuffert
-m modul
Lädt SMI MIB-Moduldefinitionen aus der angegebenen Datei
-n
Keine Adressumwandlung zu Namen
-N
Zeigt nicht den vollen Domainnamen des Hosts an. Zum Beispiel:
joey.triblen.de wird als joey angezeigt.
-O
Verhindert, dass der Paket Matching Code Optimizer läuft. (Nur sinnvoll,
wenn Sie denken, dass dieser buggy ist.)
-p
Das Interface wird nicht in promiscuous mode versetzt. Es kann sich aber
durchaus aus anderen Gründen in diesem Modus befinden.
-q
Es werden weniger Protokollinformationen ausgegeben, die Zeilen werden
somit kürzer.
-R
Gibt Tcpdump die Anweisung, dass ESP/AH-Pakete noch auf alten Spezifikationen beruhen (von RFC1825 bis zu RFC1829). Falls Sie diese Option verwenden, wird das relay prevention-Feld nicht angezeigt.
-r file
Liest Pakete aus der angegebenen Datei (die mit der w-Option erstellt wurde).
Tabelle 2.14 Tcpdump Optionen (Forts.)
Sandini Bib
2.4 Tcpdump
123
Optionen
Beschreibung
-S
Zeigt absolute anstatt relative TCP-Sequenznummern an.
-T
Pakete werden nach den angegebenen ‚expressions« selektiert und nach
dem spezifizierten type interpretiert. Die zurzeit verfügbaren Typen sind:
cnfg (Cisco NetFlow Protocol)
rpc (Remote Precedure Call)
rtp (Real Time Applications Protocol)
rtcp (Real Time Applications Control Protocol)
snmp (Simple Network Management Protocol)
vat (Visual Audio Tool)
wb (distributed White Board)
-t
Zeigt nicht an jeder Zeile den timestamp an
-tt
Zeigt einen unformatierten timestamp in jeder Zeile an
-ttt
Zeigt ein Delta zwischen aktueller und vorhergehender Zeile an (in Mikrosekunden)
-tttt
Zeigt den timestamp im Defaultformat gefolgt vom Datum in jeder Zeile an.
Mit der u-Option können Sie zusätzlich noch nicht dekodierte NFS Handles
anzeigen lassen.
-v
Verbose-Modus. Es werden zusätzliche Informationen wie:
time to live-Wert
identification-Wert
total length-Wert
Optionen in einem IP-Paket
angezeigt. Außerdem werden zusätzliche Checks wie die Berechnung der
Quersumme von IP und ICMP Headern ausgegeben.
-vv
Gibt noch mehr Output als der normale Verbose-Modus. So werden hier
zum Beispiel zusätzliche Felder von NFS Replypaketen dargestellt. SMBPakete werden sogar vollständig dekodiert.
-vvv
Gibt wiederum noch mehr Output. Hier werden zum Beispiel Telnet SB …
SE-Optionen voll dargestellt.
-w file
Schreibt RAW-Pakete in die angegebene Datei, anstatt sie auszugeben.
Sie können später mit der -r-Option wieder ausgegeben werden.
-x
Stellt jedes Paket hexadezimal dar (ohne den Link Level Header).
-X
Falls die Option –X gesetzt ist, werden Pakete zusätzlich auch noch in ASCII
ausgegeben.
Tabelle 2.14 Tcpdump Optionen (Forts.)
Expressions
So, da Sie nun alle verfügbaren Optionen kennen, können wir uns mit dem Feld
expression beschäftigen, das Ihnen die Möglichkeit gibt, zu bestimmen, welche
Pakete im Netzwerk angezeigt werden sollen.
Sandini Bib
124
2 Netzwerk-Tools
Expressions bestehen normalerweise aus einem oder mehreren primitives, die
sich in der Regel aus einer ID (Name oder Zahl) gefolgt von einem oder mehreren
Qualifiers zusammensetzen. Wir werden uns mit jedem einzelnen Bestandteil genau befassen.
Qualifiers
Wir werden mit der Beschreibung der Qualifiers beginnen. Tabelle 2.15 enthält
die drei verfügbaren Qualifiers.
Qualifier
Beschreibung
type
Dieser Qualifier gibt an, worauf sich die ID (Name oder Zahl) bezieht.
Mögliche Typen sind:
host (Defaultwert) (z.B. Host Joey)
net (z.B. net 130.9)
port (z.B. port 8080)
dir
Gibt die Transferrichtung zu und/oder von einer bestimmten ID an. Mögliche Werte sind:
src
dst
src or dst (Defaultwert)
src and dst
Beispiele hierfür können zum Beispiel sein:
src Joey
dst net
130.9
src or dst port ssh
Für Null Link Layers wie SLIP können die Qualifier inbound und outbound
zur Richtungsbestimmung benutzt werden.
proto
Dieser Qualifier reduziert die Treffer auf bestimmte Protokolle, wie zum
Beispiel:
ether
fddi
tr
ip
ip6
arp
rarp
decnet
tcp
udp
Tabelle 2.15 Verfügbare Qualifiers
Sandini Bib
2.4 Tcpdump
Qualifier
125
Beschreibung
Mögliche Beispiele hierfür:
ether src Joey
arp net 130.9
tcp port 8080
Falls Sie diesen Qualifier nicht explizit angeben, treffen alle Protokolle, die
auf den Typ zutreffen könnten, zu.
Tabelle 2.15 Verfügbare Qualifiers (Forts.)
Bevor wir uns mit dem Feld primitives auseinander setzen, sollten wir uns einige
Besonderheiten zu dem Qualifier proto ansehen:
Beachten Sie bei der Verwendung dieses Qualifiers bitte, dass das Feld fddi eigentlich ein Synonym für ether ist, da Tcpdump die beiden gleich behandelt.
Dies liegt daran, dass FDDI Header Ethernet-ähnliche Quell- und Zieladressen
und oftmals Ethernet-ähnliche Pakettypen haben, die den Feldern von Ethernetpaketen sehr ähnlich oder manchmal sogar damit identisch sind. Ähnlich verhalten sich auch tr-Pakete, da auch dieses Feld ein Synonym für ether darstellt.
Primitives
Nachdem Sie nun wissen, was es mit den Qualifiern auf sich hat, können wir uns
den primitives widmen. Vorab möchte ich Sie darauf hinweisen, dass Sie mit den
Schlüsselwörtern and, or und not diese primitives kombinieren können. Tabelle
2.16 enthält alle verfügbaren primitives und gibt Ihnen zu jedem aufgezählten
Punkt eine kurze Beschreibung.
Primitive
Beschreibung
dst host host
Wahr, wenn das IPv4- oder IPv6-Zieladressenfeld dem Argument host entspricht. Dieses Argument kann eine Adresse oder ein Name sein.
src host host
Wahr, wenn das IPv4- oder IPv6-Quelladressenfeld dem Argument host
entspricht. Dieses Argument kann eine Adresse oder ein Name sein.
host host
Wahr, wenn das IPv4- oder IPv6-Quell- oder Zieladressenfeld des Pakets
dem Argument host entspricht. Sie können jeden der genannten Hostausdrücke mit folgenden Keywörtern kombinieren (Sie müssen dabei das Keywort vorstellen):
ip
arp
rarp
ip6
Tabelle 2.16 Verfügbare primitives
Sandini Bib
126
Primitive
2 Netzwerk-Tools
Beschreibung
Zum Beispiel ist der Ausdruck
ip host host
äquivalent zu
ether proto \ip and host host
(Beispiel aus Manpage)
ether dst ehost
Wahr, wenn die Ethernet-Zieladresse dem Argument ehost entspricht.
Dieses Argument kann entweder ein Name aus der Datei /etc/ethers oder
eine Zahl sein.
ether src ehost
Wahr, wenn die Ethernet-Quelladresse dem Argument ehost entspricht.
Dieses Argument kann auch hier entweder ein Name aus der Datei
/etc/ethers oder eine Zahl sein.
ether host ehost Wahr, wenn die Ethernet-Quell- oder Zieladresse dem Argument ehost entspricht.
gateway host
Wahr, wenn das Paket den Host, den Sie mit dem Argument host übergeben, als Gateway benutzt hat.
dst net net
Wahr, wenn die IPv4- oder IPv6-Zieladresse eine Netzwerknummer hat, die
Sie mit dem Argument net übergeben. Das Argument kann entweder ein
Name aus /etc/networks oder eine Zahl sein.
src net net
Wahr, wenn die IPv4- oder IPv6-Quelladresse eine Netzwerknummer hat,
die Sie mit dem Argument net übergeben. Das Argument kann entweder
ein Name aus /etc/networks oder eine Zahl sein.
net net
Wahr, wenn die IPv4 oder IPv6 Quell- oder Zieladresse eine Netzwerknummer hat, die Sie mit dem Argument net übergeben. Das Argument
kann entweder eine Name aus /etc/networks oder eine Zahl sein.
net net mask
mask
Wahr, wenn das Netzwerk, das Sie mit dem Argument net übergeben, mit
der Netzwerkmaske, die Sie mit dem Argument mask übergeben, übereinstimmt. Kann mit src und dst verfeinert und eingeschränkt werden.
net net/len
Wahr, wenn die IPv4- oder IPv6- angegebene Adresse net, einer Netzwerkmaske mit len bits Größe entspricht.
dst port port
Wahr, wenn es sich bei dem Paket um ein IPv4/TCP-, IPv4/UDP-, IPv6/
UDP- oder IPv6/TCP-Paket handelt und dessen Zielport dem Wert entspricht, den Sie mit dem Argument port übergeben. Dieses Argument
kann entweder eine Zahl oder ein Name aus der Datei /etc/services sein.
Wenn Sie einen Namen verwenden, werden die Portnummer und das Protokoll überprüft. Wenn Sie eine Zahl verwenden, wird nur die Portnummer
überprüft.
src port port
Wahr, wenn es sich beim dem Paket um ein IPv4/TCP-, IPv4/UDP-, IPv6/
UDP- oder IPv6/TCP-Paket handelt und dessen Quellport dem Wert entspricht, den Sie mit dem Argument port übergeben. Dieses Argument kann
entweder eine Zahl oder ein Name aus der Datei /etc/services sein. Wenn Sie
einen Namen verwenden, werden die Portnummer und das Protokoll überprüft. Wenn Sie eine Zahl verwenden, wird nur die Portnummer überprüft.
Tabelle 2.16 Verfügbare primitives (Forts.)
Sandini Bib
2.4 Tcpdump
127
Primitive
Beschreibung
port port
Wahr, wenn es sich beim dem Paket um ein IPv4/TCP-, IPv4/UDP-, IPv6/
UDP- oder IPv6/TCP-Paket handelt und dessen Ziel- oder Quellport dem
Wert entspricht, den Sie mit dem Argument port übergeben. Dieses Argument kann entweder eine Zahl oder ein Name aus der Datei /etc/services sein.
Wenn Sie einen Namen verwenden, werden die Portnummer und das Protokoll überprüft. Wenn Sie eine Zahl verwenden, wird nur die Portnummer
überprüft.
Alle der aufgeführten Portausführungen können mit folgenden Schlüsselwörtern kombiniert werden:
tcp
udp
So trifft zum Beispiel folgende Syntax nur auf TCP-Pakete zu, deren Quellport 23 ist.
tcp src port 23
less length
Wahr, wenn das Paket kleiner oder genauso groß ist wie der Wert, den Sie
mit dem Argument length übergeben.
Äquivalent zu:
len <= length
greater length
Wahr, wenn das Paket größer oder genauso groß ist wie der Wert, den Sie
mit dem Argument length übergeben.
Äquivalent zu:
len >=length
ip porto
protocol
Wahr, wenn das Paket ein IP-Paket ist. Das Argument protocol kann eine
Zahl oder einer der folgenden Namen sein:
icmp
icmp6
igmp
igrp
pim
ah
esp
udp
tcp
Beachten Sie dabei, dass die Protokollnamen tcp, udp und icmp ebenfalls
Schlüsselwörter sind und dass Sie diese daher mit einem Backslash (\)
davor aufführen müssen (C-Shell: \\).
ip6 proto
protocol
Wahr, wenn das Paket ein IPv6-Paket vom Protokolltyp, den Sie mit dem
Argument protocol übergeben, ist.
Tabelle 2.16 Verfügbare primitives (Forts.)
Sandini Bib
128
2 Netzwerk-Tools
Primitive
Beschreibung
ip6 protochain
protocol
Wahr, wenn das Paket ein IPv6-Paket ist und einen Protokollheader mit
dem Protokolltypen, den Sie mit dem Argument protocol angeben, in der
Protokollheader chain enthält. Ein Beispiel hierfür kann man aus den Manpages entnehmen:
ip6 protochain 6
Diese Syntax trifft auf irgendein IPv6 Paket zu, dessen Protokollheader
chain einen TCP Protokollheader enthält.
ip protochain
protocol
Wahr, wenn das Paket ein IPv4-Paket ist und einen Protokollheader mit
dem Protokolltypen, den Sie mit dem Argument protocol angeben, in der
Protokollheader chain enthält.
ether broadcast Wahr, wenn das Paket ein Ethernet Broadcast-Paket ist. Das Schlüsselwort
ether ist optional.
ip broadcast
Wahr, wenn das Paket ein IP Broadcast-Paket ist. Überprüft all-zeroes
und all-ones Broadcastroutinen.
ether multicast
Wahr, wenn das Paket ein Ethernet Multicast-Paket ist. Auch hier ist das
Schlüsselwort ether optional.
ip multicast
Wahr, wenn das Paket ein IPv4 Multicast-Paket ist.
ip6 multicast
Wahr, wenn das Paket ein IPv6 Multicast-Paket ist.
ether proto
protocol
Wahr, wenn das Paket den Ehernet Protokolltypen hat, den Sie mit dem
Argument protocol übergeben. Auch hier können Sie den Typ entweder
durch eine Zahl oder einen Namen repräsentieren. Mögliche Namen hierfür
sind:
ip
ip6
arp
rarp
atalk
aarp
decnet
sca
lat
mopdl
moprc
iso
Bitte beachten Sie auch hierbei, dass es sich um Schlüsselwörter handelt und
Sie diese daher mit einem vorhergehenden Backslash angeben müssen.
decnet src host
Wahr, wenn die DECNET-Quelladresse dem Wert, den Sie mit dem Argument host übergeben, entspricht.
decnet dst host
Wahr, wenn die DECNET-Zieladresse dem Wert, den Sie mit dem Argument host übergeben, entspricht.
Tabelle 2.16 Verfügbare primitives (Forts.)
Sandini Bib
2.4 Tcpdump
129
Primitive
Beschreibung
decnet host
host
Wahr, wenn die DECNET-Ziel- oder Quelladresse dem Wert, den Sie mit
dem Argument host übergeben, entspricht.
ip, ip6, arp,
rarp, atalk,
aarp, decnet,
iso
Abkürzungen für:
lat, moprc,
mopdl
Abkürzungen für:
vlan [vlan_id]
Wahr, wenn das Paket ein IEEE 802.1Q VLAN-Paket ist. Wenn das Argument vlan_id angegeben wird, trifft die Syntax logischerweise nur dann
zu, wenn das Paket die spezifizierte VLAN_ID hat.
tcp, udp, icmp
Abkürzungen für:
ether proto protocol, wobei protocol eine der aufgeführten
Protokollarten ist.
ether proto protocol, wobei protocol eine der aufgeführten Protokollarten ist. Beachten Sie dabei, dass tcpdump nicht weiß, wie es diese
Protokolle zerlegen und bestimmen soll.
ip proto protocol
oder für:
ip6 proto protocol
Wobei das Argument protocol eines der aufgeführten Protokolle darstellen muss.
iso proto
protocol
Wahr, wenn das Paket ein OSI-Paket mit dem Protokolltypen, den Sie mit
dem Argument protocol angegeben haben, ist. Sie können dieses Argument dabei entweder durch Zahlen oder durch einen der folgenden Namen
darstellen:
clnp
esis
isis
clnp, esis, isis
Abkürzungen für:
iso proto protocol, wobei protocol eines der angegebenen Protokolle darstellen muss. Beachten Sie, dass Tcpdump momentan noch nicht
weiß, wie es diese Pakte zerlegen und bestimmen kann.
expr relop expr Wahr, wenn die Bedingung zutrifft, wobei relop eines der folgenden Zeichen sein muss:
>
<
>=
<=
=
!=
Tabelle 2.16 Verfügbare primitives (Forts.)
Sandini Bib
130
Primitive
2 Netzwerk-Tools
Beschreibung
und expr ein arithmetischer Ausdruck aus integer Konstanten (in Standard
C-Syntax ausgedrückt) ist. Binäroperatoren wie
+
*
/
&
|
sind erlaubt. Um Daten in einem Paket anzusprechen, benutzen Sie bitte die
Syntax, die wir Ihnen als Nächstes vorstellen.
proto [ expr :
size ]
Diese Syntax können Sie benutzen, um Zugriff auf die Daten innerhalb eines
Pakets zu bekommen. Wobei das Argument proto den Protokolllayer für
die Indexoperation anzeigt und einen der folgenden Wert annehmen muss:
ether
fddi
tr
ip
arp
rarp
tcp
udp
icmp
ip6
Zurzeit befindet sich in dieser Funktion noch ein kleiner Bug, der verursacht, dass die Protokolle aus den oberen Protokollschichten (tcp, udp ...)
nur für IPv4 funktionieren.
Das Argument expr gibt das Byteoffset relativ zu dem angezeigten Protokolllayer an.
Das Argument size ist optional und zeigt die Anzahl der Bytes in einem
Feld an.
Sie können weiter das Schlüsselwort len einführen, welches dann die
Länge des Pakets anzeigt.
Hierzu vorab einige Beispiele aus der Manpage:
ether[0] & 1 !=0
Dieses Beispiel fängt den ganzen Multicastverkehr ab.
ip[0] & 0xf != 5
Dieses Beispiel fängt alle IP-Pakete mit Optionen ab. Weitere Beispiele sind
in einem der nächsten Abschnitte zu sehen.
Tabelle 2.16 Verfügbare primitives (Forts.)
Sandini Bib
2.4 Tcpdump
131
Die in Tabelle 2.16 kennen gelernten primitives können Sie aber natürlich auch
verknüpfen. Welche Verknüpfungsarten (Operatoren) Sie dabei benutzen können
und welche die höchste Priorität hat, werden Sie in Tabelle 2.17erfahren.
Operator
Beschreibung
Priorität
! oder not
Verneinung
Dieser Operator hat die höchste Prioritätsstufe.
&& oder and
Verkettung
Niedrigere Priorität als der Verneinungsoperator, doch
dieselbe wie der Oder-Operator.
|| oder or
Oder-Verknüpfung
Niedrigere Priorität als der Verneinungsoperator, doch
dieselbe wie der Verkettungsoperator.
Tabelle 2.17 Verfügbare Kombinationsoperatoren
Beispiele
Nachdem wir nun ausführlich die Syntax von Tcpdump besprochen haben, sollten
wir uns einige Beispiele ansehen, damit wir auch wissen, wie wir unser neu erlangtes
Know-how geschickt und effektiv einsetzen können. Wir werden diese Beispiele
zum Teil aus den Manpages, aber zum Großteil aus Alltagssituationen beziehen.
Das erste Beispiel soll Tcpdump dazu bringen, alle Pakete, die den Host Joey am
Interface eth0 erreichen bzw. die ihn auf diesem Interface verlassen, anzuzeigen.
Während unserer Überwachungszeit wird ein Ping auf diesen Host gerichtet und
des Weiteren wird ein Linux FTP Client versuchen, sich mit dem FTP-Server auf
diesen Host zu verbinden.
Linux:~# tcpdump host Joey –i eth0
Das nächste Beispiel zeigt den kompletten Netzwerkverkehr zwischen dem Host
Joey und entweder dem Host Aga oder dem Host Aj (Vergessen Sie nicht den
Backslash vor den Sonderzeichen!).
Linux:~# tcpdump host Joey and \{ Aga or Aj \}
Um den gesamten FTP Traffic, der durch den Internet Gateway Grassl geht, anzuzeigen, müssen Sie diese Syntax verwenden. Die Anführungszeichen wurden
verwendet, damit die Shell diesen Befehl nicht falsch interpretiert.
Linux:~# tcpdump ‚gateway Grassl and (port 20 or 21)’
Sie können diese Syntax auch so formulieren:
Linux:~# tcpdump ‚gateway Grassl and (port ftp or ftp-data)’
Um alle IP-Pakete, die größer als 500 Byte sind und durch den Gateway Grassl
gehen, anzuzeigen, können Sie diesen Aufruf verwenden:
Linux:~# tcpdump ‚gateway Grassl and ip[2:2] > 500’
Sandini Bib
132
2 Netzwerk-Tools
Falls Sie alle ICMP-Pakete außer den Pings anzeigen wollen, verwenden Sie diesen Befehl:
Linux:~# tcpdump ‚icmp[0] != 8 and icmp[0] !=0’
Sie können diese Syntax aber auch anders darstellen:
Linux:~# tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype]
!= icmp-echoreply'
2.4.3
Ausgabeformat
Wie das Manual von Tcpdump werden auch wir uns ausgiebig mit dem Ausgabeformat der Meldungen und »dumps« beschäftigen, denn was hilft Ihnen die größte
und beste Auswahl und Ausgabe an Paketen, wenn Sie sie nicht verstehen?
Zuerst einmal muss man natürlich darauf hinweisen, dass es nicht ein Ausgabeformat gibt, das für alle »dumps« gültig ist. TCMPdump ist so ausgelegt, dass die
Anzeigen, die Sie erhalten, je nach Protokoll- und Paketart variieren. Wir werden
uns damit an verschiedenen Punkten auseinander setzen und diese anhand einer
ausführlichen Beschreibung vorstellen.
Link Level Headers
Ethernet
Wenn Sie einen Blick auf Tabelle 2.11 werfen, werden Sie sehen, dass Sie mit Hilfe
der Option -e den Link Level Header in jeder Zeile ausgeben können. Bei Ethernetnetzwerken hat dies zur Folge, dass folgende Felder ausgegeben werden:
Quelladresse
Zieladresse
Protokoll
Paketlänge
FDDI
Anders verhält sich diese Option bei FDDI-Netzwerken. Hier werden folgende
Felder ausgegeben:
Frame Control
Quelladresse
Zieladresse
Paketlänge
Normale Pakete sind async-Pakete mit einer Priorität von 0 bis 7 (zum Beispiel
async7). Diese Pakete beinhalten ein Logical Link Control Paket, welches dargestellt
wird, falls es sich dabei nicht um ein ISO-Datagramm oder ein so genanntes SNAP
(Subnetwork Access Protocol)-Paket handelt. Falls Sie sich genauer für das SNAP-
Sandini Bib
2.4 Tcpdump
133
Protokoll interessieren, können Sie weitere Informationen unter der Adresse http://
www.isi.edu/in-notes/rfc1700.txt erhalten.
Token Ring
In Token Ring-Netzwerken werden – falls Sie diese Option verwenden – folgende
Felder angezeigt:
Access Control
Frame Control
Quelladresse
Zieladresse
Paketlänge
Ähnlich zu FDDI-Netzwerken beinhalten auch Pakete in einem Token Ring-Netzwerk LLC-Pakete.
SLIP
Bei SLIP Links werden wiederum folgende Felder angezeigt:
Direction Indicator ( I = inbound und O = outbound)
Pakettyp
Kompressionsinformationen
Es gibt dabei drei Arten von Pakettypen:
1. ip
2. utcp
3. ctcp
Für IP-Pakete werden keine weiteren Informationen angezeigt. Wohingegen bei
TCP-Paketen der connection identifier gefolgt vom Typen aufgeführt wird. Wenn
das Paket gepackt (komprimiert) ist, wird auch der Header angezeigt.
Spezialfälle werden durch ein *S+n und ein *SA+n repräsentiert, wobei das n für
den Wert steht, an dem sich die Sequenznummer geändert hat. Falls kein Spezialfall vorliegt, werden meistens keine Veränderungen angezeigt. Eine solche Veränderung wird durch ein U (Urgent Pointer), W (Window), A (ACK), S (Sequenznummer) und ein I (Paket ID), gefolgt von einem Delta (+n oder –n) oder einer
neuen Zeile (=n) angezeigt. Danach werden die Daten im Paket und die Länge des
komprimierten Headers angezeigt.
Damit Sie diese Theorie besser verstehen können, sollten Sie sich das folgende
Beispiel anschauen. Es zeigt ein outbound-komprimiertes TCP-Paket mit einem
connection identifier. Der Wert des ACK hat sich bei 6 geändert, die Sequenznummer bei 49 und die Paket ID bei 6. Das Paket beinhaltet drei Bytes Daten und
6 Bytes komprimierten Header (Beispiel aus Manual):
Sandini Bib
134
2 Netzwerk-Tools
O ctcp * A+6 S+49 I+6 3 (6)
TCP Pakete
Das allgemeine Format einer TCP-Protokollzeile lautet wie folgt.
src > dst: flags data-sequenznummer ack window urgent options
Um die Bedeutung der einzelnen Felder dieser Protokollzeile zu erfahren, werfen
Sie einen Blick auf Tabelle 2.15.
Feld
Bedeutung
src
Quelladresse
dst
Zieladresse
flags
Das Feld flags wird zumeist aus mehreren Flags gebildet.
Mögliche Flags sind dabei:
S (SYN)
F (FIN)
P (PUSH)
R (RST)
Es kann aber auch vorkommen, dass ein Paket keine Flag gesetzt
hat, dann wird dies durch einen einzelnen Punkt dargestellt.
data-sequenznummer
Dieses Feld beschreibt den Anteil des Sequenzraumes, den die
Daten in einem Feld einnehmen.
ack
Teilt dem Sender mit, wie viele Daten der Empfänger erhalten hat
und wie viele er noch verarbeiten kann. Die ACK-Nummer (Bestätigungsnummer) ist die Sequenznummer des nächsten Bytes, auf
das der Empfänger wartet. Sie ist eine positive Bestätigung aller bis
zu dieser Zahl empfangenen Bytes. Wenn das erste gesendete Byte
mit der Nummer 1 gekennzeichnet war und die nächsten 5000
Bytes erfolgreich empfangen wurden, hätte die Bestätigungsnummer den Wert 5001.
window
Dieses Feld gibt an, wie viele Bytes noch empfangen werden können. Kann der Empfänger zum Beispiel weitere 5000 Bytes verarbeiten, würde das Feld den Wert 5000 enthalten. Das Feld teilt dem
Sender mit, dass er weitere Segmente so lange senden kann, bis die
Anzahl der gesendeten Bytes nicht mehr kleiner ist als das vom
Empfänger angegebene Fenster (Window). Der Empfänger kann
somit den Bytefluss regulieren und steuern, indem er die Größe
dieses Feldes verändert. Ist der Wert im Fenster Null, so wird die
Übertragung eingestellt.
urg
Besagt, dass die Daten, die das Paket enthält, dringend sind.
options
Beschreibt die TCP-Optionen.
Tabelle 2.18 Felder der TCP-Protokollzeile
Sandini Bib
2.4 Tcpdump
135
2
Abbildung 2.52: TCP Header zeigt Ihnen die in Tabelle 2.18 illustrierten Felder in
einer Grafik über den TCP Header.
Abbildung 2.52 TCP Header
Die Felder Src, dst und flags werden Sie in jeder Protokollzeile finden, die anderen hingegen sind optional und hängen vom Inhalt des Pakets ab.
Beispielausgabe
Ich denke, wir haben uns jetzt lange genug mit der Theorie beschäftigt und sollten
zur Praxis übergehen. Für diese Zwecke werden wir uns folgendes Beispiel anschauen:
In unserem Übungsszenario startet der Host Joey seinen FTP Client, um mit dem
FTP-Server Aj eine Verbindung aufzubauen (Dieses Szenario behandelt nur den
Verbindungsaufbau, nicht die Authentifizierung oder den Datenaustausch).
Als Erstes starten wir tcpdump auf dem Rechner Aj und übergeben folgenden
Befehl, der bewirkt, dass ab jetzt das (im Netzwerk nur zu Testzwecken benutze
Interface) eth2 überwacht wird.
Andy@Aj:/home/andy> tcpdump –i eth2
tcpdump: listening on eth2
Jetzt starten wir auf dem Host Joey den FTP Client, um die Verbindung herzustellen.
Aga@Joey:/home/aga> ftp Aj
Connected to Aj.testdomain.de
220 ProFTPD 1.2.2 Server (ProFTPD) [Aj.testdomain.de]
...
Sandini Bib
136
2 Netzwerk-Tools
An dieser Stelle brechen wir mit (STRG) + (C) ab und widmen uns dem Protokoll,
das uns Tcpdump ausgegeben hat (Ich lasse die Uhrzeiten, timestamps, nop-Befehle etc. weg, um ein übersichtlicheres Bild zu erhalten).
Joey.testdomain.de.1039 > Aj.testdomain.de.ftp : S
1721778674:1721778674(0) win 32767 <mss 16396>
Aj.testdomain.de.ftp > Joey.testdomain.de.1039 : S
1715865645:1715865645(0) ack 1721778675 win 32767 <mss 16396>
Joey.testdomain.de.1039 > Aj.testdomain.de.ftp : . ack 1 win 16383
Aj.testdomain.de.ftp > Joey.testdomain.de.1039 : P 1:54(53) ack 1
win 32767
Joey.testdomain.de.1039 > Aj.testdomain.de.ftp : . ack 54 win 16383
Joey.testdomain.de.1039 > Aj.testdomain.de.ftp: F 1:1(0) ack 54 win
16383
Aj.testdomain.de.ftp > Joey.testdomain.de.1039 : F 54:54(0) ack 2
win 32767
Joey.testdomain.de.1039 > Aj.testdomain.de.ftp : . ack 55 win 16383
Lassen Sie uns nun dieses Beispiel Schritt für Schritt durchgehen, damit Sie auch
wirklich die Funktionsweise von Tcpdump verstehen lernen.
In Zeile eins sehen Sie, wie der Rechner Joey.testdomain.de über den Port 1039 einen Verbindungsaufbau zu dem FTP-Server auf dem Rechner AJ startet. Sie sehen
an dem S nach dem Doppelpunkt, dass die SYN Flag gesetzt war. Die Sequenznummer des Pakets können Sie gleich nach dem S erkennen (in diesem Fall 1715865645).
Der Wert in den Klammern zeigt die Anzahl der Bytes an, die Daten des Users sind.
In unserem Fall sind dies 0 Byte. Es sind also keine Userdaten enthalten. Das Windowfeld (win) hat den Wert 32767, das heißt, es können noch 32767 Bytes empfangen
werden. Außerdem beinhaltet die erste Zeile noch eine Option <mss 16396>. Die
mss-Option ist eine sehr häufig aufgeführte Option und gibt an, dass eine maximale
Segment-Größe (max segment size) von 16396 Bytes erbeten wird.
In der zweiten Zeile erkennen wir, dass der FTP-Server (Aj.testdomain.de.ftp)
mit einem ACK-Paket auf das zuvor erhaltene SYN-Paket antwortet. Das restliche
Paket ist identisch mit dem zuvor erhaltenen. Auch auf dieses Paket antwortet Joey
mit einem ACK. Der Punkt in Zeile drei bedeutet, dass keine Flags gesetzt sind, und
da das Paket keine Daten enthält, gibt es auch keine Datensequenznummer. Wohingegen die Bestätigungssequenznummer einen Integerwert von 1 hat (ack 1).
Aus Zeile drei erhalten wir die Information, dass Aj.testdomain.de.ftp 53
Bytes Daten zu Joey schickt (Der Wert in den Klammern verrät uns dies). Außerdem ist das PUSH-Flag gesetzt (P). Von daher sollte der Rest der Bildschirmausgabe nun klar und verständlich sein.
Da Sie nun das ganze Listing durchgegangen sind, werden Sie feststellen, dass
die ersten drei Zeilen keine Data-Sequenznummer enthalten (die Data-Sequenznummer ist die Zahl vor dem ack), dies liegt daran, dass diese Pakete keine Daten
enthielten (Kein Wert steht in Klammern).
Sandini Bib
2.4 Tcpdump
137
Fehler- und Sonderfälle
Nicht jede Ausgabe läuft so glatt ab wie die eben vorgestellte. Es kann durchaus
einmal vorkommen, dass tcpdump nicht in der Lage ist, den kompletten TCP
Header abzufangen und auszuwerten. Falls dies einmal der Fall sein sollte, wird
Ihnen Tcpdump die Teile des Pakets, die es abfangen konnte, darstellen und Ihnen danach ein [|tcp] anzeigen, das Ihnen sagt, dass es Teile des Headers gibt,
die nicht in der Protokollzeile enthalten sind.
Falls der Header komplett abgefangen wurde, ist dies noch lange kein Garant dafür, dass alles glatt gegangen ist. Eine häufige Fehlerquelle sind falsche Optionen,
die entweder zu kurz sind oder sich hinter dem Ende des Headers befinden.
Diese Fälle markiert Tcpdump mit [bad opt].
Eine weitere Fehlerquelle im Zusammenhang mit Optionen kommt dadurch zustande, dass die Länge des Headers vermuten lässt, dass er Optionen beinhaltet,
die IP-Datagrammlänge jedoch zu klein dafür ist. In solchen Fällen macht
Tcpdump Sie mit folgender Meldung darauf aufmerksam: [bad hdr length].
Pakete mit bestimmten Flagkombinationen abfangen
Ich habe erst gestern mit einem Kollegen über den Sinn und die Wirkung dieser
Möglichkeit ausführlich gesprochen. Um Ihnen jene Vorteile (aus der Sicht eines
Sicherheitsbeauftragten) näher zu bringen, werde ich Ihnen ein kurzes Summary
unseres Gespräches geben.
Stellen Sie sich vor, Sie haben einen neuen Router installiert. Sie sind zwar kein absoluter Sicherheitsexperte, wollen aber dennoch, dass Ihr Netzwerk sicher gestaltet
ist. Sie entscheiden sich daher dafür, ein Feature des Routers zu nutzen (die Marke
werde ich an dieser Stelle nicht bekannt geben, aber ich bin mir ziemlich sicher, dass
sie die meisten Leser kennen), welches es Ihnen erlaubt – laut Beschreibung – sicherzugehen, dass nur angeforderte Verbindungen in Ihr Netz gelangen. Alle anderen
werden geblockt. Jetzt fragen Sie sich sicher, welchen genialen Einfall die Entwickler
dieses Hardwaregerätes hatten, um dieses Feature in die Welt zu setzen. Leider
muss ich Sie enttäuschen, sie waren auch nicht viel einfallsreicher, als wir es sind.
Der Router lässt nämlich nur bestätigte Pakete durch. Er nimmt also einfach eine
schlichte Überprüfung vor, ob das ACK-Flag gesetzt ist. Das ist alles. Aus Sicht eines
Sicherheitsexperten oder zumindest eines Menschen mit Sicherheitsverlangen
kommt man natürlich sofort zu dem Schluss, dass dieses Feature kein wirkliches
Hindernis darstellt. Wir haben unser Tcpdump nun so konfiguriert, dass es alle Pakete, die die Flags SYN und ACK gesetzt haben, anzeigt, und hatten innerhalb kürzester Zeit eine ständig wiederkehrende Routine entdeckt, die es uns schließlich ermöglicht hat, die Pakete so zu simulieren, dass wir durch den Router hindurch
gekommen sind. Dieses Ereignis lehrt uns zwei Dinge:
1. Überprüfe stets jedes Sicherheitsfeature.
2. Router sind keine Firewalls.
Sandini Bib
138
2 Netzwerk-Tools
3. Wenn Sie sich jetzt fragen, warum ich Ihnen diese – für Sie belanglose –
Geschichte erzählt habe, möchte ich mich damit verteidigen, dass ich Ihnen auf
diese Weise ein wirklich praktisches Feature von Tcpdump näher bringen wollte.
4. Sie haben – wie Sie aus der Erzählung bereits entnehmen konnten – mit
Tcpdump die Möglichkeit nur Pakete anzeigen zu lassen, die bestimmte Flags
oder bestimmte Flagkombinationen gesetzt haben. Um dieses Feature voll zu
nutzen, sollten wir uns als Erstes einmal anschauen, welche Flags es denn
überhaupt gibt (bei TCP-Paketen wohlgemerkt):
SYN
ACK
PSH
RST
URG
FIN
CWR
ECE
Aus meiner kleinen Geschichte konnte Sie entnehmen, dass der Router nur Pakete
durchlassen wollte, die eine Verbindungsanfrage seinerseits mit einem ACK bestätigten. Ich möchte weiterhin bei diesem Beispiel bleiben, da Szenarien wie diese
oftmals in Sicherheitspapieren und Ähnlichem auftauchen. Dafür sollten wir uns
als Erstes mit dem dort stattfindenden three way handshake beschäftigen.
Um eine TCP-Verbindung aufzubauen und somit eine Datenverbindung zu etablieren, braucht man den so genannten three way handshake. Man hat diese Prozedur so benannt, da die zwei beteiligten Rechner drei Segmente austauschen.
Abbildung 2.53 zeigt Ihnen eine sehr einfach gehaltene Form des three way
handshakes. Wie Sie sehen können, beginnt Host Joey damit, dem Rechner
Patrick ein Paket (Segment Nummer eins) zu schicken, bei dem das SYN-Bit
(Synchronize Sequence Numbers) gesetzt ist. Nachdem Patrick dieses Paket
erhalten hat, kann er daraus entnehmen, dass Joey eine Verbindung aufbauen
möchte und welche Sequenznummer er als Startnummer seiner Segmente verwenden möchte (Wir haben ja bereits gelernt, dass man Sequenznummern unbedingt braucht, um die Daten in der richtigen Reihenfolge zu halten). Jetzt schickt
der Rechner Patrick seinerseits ein Antwortpaket zu Joey (Segment Nummer
zwei), bei dem die Bits SYN und ACK gesetzt sind. Sobald das Paket erhalten
wurde, weiß Joey, dass Patrick das erste Segment erhalten hat und mit welcher
Sequenznummer Patrick beginnen möchte. Jetzt schickt Joey das letzte Paket des
three way handshakes zu Patrick (Segment Nummer drei), das Patrick mitteilt,
dass das zweite Segment erhalten wurde. In diesem letzten Paket ist das ACK Bit
gesetzt und es werden bereits die ersten Daten übermittelt.
Sandini Bib
2.4 Tcpdump
139
J o e y
P a tr ic k
S Y N
S Y N , A C K
A C K , D a te n
Abbildung 2.53 three way handshake
Nachdem wir nun wissen, was ein three way handshake ist und wie er zustande
kommt, können wir wieder zurück auf unser Szenario kommen. Für einen potentiellen Angreifer ist es äußerst wichtig, durch den Router mit den genannten »Sicherheitsoptionen« durchzukommen, damit er die Server dahinter angreifen
kann. Logischerweise ist es also auch für uns wichtig, dass wir uns durch den
Router »hacken«, denn nur so können wir diese Lücke schließen. (Es ist immer
besser, selbst das Netz zu testen, bevor es die bösen Jungs für Sie tun!).
Ein Hacker muss herausfinden, wie er die Sicherheitsoptionen des Routers umgeht oder Sie austrickst. Er wird also schauen, welche Pakete durch den Router
gelangen. Bald wird er feststellen, dass alle Verbindungsanfragen (Paket bei denen nur das SYN-Bit gesetzt ist) abgewiesen werden. Danach wird er bemerken,
dass alle bestätigten Verbindungsanfragen durchgelassen werden (Paket bei denen das ACK-Bit gesetzt ist). Er wird sich also daran machen, die Pakete, die vom
Router hinaus ins Netz gehen und das SYN-Bit gesetzt haben, abzufangen, um
diese analysieren zu können. Und genau das wollen wir auch machen.
Leider gibt es keine einfach gehaltene Funktion bei Tcpdump, die uns dies ermöglicht. Wir (und auch der Hacker) müssen dabei schon etwas herumrechnen. Aber
wie immer werden wir auch dieses Problem vom Anfang bis zum Ende genau
durchsprechen.
Wir wollen also Pakete, bei denen nur das SYN-Bit gesetzt ist. Dazu sollten wir
uns den TCP-Header nochmals ins Gedächtnis rufen. Diesmal aber ohne Daten
und Optionen. Abbildung 2.54 zeigt einen solchen Header.
Betrachten wir die mit dem X markierte Zeile der Abbildung 2.54 genauer und
zerlegen sie in ihre Bestandteile. Dazu müssen wir uns daran erinnern, dass ein
TCP-Header ohne Optionen 20 Oktett Daten beinhaltet. Ein Oktett besteht dabei
wiederum aus 8 Bit. Das erste Oktett findet sich also im Quellportfeld (Genauer
gesagt befinden sich dort zwei Oktette, da das Feld aus 16 Bit besteht). Da das
erste Oktett die Ziffer 0 zugewiesen bekommt, sind die für uns interessanten
Code Bits (darin befinden sich die Flags) in Oktett Nummer 13 zu finden. Wie Sie
ja wissen, benötigen wir um ein vollständiges Oktett zu bekommen 8 Bit. Bis zum
Sandini Bib
140
2 Netzwerk-Tools
Feld mit der Acknowledgementnummer ist dies auch kein Problem. Doch danach
stoßen wir auf Felder mit weniger als 8 Bit. Um auch hier ein Oktett zu bekommen, leiht sich ein Feld, das zu klein ist, ein paar Bit vom nächsten Feld aus, bis es
auch auf 8 Bit kommt. So besteht das 12. Oktett aus 4 Bit Header Länge und 4 Bit
aus dem Feld für Reservierungen. Das 13. Oktett wiederum besteht nur aus den
Codebits. Dies war nicht immer so. Als das Buch entstand, war die Manpage von
Tcpdump noch nicht auf den neuesten Stand gebracht und das Code Bits Feld im
TCP-Header wurde noch mit 6 Bit angegeben. Beachten Sie bitte diese Neuerung.
B it 0
B it 1 5
B it 1 6
B it 3 1
Q u e llp o rt (1 6 )
Z ie lp o rt (1 6 )
S e q u e n z n u m m e r (3 2 )
A c k n o w le d g e m e n tn u m m e r (3 2 )
H e a d e r
L ä n g e (4 ) R e s e r v ie r t (6 )
W in d o w G rö ß e (1 6 )
C o d e B its (6 )
C h e c k su m m e (1 6 )
U rg e n t P o in te r (1 6 )
Abbildung 2.54 TCP-Header
Nachdem wir nun wissen, welche Bestandteile das für uns interessante Oktett 13
beinhaltet, sollten wir uns an die Analyse und Besprechung dieses Feldes machen.
Damit wir uns ein besseres Bild machen können, sollten wir Abbildung 2.55 zu
Rate ziehen.
7
6
5
4
3
2
1
0
C W R
E C E
U R G
A C K
P S H
R S T
S Y N
F IN
1 3 . O k te tt
Abbildung 2.55 Oktett Nummer 13
Wie Sie in der Abbildung erkennen können, sind die verschiedenen Flags (Code
Bits) von rechts nach links mit 0 beginnend und 7 endend durchnummeriert. Als
Sandini Bib
2.4 Tcpdump
141
Erstes sollten wir uns um die zwei ersten Bits (CWR und ECE) kümmern, welche
vor einiger Zeit noch nicht implementiert waren. Stattdessen hat man dort 2 reserved Bits gefunden. Zu dieser Zeit hatten diese Bits stets den Wert 0. Dies wurde
in der RFC 793 festgelegt, da die Bits – wie der Name bereits erahnen lässt – für
zukünftigen Gebrauch reserviert wurden. Zum heutigen Zeitpunkt können aber
alle Bits den Wert 0 oder 1 annehmen. Wird ein Bit bzw. ein Flag gesetzt, bekommt
es den Wert 1 zugewiesen. Falls es nicht gesetzt ist, den Wert 0.
Da wir (genauso wie der Angreifer) nur Pakete angezeigt bekommen wollen, bei
denen das SYN-Bit gesetzt ist, muss dieses Bit den Wert 1 annehmen. Alle anderen Bits dürfen nicht gesetzt sein (Abbildung 2.56).
7
6
5
4
3
2
1
0
C W R
E C E
U R G
A C K
P S H
R S T
S Y N
F IN
0
0
0
0
0
0
1
0
1 3 . O k te tt
Abbildung 2.56 Nur SYN Flag gesetzt
Aus Abbildung 2.56 können Sie den Binärwert des 13. Oktetts entnehmen, der
entsteht, wenn nur das SYN-Bit bzw. das SYN-Flag gesetzt ist. Dieser Wert lautet:
00000010
Da wir Tcpdump aber leider keine Binärwerte übergeben können, müssen wir
diesen Wert in einen Dezimalwert umrechnen. Dies ist im Grunde nur schwer,
wenn man nicht weiß, wie das funktioniert. Falls Sie also nicht wissen sollten, wie
dies vonstatten geht, können Sie Ihr Wissen im folgenden Exkurs auffrischen.
Binär zu Dezimal
Eine Binärzahl besteht aus 8 Bits. Dabei kann ein Bit gesetzt oder nicht gesetzt
sein. Wenn ein Bit gesetzt ist, wird es mit dem Wert 1 belegt, ist es aber nicht gesetzt, so weist man diesem Bit den Wert 0 zu. Daraus ergibt sich, dass Binärwerte nur aus Nullen und Einsen bestehen können. Um diesen Wert in einen
dezimalen Wert umzurechnen, muss man sich vor Augen führen, dass jede
Stelle in einem Binärwert für eine bestimmte Dezimalzahl steht. Die Dezimalwerte verdoppeln sich dafür für jedes weitere Bit (man liest dabei von rechts
nach links). Das heißt, dass das erste Bit die Dezimalzahl 1 wiedergibt, das
zweite die Dezimalzahl 2, das dritte die 4, das Fünfte die 8, dann 16, 32, 64 und
Sandini Bib
142
2 Netzwerk-Tools
schließlich 128. Daraus ergibt sich, dass die größtmögliche Binärzahl einen Dezimalwert von 255 repräsentiert.
Um den Dezimalwert einer Binärzahl zu bestimmen geht man folgendermaßen
vor:
Man stellt sich eine Tabelle vor, die für jedes Bit die dazugehörige Dezimalzahl
enthält. Wenn ein Bit gesetzt ist (es also mit dem Wert 1 belegt ist), zählt man
den dazugehörigen Dezimalwert zu der bereits ermittelten Summe hinzu. Dies
macht man so lange, bis man am Ende der Binärzahl angekommen ist. Abbildung 2.57 zeigt eine solche Umrechnung:
1 2 8
6 4
3 2
1 6
1
1
1
1
0
1 2 8
6 4
3 2
1 6
0
1 . Z e ile : re p rä s e n ta tie rte D e z im a lz a h le n
2 . Z e ile : B in ä rw e rt
3 . Z e ile : z u a d d ie re n d e B e trä g e
8
1
4
2
0
0
1
0
2
d a z u g e h ö r ig e r D e z im a lw e r t
0
2 4 2
Abbildung 2.57 Umrechnungsbeispiel
Wie Sie aus Abbildung 2.57 erkennen können, lautet der Dezimalwert für die
Binärzahl 11110010 242. Dies ergibt sich, wenn Sie die zu den gesetzten Bits gehörenden Dezimalzahlen addieren.
Der Dezimalwert für die Binärzahl 00000010 lautet 2. Jetzt können wir ohne Probleme die Syntax bilden, die es uns erlaubt, Pakete, bei denen nur das SYN-Bit gesetzt ist, anzeigen zu lassen.
Linux: tcpdump –i xl0 tcp[13] == 2
Da unser Angreifer nun genug Pakete, die nur das SYN-Flag gesetzt haben, analysiert hat, möchte er sich nun daran machen, auch die Pakete anzeigen zu lassen,
die zusätzlich das ACK-Flag gesetzt haben. Dazu wirft er einen Blick in Abbildung 2.25 und weiß nun, dass er zusätzlich nur Bit 4 setzen muss (Bit 1 bleibt weiterhin gesetzt). Die Binärzahl für sein Vorhaben lautet nun also:
00010010
Auch diese Zahl rechnet er um (dazu addiert er die Zahlen 2 und 16) und erhält
als Ergebnis 18. Falls er nur diejenigen Pakete abfangen wollte, die SYN- und
ACK-Flags gesetzt haben, wäre er jetzt fast am Ziel. Er müsste lediglich die ausgerechnete Dezimalzahl noch in seine tcpdump-Syntax einbauen:
Linux:~# tcpdump –i xl0 tcp[13] == 18
Sandini Bib
2.4 Tcpdump
143
Da er aber alle Pakete, die entweder nur das SYN-Bit oder das SYN- und ACK-Bit
gesetzt haben, anzeigen lassen will, muss er die erste Syntax (nur SYN Bit gesetzt)
und die zweite Syntax (SYN und ACK Bit gesetzt) logisch verknüpfen. Dazu benutzt er die Oderverknüpfung, die wir ja bereits kennen gelernt haben:
Linux:~# tcpdump –i xl0 ‚tcp[13] == 2 or tcp[13] == 18’
Jetzt ist er in der Lage Pakete, die nur das SYN-Flag, und Pakete, die das SYNund das ACK-Flag gesetzt haben, anzeigen zu lassen.
UDP-Pakete
Jetzt haben wir ausführlich den Output eines TCP-Pakets besprochen und es wird
Zeit, dass wir uns auch um die verbindungslosen Protokolle wie UDP und deren
Pakete kümmern. Ich denke, dass wir uns auch hier eine Beispielprotokollzeile
anschauen sollten.
Joey.testdomain.de.1111 > Aj.testdomain.de.1111 : udp 90
Wie Sie auf den ersten Blick schon erkennen können, sind UDP-Outputs um ein
Vielfaches leichter zu lesen und zu interpretieren als TCP-Ausgaben. Dies liegt
daran, dass UDP selbst um einiges einfacher gestrickt ist als TCP.
Wir können in unserer ersten Beispielzeile sehen, dass ein UDP-Paket mit 90 Byte
Userdaten über den Port 1111 den Rechner Joey.testdomain.de in Richtung des
Hosts Aj.testdomain.de verlässt und dort ebenfalls auf Port 1111 ankommt.
UDP Name Server Requests
Das allgemeine Format einer solchen Protokollzeile sieht folgendermaßen aus:
src > dst: id op? flags qtype qclass name (len)
Auch hierbei steigen wir sofort mit einem Beispiel ein (Beispiel wurde dem
Manual entnommen):
h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)
Wie wir aus dem Beispiel entnehmen können, bittet der Host h2opolo den Domainserver um einen »address record« (qtype=A) verbunden mit dem Namen
ucbvax.berkeley.edu und der Query ID 3 zu bekommen. Das "+" gibt an, dass
die Flag "recursion desired" gesetzt war. Ohne IP und UDP Header war die Query
37 Bytes groß. Da wir keinen Eintrag zwischen dem »+« und der »3« finden können, stellen wir fest, dass es ein normaler Query war. Da auch die »qclass« normal
war, wurde sie nicht aufgeführt. Falls es eine andere Klasse gewesen wäre, hätten
wir diese hinter dem »A« gefunden.
NFS Requests und Replies
Auch hier werden wir uns als Erstes das allgemeine Format ansehen:
src.xid > dst.nfs: len op args
src.nfs > dst.xid: reply stat len op results
Sandini Bib
144
2 Netzwerk-Tools
Sehen wir uns hierzu gleich einige Beispiele an:
Joey.testdomain.de.6909 > Aj.testdomain.de.nfs: 100 readlink fh
21,24/10.731657119
Aj.testdomain.de.nfs > Joey.testdomain.de.6909: reply ok 40
readlinke"../joey"
Joey.testdomain.de.2019 > Aj.testdomain.de.nfs: 144 lookup fh
9,74/4096.6878 "bunny"
Aj.testdomain.de.nfs > Joey.testdomain.de.2019: reply ok 128
lookup fh 9,74/4134.3150
Lassen Sie uns diese Beispiele nun kurz besprechen.
In Zeile 1 sehen Sie, wie der Host Joey.testdomain.de eine Transaktion zum
Rechner Aj.testdomain.de schickt. Beachten Sie dabei, dass in diesem Fall die
Zahl hinter dem Rechnername (6909) nicht der Quellport, sondern die Transaktionsnummer ist. Die nächste Stelle sagt uns, dass die Anfrage 100 Byte groß ist
(ohne UDP- und IP-Header). Die Aktion ist ein readlink (read symbolic link) mit
dem File Handle (fh) 21,24/10.731657119.
Die zweite Zeile besteht aus der Antwort des Rechners Aj.testdomain.de auf die
gestellte Anfrage und beinhaltet den Inhalt des Links. Das Paket ist 40 Byte groß.
Zeile drei zeigt ein Beispiel für einen lookup. In einem 144 Byte großen Paket stellt
Joey.testdomain.de mit der Transaktionsnummer 2019 eine lookup-Anfrage
für den Name bunny im Verzeichnis (bzw. seinem File Handle) 9,74/4096.6878.
Die Antwort darauf finden wir in dem 128 Byte großen Paket in Zeile 4.
Mit Hilfe der Verbose-Funktion, die Sie über den Optionspunkt -v aufrufen, können Sie noch mehr Informationen über das abgefangene Paket erhalten. Welche
zusätzlichen Daten Sie hierbei erhalten können, zeigt die folgende Auflistung:
TTL
ID
Fragmentation-Felder
Dateityp
Dateiattribute
Dateimodus
UID
GIU
Dateigröße
Auch hier sollten wir uns ein Beispiel dazu ansehen. Dabei sollten Sie aber bedenken, dass diese Protokollzeile nur ein kleiner Auszug des originalen Outputs ist,
da das Listing und die dazugehörige Beschreibung ansonsten über einige Seiten
gegangen wäre.
Sandini Bib
2.4 Tcpdump
145
Joey.testdomain.de.378b > Aj.testdomain.de.nfs: 198 read fh 21,24/
736358298 8167 @ 30900
Aj.testdomain.de.nfs > Joey.testdomain.de.378b: reply ok 1472 read
REG 90061 ids 389/0 58100
Die erste Zeile zeigt wieder eine Transaktionsanfrage an den Rechner Aj.test
domain.de.nfs mit einem 198 Byte großen Paket. Dabei wird darum gebeten, dass
dieser 8167 Bytes aus der Datei 21,24/736358298 ab Offset 30900 liest.
In der zweiten Zeile sehen Sie die Antwort darauf (ist erst das erste Antwortpaket, es werden mehrere folgen). Dieses Paket ist 1472 Byte groß. Es handelt sich
bei der Datei um ein reguläres File (Dateityp wird als REG angegeben). Die Dateigröße beläuft sich auf 58100 Bytes. Dazwischen sehen Sie den Dateimodus und
die USER ID / GROUP ID.
Um NFS-Verkehr abzuhören, können Sie die Option -s 192 benutzen.
AFS Requests und Replies
Natürlich werfen wir auch hier einen Blick auf die allgemeine Ausgabe der Protokollzeile:
src.sport > dst.dport: rx packet-type
src.sport > dst.dport: rx packet-type service call call-name args
src.sport > dst.dport: rx packet-type service reply call-name args
Die Beispiele dazu könnten folgendermaßen aussehen:
Joey.testdomain.de.9000 > Aj.testdomain.de.afsfs: rx data fs call
rename old fid 23742974/1/1 ".test.test" new fid 23874234/1/1
".test"
Aj.testdomain.de.afsfs > Joey.testdomain.de.9000: rx data fs reply
rename
In der ersten Zeile schickt der Rechner Joey.testdomain.de über den Port 9000
ein RX Paket an den Host Aj.testdomain.de. Wie man erkennen kann war, dies
ein RX Daten-Paket (rx data) und war für den Dateiserver (afsfs = Adrew File
System File Server) gedacht und initialisiert damit einen RPC Call. Bei diesem
RPC Call handelt es sich um einen Rename (rename) mit einer alten Datei (old)
mit der ID (fid) 23742974/1/1 und einem alten Dateinamen (old filename) sowie einer neuen Datei und einem neuen Dateinamen.
Die Antwort darauf erfolgt in der zweiten Zeile. Die gewünschten Calls waren erfolgreich, ansonsten wäre statt eines Datenpackes ein Abordpaket angekommen.
Falls Sie sich der Verbose-Option (einfach oder doppelt) bedienen, bekommen Sie
zusätzlich folgende Informationen ausgegeben:
ACK-Pakete
Zusätzliche Header-Informationen
Sandini Bib
146
2 Netzwerk-Tools
RX call ID
Call Nummer
Sequenznummer
Seriennummer
RX Flags im Paket
MTU negotiation Information
Falls Sie die Verbose-Option dreifach initialisieren (-vvv), erhalten Sie noch
mehr Informationen:
Error Codes für Abordpakete
Um AFS-Verkehr anzeigen zu lassen, benutzen Sie die -s 256-Option.
KIP Appletalk (DDP in UDP)
Appletalk DDP-Pakete, die in UDP-Datagramme eingekapselt sind, werden aus
dieser Kapsel befreit und als DDP-Pakete angezeigt, dabei werden die Informationen aus dem UDP-Header komplett verworfen. Hierbei bedient sich Tcpdump
der Datei /etc/atalk.names um die Felder appletalk net und node numbers zu
übersetzen.
Zeilen in einer solchen Datei haben folgendes Format:
number
name
1.254
ether
16.1
testnetz
1.254.110
Joey
Die ersten beiden Zeilen geben die Namen der Appletalknetzwerke wieder. Die
dritte Zeile steht für den speziellen Host. Sie können Leerzeilen und Kommentare
in diese Datei einfügen (einen Kommentar müssen Sie dabei mit dem #-Zeichen
einleiten).
Appletalkadressen sollten folgendermaßen angeführt werden:
net.host.port
Dazu einen Auszug aus einer Beispieldatei:
150.6.200.2 > testnetz.100.200
munich.2 > testnetz.100.200
testnetz2.150.250 > testnetz.2
Falls die Datei /etc/atalk.names nicht existiert oder kein Eintrag für einen bestimmten Appletalkhost oder ein bestimmtes Appletalknetzwerk besteht, werden die
Adressen numerisch ausgegeben.
Sandini Bib
2.4 Tcpdump
147
Die erste Zeile dieses Auszuges bedeutet, dass der Host 209 im Netz 150.1 über
DDP Port 2 etwas an den Port 200 des Hosts 100 im testnetz sendet.
Die zweite Zeile bedeutet im Grunde dasselbe wie die erste, mit dem kleinen Unterschied, dass der Name des Quellhosts bekannt ist (munich).
In der dritten Zeile sendet der Host 150 aus dem Netz testnetz2 über den Port 250
einen Broadcast an das Netz testnetz auf den Port 2 (NBP Port). Sie können erkennen, dass es sich hierbei um einen Broadcast handelt, da kein Rechnername
beziehungsweise keine Rechneradresse angegeben wurde.
NBP-Pakete
Ich denke, wir können gleich mit einem Beispiel und einer darauf folgenden Besprechungen starten:
testnetz.100.200 > testnetz2.2 : nbp-lkup 190: "=:Drucker@*" 250
testnetz2.150.2 > testnetz.100.200 : nbp-reply 190:
"HPLaserJet:Drucker@*" 310
Joey.2 > testnetz.100.200 : nbp-reply 190: "HPFarbLaser:Drucker@*"
178
Die erste Zeile ist eine Anfrage für einen name lookup für Drucker, welche vom
Host 100 aus dem Netz testnetz an die Broadcastadresse des Netzes testnetz2
geschickt wurde. Die NBP ID für den lookup ist 190.
Die Antwort auf diese Antwort finden wir in Zeile zwei (da die ID dieselbe ist).
Darin weist der Host 150 aus dem Netz testnetz2 darauf hin, dass er einen Drucker namens »HPLaserJet« hat, welcher auf Port 310 registriert ist.
Die dritte Zeile stellt ebenfalls eine Antwort auf die erste Anfrage dar. In diesem
Paket berichtet der Host Joey, dass er auch einen Drucker besitzt, welcher auf Port
178 sitzt. Der Drucker hat den Namen HPFarbLaser.
ATP Pakete
Auch hier, denke ich, können wir gleich mit einem Beispiel beginnen.
testnetz.200.100 > Joey.150: atp-req 11298<0-7> 0xae300001
Joey.150 > testnetz.200.100: atp-resp 11298:0 (512) 0xae040000
Joey.150 > testnetz.200.100: atp-resp 11298:1 (512) 0xae040000
Joey.150 > testnetz.200.100: atp-resp 11298:2 (512) 0xae040000
Joey.150 > testnetz.200.100: atp-resp 11298:3 (512) 0xae040000
Joey.150 > testnetz.200.100: atp-resp 11298:4 (512) 0xae040000
Joey.150 > testnetz.200.100: atp-resp 11298:5 (512) 0xae040000
Joey.150 > testnetz.200.100: atp-resp 11298:6 (512) 0xae040000
Joey.150 > testnetz.200.100: atp-resp*11298:7 (512) 0xae040000
testnetz.200.100 > Joey.150: atp-req 11298<3,5> 0xae0300001
Joey.150 > testnetz.200.100 atp-resp 11298:3 (512) 0xae040000
Joey.150 > testnetz.200.100 atp-resp 11298:5 (512) 0xae040000
testnetz.200.100 > Joey.150: atp-rel 11298<0-7> 0xae0300001
testnetz.200.110 > Joey.150: atp-req*11299<0-7> 0xae0300002
Sandini Bib
148
2 Netzwerk-Tools
Wie wir aus Zeile 1 erfahren, initiiert testnetz.200 eine Transaktion mit der ID
11298 mit dem Host Joey und erbittet dabei bis zu 8 Pakete (von 0 bis 7). Die Anzahl der Userdaten ist in hexadezimaler Form am Ende der Zeile angegeben.
Danach sehen wir, dass der Host Joey mit 8 Paketen mit jeweils einer Größe von
512 Bytes (ohne ATP Header) antwortet. An der Transaktionsnummer erkennen
wir, dass es sich um Antwortpakete auf den ersten Request handelt. Die Zahl hinter der Transaktionsnummer stellt die Paketsequenznummer in der Transaktion
dar.
Das Sternchen (*) in Zeile 9 signalisiert, dass das EOM Bit gesetzt wurde.
In Zeile 10 bittet testnetz.200 den Host Joey die Pakete Nummer 3 und Nummer 5 nochmals zu senden. Nachdem diese wieder gesendet wurden, signalisiert
testnetz.200 den release für diese Verbindung (atp-rel).
In der letzten Zeile wird bereits die nächste Anfrage gestartet. Das Sternchen hierbei gibt an, dass XO (exactly one) nicht gesetzt war.
Sandini Bib
3 Systemaudit
In diesem Buch finden Sie sehr viele Tools, mit denen Sie den Stand der Sicherheit
in Ihrem System verbessern können. Doch woher sollen Sie wissen, wann Sie »sicher genug« sind (ich weiß, dass man nie sicher genug sein kann, aber ...) oder
wann die Sicherheit zu Lasten der Performance oder der Benutzbarkeit des Systems geht. In diesem Kapitel werden wir einige Tools besprechen, die Ihnen bei
der Beantwortung dieser Fragen helfen werden.
3.1
Nmap
Nmap ist wohl der bekannteste Netzwerk- und Securityscanner, den es zurzeit auf
dem freien Markt gibt, und dies nicht ohne Grund. Er bietet eine Vielzahl von
Scanmöglichkeiten und unterstützt Features wie OS-Detection. Falls Sie sich fragen, was ein Scanner in einem Securitybuch zu suchen hat, kann ich nur darauf
hinweisen, dass nur derjenige sein System sicherer gestalten kann, der die Schwächen seines Netzwerkes kennt. Und um dies zu erreichen, kommt man um die Benutzung und Zuhilfenahme der »Waffen des Feindes« nicht herum.
3.1.1
Installation
Da die meisten Distributionen dieses Tool mitliefern, kann man sich eigentlich
das Herunterladen sparen. Doch wer stets sicher und up-to-date sein will, kommt
um einen Download nicht herum. Wie immer können Sie sich dieses Tool von der
Buch-Website oder direkt von der offiziellen Website downloaden (www.insecure.org/Nmap).
Nachdem Sie sich das aktuelle Paket von einer der angegebenen Webseiten gezogen haben, führen Sie noch folgenden Befehl aus und Ihr System ist um ein
Sicherheitstool reicher.
Linux:~# rpm –i Nmap-version.rpm
3.1.2
Verwendung
Da es bei diesem Programm nicht viel zu konfigurieren gibt, können wir uns
gleich mit den Einsatzmöglichkeiten beschäftigen.
Der Programmaufruf erfolgt über den aufgeführten Befehl:
Linux:~# Nmap [Scanmodus] [Optionen] Hostname / IP
Sandini Bib
150
3 Systemaudit
Scanmodi
Im Folgenden werden Sie eine Auflistung aller zurzeit verfügbaren Scanmodi mit
der entsprechenden Syntax erhalten und erfahren, was die einzelnen Modi bewirken.
TCP connect()-Scan
Dies ist die einfachste Form des Scannens, da es den connect()-Systemaufruf
von Linux benutzt, um eine Verbindung zu einem interessanten Port zu öffnen.
Falls dieser Verbindungsversuch gelingt – der Port also »lauscht« –so wird der
Systemaufruf erfolgreich sein, ansonsten ist der Port nicht erreichbar. Diese Methode hat den enorm großen Vorteil, dass keine speziellen Privilegien erforderlich sind (wie zum Beispiel bei Raw Sockets… ) und somit jeder User des Systems
einen Scan mit dieser Methode durchführen kann. Der Aufruf lautet wie folgt:
Linux:~# Nmap –sT [Optionen] Hostname / IP
TCP SYN-Scan
Man bezeichnet diese sehr beliebte Scanmethode auch oftmals als »halb offenen«
Scan, da eigentlich keine volle TCP-Verbindung aufgebaut wird, sondern nur ein
SYN Paket zu einem bestimmten Port geschickt wird. Falls auf diese Anfrage als
Antwort ein SYN oder ein ACK zurückgeschickt wird, lässt dies darauf schließen,
dass der Port geöffnet ist. Es kann jedoch auch vorkommen, dass als Antwort ein
RST geschickt wird, was bedeutet, dass der Port geschlossen ist. Im Falle eines
ACK- oder SYN-Antwortpakets wird sofort ein RST zurückgeschickt, um die Verbindung zu beenden. Leider benötigt man für diese Option Rootrechte.
Linux:~# Nmap –sS [Optionen] Hostname / IP
Stealth FIN-Scan
Die eben kennen gelernte TCP-SYN-Scan-Methode mag auf den ersten Blick das
A und O eines Scans sein, aber es gibt Gott sei Dank auch Möglichkeiten solche
Scans leicht zu entdecken. Deshalb hat man sich entschlossen eine Reihe von
Scanmodi in Nmap einzubauen, die es ermöglichen, diejenigen Mechanismen zu
umgehen, die SYN-Scanattacken ausfindig machen können. Dabei hat man sich
der RFC 793 bemächtigt, welche besagt, dass geschlossene Ports auf ein »Probepaket« mit einem RST reagieren müssen, während offene Ports diese zu ignorieren haben. (Natürlich gibt es wieder einige Hersteller, die sich nicht an den Standard halten können: Microsoft, Cisco, HP/UX, BSDI, MVS und IRIX).
Ein Stealth FIN-Scan sendet als »Probepaket« ein leeres FIN-Paket und wartet die
Antwort ab. Beachten Sie dabei bitte, dass die Scans nicht bei Windows-Rechnern
funktionieren werden.
Linux:~# Nmap –sF [Optionen] Hostname / IP
Sandini Bib
3.1 Nmap
151
Xmas Tree-Scan
Auch diese Scanmethode macht sich die in der RFC 793 vorgeschriebene Arbeitsweise für Ports zu Nutze und wird somit nicht bei Windows-Rechnern funktionieren. Anders als Stealth FIN-Scans benutzt diese Scanart keine FIN-Pakete, sondern schickt Pakete, bei denen die FIN-, URG- und PUSH-Flags gesetzt sind.
Linux:~# Nmap –sX [Optionen] Hostname / IP
Null-Scan
Diese Scanmethode ist die letzte, die auf den Vorgehensweisen der RFC 793 beruht. Falls Sie diesen Scan benutzen, wird ein »Probepaket« geschickt, das keine
Flags gesetzt hat.
Linux:~# Nmap –sN [Optionen] Hostname / IP
Ping-Scanning
Bei einem Ping-Scan wird kein Port-Scan durchgeführt, sondern nach aktiven
Hosts im Netzwerk gesucht. Dafür werden ICMP-Echo-Reply-Pakete an die interessanten Rechner geschickt. Falls einer dieser Hosts antwortet, ist er aktiv. Sie
können Ihre Firewall oder Ihren Router aber so konfigurieren, dass auf diese Pakete nicht geantwortet wird und Ihr Rechner somit als inaktiv erkannt wird. Dies
schützt Sie aber noch lange nicht vor solchen Pingdurchläufen, da – falls die erste
Methode misslingt – ein TCP-ACK-Paket auf einen bestimmten Port (Standardport ist 80) geschickt wird. Falls Ihr Rechner auf dieses Paket mit einem RST-Paket antwortet, weiß Nmap, dass er aktiv ist. Zur Absicherung hat man auch noch
eine dritte Scanmethode eingebaut. Hierbei wird ein SYN-Paket losgeschickt und
auf ein ACK/SYN-Antwortpaket gewartet. (Dieser Scan wird bei jedem Portscan
automatisch durchgeführt, um zu sehen, ob der Rechner aktiv ist.)
Linux:~# Nmap –sP [Optionen] Hostname / IP
UDP Scan
Es ist wesentlich schwieriger, einen UDP-Scan durchzuführen, als offene TCPPorts zu erkennen. Fakt ist, dass es keine 100%ig sichere Methode für das Erkennen von offenen UDP-Ports gibt, da – wie wir ja wissen – dieses Protokoll nicht
verbindungsorientiert arbeitet. Um offene UDP-Ports zu erkennen, behilft man
sich daher mit einem kleinen Trick. Man schickt zu jeder UDP-Portadresse ein leeres UDP-Paket und wartet auf eine ICMP port-unreachable-Nachricht, die uns bestätigt, dass der Port geschlossen ist. Falls wir diese Nachricht aber nicht bekommen, können wir annehmen, dass der Port geöffnet ist.
Man sollte dabei aber nicht den Nachteil dieses Tricks vergessen. Da die meisten
Betriebssysteme von sehr intelligenten Menschen entwickelt wurden, hat man
dem Vorschlag der RFC 1812 Folge geleistet und die ICMP-destination-unreachable-Nachrichten pro Sekunde limitiert. Dies hat zur Folge, dass solche Scans
enorm lange dauern können. Natürlich war Microsoft auch hier wieder klüger
Sandini Bib
152
3 Systemaudit
und hat in seinen OS-Kernel kein Limit für solche Nachrichten eingebaut, was zur
Folge hat, dass UDP-Scans, die auf Windows-Rechner zielen, enorm schnell sind.
Linux:~# Nmap –sU [Optionen] Hostname / IP
IP-Protocol-Scans
Auch diese Scanoption nutzt eine ICMP-Fehlermeldung um herauszufinden, ob
bestimmte Protokolle auf dem Zielrechner unterstützt werden. Dabei wird ein
RAW-IP-Paket ohne weiteren Protokollheader zu jedem spezifizierten Protokoll
am Zielrechner geschickt. Falls Nmap eine ICMP protocol unreachable-Fehlermeldung bekommt, weiß es, dass das spezifizierte Protokoll unterstützt wird.
Falls diese Meldung nicht zurückgeschickt wird, so nimmt Nmap an, dass das
Protokoll »offen« ist. Beachten Sie dabei, dass Hosts, die AIX, HP-UX oder digital
Unix als Betriebssystem fahren, keine Fehlermeldung zurückschicken und somit
alle Protokolle als »offen« gekennzeichnet werden.
Linux:~# Nmap –sO [Optionen] Hostname / IP
ACK-Scans
Diese Scanmethode wird des Öfteren benutzt, um Firewallregeln auszulesen oder
den Typ der vorgeschalteten Firewall zu bestimmen. Um dies zu erreichen,
schickt Nmap ACK-Pakete mit unterschiedlich aussehenden Acknowledgement/
Sequenznummern zum angegebenen Port bzw. Ports. Falls Nmap ein RST-Paket
als Antwort empfängt, so wird der Port als nicht gefiltert klassifiziert, falls nichts
oder eine ICMP-Fehlermeldung zurückkommt, wird die Klassifizierung auf gefiltert gesetzt. Normalerweise werden die nicht gefilterten Ports nicht gezeigt.
Linux:~# Nmap –sA [Optionen] Hostname / IP
Window-Scans
Dieser Scan ist dem ACK-Scan sehr ähnlich. Es kann aber vorkommen, dass dieser Scan offene genauso wie gefilterte oder ungefilterte Ports anzeigt. Dies wird
durch eine Anomalie in der TCP-Windowgröße ermöglicht. Um zu erfahren, welche Betriebssysteme dieser Scanmethode auf den Leim gehen, besuchen Sie bitte
die offizielle Homepage.
Linux:~# Nmap –sW [Optionen] Hostname / IP
RPC-Scans
Sie können diese Scanart mit den verschiedenen anderen Scantechniken kombinieren, um herauszufinden, ob bestimmte, als offen gekennzeichnete Ports RPC(remote procedure call) Ports sind. Falls dies zutrifft, erhalten Sie außerdem die Versionsnummer und den Programmnamen. Um das zu erreichen überflutet Nmap
die ausgesuchten Ports mit SunRPC Null-Befehlen.
Linux:~# Nmap –sR [Optionen] Hostname / IP
Sandini Bib
3.1 Nmap
153
FTP-Bounce-Attack
Ich werde diese Option nur kurz ansprechen, da es in diesem Buch nicht darum
geht, wie man sich in bestimmte Systeme einhackt, sondern wie man sein eigenes
Netzwerk vor Crackern schützt. Kurz gesagt macht sich dieser »Scantyp« einen
Bug im FTP-Protokoll zu Nutze, der es einem erlaubt, sich von einem bestimmten
Host zu einem FTP-Server zu verbinden und diesem dann mitzuteilen, dass er
Daten zu irgendeinem Punkt im Internet schicken soll. Diese Daten könnten natürlich auch Scans sein.
Linux:~# Nmap –b [Optionen] Username:Passwort@Server:Port Zielhost
Optionen
Die folgenden Optionen sind optional und müssen daher nicht angegeben werden. Sie bieten aber sehr nützliche Einstellungsmöglichkeiten und sollten deshalb
auf jeden Fall genutzt werden.
Host nicht pingen
Diese Option teilt Nmap mit, dass es auf keinen Fall einen Host pingen soll, bevor
er gescannt wurde, da bestimmte Firewalls ICMP echo requests blocken. Falls Sie
diese »normal« scannen, werden Ihre Scans nicht erfolgreich sein und die Pakete
an der Firewall abblocken.
Linux:~# Nmap –P0 Hostname / IP
Testen, welcher Host online ist
Ähnlich zum Ping können Sie mit dieser Option testen, ob bestimmte Hosts online sind. Dabei verwendet Nmap aber keine ICMP-echo-request-Pakete und
wartet auf eine Antwort, sondern wirft TCP-ACK-Pakete ins Netzwerk und wartet, dass der Host diese mit einem RST beantwortet. Falls er dies tut, weiß Nmap,
dass er online ist. Diese Option erlaubt es also auch Hosts zu testen, die ICMP-Pakete blocken. Welchen Port Sie bei diesem Szenario ansprechen, liegt bei Ihnen.
Der Defaultport ist 80.
Linux:~# Nmap –PT <Portnummer> Hostname / IP
Sie können diese Option auch durchführen, indem Sie SYN- anstatt ACK-Pakete
in das Netzwerk werfen. Auch hier sollten aktive Hosts mit einem RST oder
SYN|ACK antworten.
Linux:~# Nmap –PS Hostname / IP
Die dritte Option im Bunde nutzt einen wirklichen Ping, um herauszufinden, ob
ein Host aktiv ist oder nicht. Zusätzlich können Sie mit dieser Option noch subnet-directed broadcast-Adressen ausgeben lassen. Da diese IP-Adressen von außen erreichbar sind und oftmals beliebte Ziele für Denial-of-Service-Attacken sind,
sollten Sie diese auf jeden Fall deaktivieren oder schützen.
Linux:~# Nmap –PI Hostname / IP
Sandini Bib
154
3 Systemaudit
Ping auf zwei Arten
Diese Option stellt den Default Pingtypen dar und benutzt dabei ACK (-PT) und
ICMP (-PI).
Linux:~# Nmap –PB Hostname / IP
Betriebssystem feststellen
Um herauszufinden, ob Angreifer das Betriebssystem auf einem von außen erreichbaren Host erkennen können, nutzen Sie diese Option. Nmap geht dabei folgendermaßen vor:
Als Erstes wird ein TCP/IP-Fingerprint des zu scannenden Hosts erstellt, welcher
dann mit einer Liste schon vorhandener Fingerprints verglichen wird. (Diesen
Fingerprint könnte man als eine Sammlung winziger Eigenheiten einiger Betriebssysteme beschreiben.) Falls Nmap eine Übereinstimmung findet, wird das
potentielle Betriebssystem ausgegeben und dem Angreifer damit viel Arbeit genommen.
Diese Option bietet Ihnen (oder einem potentiellen Angreifer) aber ebenfalls die
Möglichkeit einen TCP Sequence Predictability Classification-Test durchzuführen.
Damit können Sie bestimmen, wie schwer es ist eine gefälschte TCP-Verbindung
zu dem gescannten Host aufzubauen.
Linux:~# Nmap –O Hostname / IP
TCP Reverse Ident Scanning
Dies betrifft Sie nur, falls Sie identd als Superserver betreiben. Falls dies der Fall
ist, ist es für einen entfernten Angreifer möglich, den Usernamen, unter dem ein
bestimmter Prozess läuft, der via TCP verbunden ist, herauszufinden. Als Beispiel können Sie sich zu Ihrem FTP-Server verbinden und identd benutzen, um
den Usernamen herauszufinden, unter dem der Dienst läuft. Diese Option kann
nur durchgeführt werden, wenn eine vollständige Verbindung mit dem Zielport
aufgebaut wurde (zum Beispiel mit der Option –sT).
Linux:~# Nmap –I Hostname / IP
Paketheader aufsplitten
Ein Angreifer kann mit dieser Option SYN-, FIN-, XMAS- und NULL-Scans in
kleine IP-Pakete zerlegen. Somit wird der IP-Header über mehrere Pakete verteilt,
was es für Firewalls (Paket-Filter) und Intrusion-Detection-Systeme schwieriger
macht, auch wirklich zu entdecken, was gerade vorgeht. Ein Scan kann auf diese
Weise unbemerkt durchgeführt werden. Sie sollten diese Option benutzen, um zu
testen, ob auch Sie dafür anfällig sind.
Linux:~# Nmap –f Hostname / IP
Sandini Bib
3.1 Nmap
155
Verbose Mode
Der Verbose Mode gibt Ihnen die Möglichkeit mehr Ausgaben auf die Standardausgabe zu verlangen. Dies ist oftmals sehr praktisch, wenn Sie zum Beispiel sehen wollen, was ein Programm in diesem Moment genau macht (zum Beispiel bei
der Fehlersuche sehr hilfreich).
Linux:~# Nmap –v Hostname / IP
Hilfefunktion
Eine sehr praktische Funktion, die in keinem Programm fehlen darf. Beim Aufruf
der Hilfefunktion bekommen Sie eine kleine Übersicht einiger Befehle und jeweils
eine kurze Beschreibung dazu.
Linux:~# Nmap –h Hostname / IP
Logfile (lesbar)
Sie können diese Option nutzen, um von Ihrem Scan ein Logfile anlegen zu lassen, welches Sie gut lesen können. Die Verwendung dieses Befehls bewirkt dasselbe wie der >-Operator.
Linux:~# Nmap –oN <Dateiname> Hostname / IP
Logfile (XML)
In letzter Zeit haben sich die meisten Programmierer bemüht, irgendein XMLPlugin oder Ähnliches in ihre Programme zu integrieren. Nmap stellt hierbei
keine Ausnahme dar, sondern bietet Ihnen mit dieser Funktion die Möglichkeit
ein Logfile im XML-Format anlegen zu lassen, welches dann schnell durch andere
Programme weiterverarbeitet werden kann.
Linux:~# Nmap –oX <Dateiname> Hostname / IP
Logfile (grepable)
Diese Funktion stammt noch aus den Zeiten, als man XML noch nicht so gut
kannte. Sie legt ebenfalls ein Logfile an, doch schreibt sie dabei alle Informationen
in eine Zeile, so dass Sie mit Programmen wie grep leicht an die gewünschten
Daten kommen (Ports, IP-Adressen etc.).
Linux:~# Nmap –oG <Dateiname> Hostname / IP
Logfile (Skript Kiddie)
Ich erwähne diese Funktion (so wie manch andere ebenfalls) nur zum Zweck der
Vollständigkeit. Sie erlaubt es Ihnen, ein Logfile über einen Scan in einem SkriptKiddie-Format anzulegen (Ein Skript Kiddie ist ein Möchtegernhacker, der sich
bestimmter Tools in Internet bedient, um damit Schaden anzurichten. Er hat an
sich keine Ahnung von einem System und strebt auch nicht danach, diese Kenntnisse zu erlangen. Für uns ist diese Funktion definitiv nicht von Nutzen.)
Linux:~# Nmap –oS <Dateiname> Hostname / IP
Sandini Bib
156
3 Systemaudit
Abgebrochenen Scan wieder aufnehmen
Falls Sie einen Scan mit (STRG)+(C) abgebrochen haben und ein Logfile dazu existiert, haben Sie die Möglichkeit, diesen Scan mit exakt denselben Argumenten
(Sie brauchen und dürfen keine neuen oder schon verwendeten Argumente angeben) wieder aufzunehmen.
Linux:~# Nmap –-resume <Dateiname> Hostname / IP
Zielinformationen aus Datei
Nmap bietet Ihnen die Möglichkeit die für einen Scan notwendigen Zielinformationen aus einer Datei zu beziehen. Diese sollte dabei eine Liste von Hosts oder
Netzwerken getrennt durch Leerzeichen, tabs oder neue Zeilen enthalten. Falls
Sie die Datei – nennen, liest Nmap die Zielinformationen von STDIN.
Linux:~# Nmap –iL <Dateiname>
Zufallsscan
Auch diese Option ist für uns (da wir nur unser System testen wollen) eher nebensächlich, denn sie erlaubt es Ihnen, Nmap die Hosts, die zu scannen sind,
selbst genieren zu lassen. Dabei werden natürlich nicht die Hosts selber generiert,
sondern ein Zufallsscan initiiert.
Linux:~# Nmap –iR
Portbereiche angeben
Falls Sie nur bestimmte Ports scannen wollen, können Sie das mit dieser Option
angeben. Um nur einen einzelnen Port zu scannen, geben Sie bitte -p <Portnummer> an; um einen Bereich zu spezifizieren ist die Angabe -p <erster Port><letzter Port> nötig. Sie können diese Angaben auch verknüpfen.
Linux:~# Nmap –p <Portbereich> Hostname / IP
Sehr schnelle Scans
Sie können diese Option nutzen, falls Sie nur die Port, die in der services-Datei
von Nmap aufgelistet sind, scannen wollen.
Linux:~# Nmap –F Hostname / IP
Ablenkungsmanöver
Nmap bietet eine für einen Angreifer sehr praktische Methode, um von sich abzulenken. Normalerweise würde ich diese Option nicht erwähnen, da sie aber eine
große Gefahr für uns Netzwerkadministratoren darstellt, komme ich nicht um die
Vorstellung herum. Diese Funktion ermöglicht es einem Angreifer, bestimmte
Hosts anzugeben, die ebenfalls Ihr Netzwerk scannen. Im Regelfall berichtet uns
unser IDS dann, dass wir zehn Mal von unterschiedlichen IP-Adressen gescannt
wurden. Wir wissen aber nicht, welche IP-Adresse der Angreifer hat. Falls Sie
diese Option testen wollen, um zu sehen, ob Ihr Scan-Detektor anfällig für diesen
Sandini Bib
3.1 Nmap
157
Angriff ist (was sehr wahrscheinlich ist), müssen Sie jede gefälschte IP-Adresse
mit Kommas trennen und an der Stelle, an der Ihre wirkliche IP-Adresse auftauchen soll, ein ME setzen. Falls Sie ME nicht setzen, wird Nmap Ihre IP-Adresse an
eine zufällig gewählte Stelle setzen. Es ist aber zu empfehlen, Ihre IP-Adresse
nach der sechsten Stelle zu platzieren, da die meisten Scan-Detektoren diese Stellen erst gar nicht mehr anzeigen.
Linux:~# Nmap –D <falscher Host1, falscher Host2 … ME> Hostname / IP
IP-Adresse spoofen
Wie wir im vorhergehenden Abschnitt gesehen haben, bietet Nmap eine sehr
gute Option, um IP-Adressen zu verstecken. Als ob uns dies das Leben noch nicht
schwer genug machen würde, haben Angreifer eine weitere – durchaus mächtigere – Option zur Verfügung, die es ihnen erlaubt, ihre IP-Adresse zu spoofen.
Dabei müssen sie lediglich die unten aufgeführte Syntax eingeben und schon
werden wir uns sehr schwer tun, den Absender der Scanpakete zu finden. (Obwohl es dabei sehr fraglich ist, ob der ISP des Angreifers überhaupt gespoofte Pakete weiter routet oder ob der Angreifer das nötige Wissen besitzt, um die Antwortpakete zu empfangen).
Linux:~# Nmap –S <IP-Adresse>
Interface angeben
Sie haben auch die Möglichkeit, Nmap das Interface, an dem Pakete gesendet und
empfangen werden, zu übergeben.
Linux:~# Nmap –e <Interface>
Quellport für Scans angeben
Nachdem Sie Ihre Firewall aufgesetzt haben, können Sie sie unter anderem mit
dieser Option testen. Hierbei können Sie den Quellport, von dem die Scans ausgehen, setzen. Manchmal ist eine Firewall so schlecht konfiguriert, dass sie Scans
von bestimmten Ports (TCP 20) durchlässt. Überprüfen Sie mit Nmap, ob Sie Änderungen an der Konfiguration vornehmen müssen.
Linux:~# Nmap –g <Portnummer>
Namensauflösung unterdrücken
Um die Scans zu beschleunigen, können Sie Nmap dazu bringen, niemals reverse
DNS Resolution zu betreiben.
Linux:~# Nmap –n
Namensauflösung erzwingen
Sie können aber auch die reverse DNS Resolution erzwingen, so dass Nmap bei
jeder IP-Adresse den Namen auflöst.
Linux:~# Nmap –R
Sandini Bib
158
3 Systemaudit
Ports der Reihe nach scannen
Für uns Administratoren ist diese Option sehr praktisch. Sie gibt an, dass Nmap
die Ports der Reihe nach scannt.
Linux:~# Nmap –r
Hosts nicht der Reihe nach scannen
Mit dieser Option können Sie testen, ob Sie bzw. Ihr Netzwerküberwachungssystem eine Scanattacke immer noch erkennt, wenn die einzelnen Hosts nicht der
Reihe nach gescannt werden. Nmap erlaubt es, bis zu 2048 Hosts zu mischen.
Linux:~# Nmap –-randomize_hosts
Maximale Socketbenutzung regeln
Sie haben die Möglichkeit, die Anzahl der parallel genutzten Sockets für einen
TCP-connect()-Scan zu bestimmen. Sie sollten diese Option unbedingt nutzen,
da es ansonsten vorkommen kann, dass eine gescannte Maschine abstürzt.
Linux:~# Nmap -M <Maximum an Sockets>
Zeitoptionen
Sie können die Zeitoptionen von Nmap verändern. Bedenken Sie aber dabei, dass
diese normalerweise sehr zuverlässig und gut sind. Sie sollten sie daher nur zu
Testzwecken oder bei Versagen ändern.
Sehr langsam und sicher scannen
Jeder Angreifer möchte logischerweise unentdeckt bleiben. Dafür nimmt er sich
auch gerne etwas Zeit. Sie sollten diese Option unbedingt testen und überprüfen,
ob Ihr Alarmsystem trotz dieser Vorsichtsmaßnahme immer noch anschlägt.
Wenn dies nicht der Fall ist, sollten Sie etwas dagegen unternehmen.
Die Funktionsweise dieser Scanstufe ist denkbar einfach und stupide. Die verschiedenen Scandurchläufe werden nicht mehr parallel ausgeführt, sondern
schön der Reihe nach. Ein Scan nach dem anderen. Des Weiteren wartet Nmap
mindestens fünf Minuten, bis es ein weiteres Paket losschickt.
Linux:~# Nmap –T Paranoid
Schneller sicherer Scan
Die folgende Option arbeitet nach demselben Prinzip wie die zuvor erwähnte.
Mit dem Unterschied, dass das Intervall zwischen dem Senden von Paketen nicht
bei fünf Minuten, sondern bei 15 Sekunden liegt.
Linux:~# Nmap –T Sneaky
Kaum belastender Scan
Weniger vorsichtig als die zwei zuletzt vorgestellten Zeitoptionen, aber immer
noch sehr netzwerkfreundlich, ist diese Option. Sie bedient sich auch des seriellen
Sandini Bib
3.1 Nmap
159
Scannens, schaltet die verschiedenen Scandurchläufe also in Reihe und führt sie
nicht parallel aus. Zwischen dem Paketversand vergehen in der Regel mindestens
0.4 Sekunden.
Linux:~# Nmap –T Polite
Normaler Scan
Diese Option stellt den Defaultwert dar. Nmap versucht den Scan so schnell wie
möglich über die Bühne zu bringen, ohne dabei das Netzwerk zu überlassen oder
bestimmte Ports oder gar Rechner zu vergessen.
Linux:~# Nmap –T Normal
Aggressiver Scan
Hierbei wird für jeden Host ein Timeout von fünf Minuten eingerichtet und
Nmap wartet nie mehr als 1.25 Sekunden auf Antworten auf bestimmte Pakete.
Linux:~# Nmap –T Aggressive
Unglaublich schneller Scan
Dieser Scanmodus bietet sich für Testumgebungen an, in denen das Netzwerk
sehr schnell und kaum belastet ist. Jeder Host wird nach 75 Sekunden ausgezählt
(timeout) und auf Paketantworten wird nur 0.3 Sekunden gewartet.
Linux:~# Nmap –T Insane
Timeout für Hosts setzen
Falls Sie einen Timeout setzen wollen, der angibt, wie lange Nmap einen einzelnen Host scannen darf, können Sie diese Option nutzen. Es gibt hierbei keinen
Defaultwert, das heißt, dass normalerweise ein Host so lange gescannt wird, bis
der Scan komplett ist. Der Timeoutwert wird in Millisekunden übergeben.
Linux:~# Nmap –host_timeout <Timeoutwert>
Timeout für Antwortpakete setzen
Sie können nicht nur bestimmte Hosts mit einem Timeout belegen, sondern auch
die Antwortpakete. Das bedeutet, dass Sie einen bestimmten Wert (in Millisekunden) angeben, der die Zeit wiedergibt, in der Nmap auf eine Antwort auf ein gesendetes Paket wartet. Falls dieser Wert überschritten wird, sendet Nmap ein
neues Paket oder bricht den Test ab. Der Defaultwert liegt bei 9000.
Linux:~# Nmap –max_rtt_timeout <Timeoutwert>
Minimum Zeitraum für Scans bewahren
Falls ein Host sehr schnell antwortet, wird Nmap den Scan beschleunigen. Dies
kann aber dazu führen, dass bestimmte Pakete und wichtige Informationen dabei
verloren gehen. Mit dieser Option können Sie einen Zeitraum dafür angeben, wie
Sandini Bib
160
3 Systemaudit
lange Nmap mindestens warten soll, bis es das Warten auf eine Antwort aufgibt.
Auch diesen Timeout übergeben Sie in Millisekunden.
Linux:~# Nmap -–min_rtt_timeout <Timeoutwert>
Anfangstimeoutwert setzen
Normalerweise rechnet sich Nmap den Timeoutwert für Probes (Pakete und Antworten) sehr gut selber aus. Falls Sie dennoch kein Vertrauen in diesen Wert setzen können, steht es Ihnen frei, ihn selbst zu bestimmen.
Linux:~# Nmap --initial_rtt_timeout <Timeoutwert>
Maximum für Parallelscans
Es ist Ihnen überlassen, das Maximum für parallel durchgeführte Scans zu bestimmen. Falls Sie diesen Wert auf 1 setzen, wird Nmap nie mehr als einen Port
zur gleichen Zeit scannen.
Linux:~# Nmap –-max_parallelism <Wert>
Intervall zwischen Paketversand
Hier können Sie angeben, wie viel Zeit zwischen dem Versenden von Paketen vergehen soll. Praktisch um Überwachungssysteme zu testen. Der Wert ist in Millisekunden anzugeben.
Linux:~# Nmap –-scan_delay <Wert>
Beispiele
Nachdem wir nun alle Optionen zu Nmap gesehen haben, sollten wir uns an die
Umsetzung unseres Wissens machen. Der beste Weg ist der, sich ein paar Beispiele anzuschauen. Ich werde hierbei eine Beschreibung zu jedem Beispiel gefolgt von der Syntax dafür aufführen.
Das erste Beispiel ist äußerst stupide und simpel und sollte auf jeden Fall einen
Alarm in Ihren Überwachungssystemen verursachen, denn es verursacht einen Scan
auf alle TCP Ports, die sich auf dem Rechner Joey.testdomain.de befinden. Da es sich
um das erste Beispiel handelt, werden wir auch die Bildschirmausgabe dazu sehen
(Falls Ihr Output genauso aussieht, sollten Sie sich wirklich Gedanken machen!!!).
Linux:~# Nmap Joey.testdomain.de
Starting Nmap V. 2.54BETA22 ( www.insecure.org/Nmap / )
Interesting ports on Joey.testdomain.de (10.209.100.1):
(The 1533 ports scanned but not shown below are in state: closed)
Port
State
Service
21/tcp
open
ftp
22/tcp
open
ssh
23/tcp
open
telnet
37/tcp
open
time
Sandini Bib
3.2 Nessus
79/tcp
111/tcp
513/tcp
515/tcp
6000/tcp
161
open
open
open
open
open
finger
sunrpc
login
printer
X11
Nmap run completed -- 1 IP address (1 host up) scanned in 4 seconds
Ich möchte nochmals darauf hinweisen, dass Ihr Output auf keinen Fall so aussehen sollte. Es handelt sich bei dem gescannten Rechner um einen absolut unsicheren Testrechner. Ich gehe davon aus, dass Ihr System die veralteten Dienste
nicht laufen hat und Sie weiter auch einige Vorkehrungen getroffen haben, dass
ein solch stupider Scanversuch im Sand verläuft.
Das nächste Beispiel führt denselben Scan durch, jedoch für das gesamte Klasse B
Netzwerk 192.168 (privates Netz):
Linux:~# Nmap 192.168.*.*
oder
Linux:~# Nmap 192.168.0-255.0-255
Der nächste Aufruf versucht einen Xmax-Tree-Scan durchzuführen und zusätzlich das Betriebssystem zu erraten.
Linux:~# Nmap -sX -0 Joey.testdomain.de
Ich denke, es wäre sinnlos, weitere Beispiele aufzuführen, da Sie das Prinzip mittlerweile verstanden haben sollten.
3.2
Nessus
Ich bin mir ziemlich sicher, dass ein Großteil der Leser dieses Programm zumindest vom Hören her kennt und weiß, wie gewaltig und mächtig dieses Tool ist.
Man könnte es als Netzwerkscanner bezeichnen, doch täte man ihm damit Unrecht. Denn es ist viel mehr als das. Nur zu gerne würde ich alle Möglichkeiten
und Optionen, die einem mit diesem Tool zur Verfügung stehen, besprechen,
doch dies ist – dank des ungeheueren Umfangs und der extrem hohen Komplexität – leider völlig unmöglich. Es besteht aus weit mehr als 780 Plugins und lässt
sich mit einer eigenen Programmiersprache programmieren (NASL). Dieses Feature wird auch den Hauptteil dieses Abschnittes ausmachen und Ihnen zeigen,
wie Sie mit Hilfe dieser Skriptsprache dezidierte Tests durchführen und daran ersehen können, ob und wie sicher das geprüfte System tatsächlich ist. Weiter werden wir aber noch einige weitere Features dieser großen »Toolbox« besprechen
und Ihnen zeigen, wie Sie damit sinnvolle Tests durchführen können.
Sandini Bib
162
3 Systemaudit
3.2.1
Installation
Bevor wir mit dem System arbeiten können, müssen wir es natürlich installieren.
Dafür laden Sie sich bitte das Programm und alle nötigen Bibliotheken und die
von Ihnen gewünschten Plugins (die wir hier beim besten Willen nicht alle besprechen können) von einer sicheren Quelle herunter (entweder von der BuchWebsite oder von der offiziellen Nessus-Website).
Voraussetzungen
Da Nessus ein sehr komplexes Programm ist, kann man nicht genau sagen, welche Voraussetzungen man für die Installation genau benötigt. Dies hängt viel
mehr davon ab, welche Funktionen Sie genau nutzen wollen und welche Plugins
Sie dafür benötigen. Im Folgenden werden wir aber einige Programme und Bibliotheken ansprechen, die bei einer Standardinstallation gebraucht werden.
Sie benötigen die Pakete bison und flex. Bitte überprüfen Sie, ob diese bereits
installiert sind. Falls nicht, holen Sie dies bitte vor der Installation von Nessus
nach.
Sie sollten auf Ihrem System eine aktuelle Version von Nmap installiert haben
(siehe Abschnitt 3.1), da Nessus dieses Programm für Portscans etc. benötigt.
SuSE-Systeme benötigen zusätzlich die Pakete gtk-devel und glib-devel.
Falls Sie Experimental-Versionen von Nessus installieren wollen, brauchen Sie
das Paket openssl-devel.
Die Programme wget und lynx sollten bei der Erstellung des Programms installiert sein, da man dann die Möglichkeit hat Updates mit den nötigen Update-Plugins zu fahren.
Weiter benötigt man folgende Bibliotheken und Pakete (bitte kompilieren Sie
die Pakete in der Reihenfolge, in der sie aufgeführt sind):
nessus-libraries-.version.tar.gz
libnasl-version.tar.gz
nessus-core.version.tar.gz
nessus-plugins.version.tar.gz
Um diese Pakete zu installieren geben Sie bitte folgende Befehle ein (ist für jedes Paket gleich):
Linux:~# tar –xzf Paket
Linux:~# cd Paket
Linux:~# ./configure
Linux:~# make
Linux:~# su
Linux:~# make install
Nachdem Sie diese Schritte mit allen Paketen durchgeführt haben, sollte Nessus auf Ihrem System installiert sein und Sie können es benutzen.
Sandini Bib
3.2 Nessus
3.2.2
163
Nessus-Server starten
Benutzer anlegen
Nessus wird mit einem Client und mit einem Server geliefert. Als Erstes werden
wir den Server installieren. Der erste Schritt dazu ist das Anlegen eines Benutzers
für Nessus. Dazu befolgen Sie bitte die nachfolgend aufgeführten Anweisungen:
Das Testsystem läuft auf einem Rechner mit SuSE 7.3. Es ist daher möglich, dass
die Pfadnamen, die hierbei benutzt werden, bei Ihnen nicht funktionieren werden, falls Sie ein anderes Betriebssystem fahren.
Linux:~# cd /etc/init.d
Linux:~# ./nessusd
Starting nessusd Please create user accounts with nessus-adduser
Linux:~# nessus-adduser
Generating primes: ...............q..............pg
Using /var/tmp as a temporary file holder
Add a new nessusd user
Login: <Bitte geben Sie hier den gewünschten Usernamen für Nessus
ein>
Als Nächstes werden Sie gefragt welche Authentication method Sie benutzen möchten. Ich empfehle Ihnen aber die cipher-Methode zu nehmen – schließlich handelt
es sich hierbei um ein Buch über Linuxsicherheit.
Authentication method (cipher/plaintext) [cipher] : <Wählen Sie
die gewünschte Methode>
.
.
Nachdem Sie die Methode gewählt haben, werden Sie aufgefordert den Host
oder das Netzwerk anzugeben, von dem aus dieser Account benutzt werden darf.
Falls Sie keine Angaben machen – das Feld also leer lassen –, darf man sich von jedem Rechner zu Ihrem Nessus-Server verbinden. Ich empfehle Ihnen aber einen
bestimmten Host oder zumindest ein Subnet anzugeben. Nessus unterstützt leider noch keine Namensauflösung, das heißt Sie müssen die Adresse des Hosts in
Form einer IP-Adresse eingeben.
Beispiele:
10.209.100.1
10.209.100.1/24
10.209.100.1/255.255.255.0
Source host or network [anywhere] : <Geben Sie einen Wert ein>
One time password: <Geben Sie ein Passwort ein>
Sandini Bib
164
3 Systemaudit
Im nächsten Dialog werden Sie nach einem rule set gefragt. Um diesen Punkt genauer zu erklären, werde ich etwas weiter ausholen und einige Beispiele anbringen.
Wie Sie wissen, können Sie mit dem nessus-adduser-Befehl mehrere User anlegen. Es wäre ziemlich schwachsinnig, wenn alle angelegten User dieselben
Rechte hätten. Deshalb hat man sich entschlossen, das rule set einzubauen. Das
gibt Ihnen die Möglichkeit bestimmte Regeln für einen bestimmten Benutzer festzulegen. So könnte eine Regel dem User »aj« nur das Scannen seines eigenen
Rechners erlauben. Bevor wir dazu einige Beispiele aufführen, werden wir die
Syntax einer Regel ansprechen.
Jede Regel wird in einer Zeile definiert. Die nächste Zeile definiert die nächste Regel und so weiter. Falls Sie keine Regeln angeben, hat der User alle Rechte. Die
letzte Regel in einem Regelset stellt die Standardregel dar und definiert die Policy
eines Users. Die Syntax hierzu sieht folgendermaßen aus:
accept | deny IP-Adresse / IP-Maske
default accept | deny
Das folgende Regelwerk erlaubt es dem User, folgende Hosts zu testen, alle anderen Rechner und Netzwerke darf er nicht überprüfen:
10.209.100.0/24
10.209.101.0/24
accept 10.209.100.0/24
accept 10.209.101.0/24
default deny
Ein anderes Beispiel zeigt eine Regelkombination, die es dem betreffenden User
erlaubt, alle Rechner, bis auf diejenigen, die sich im Servernetzwerk befinden,
(10.209.100.0/24) zu testen:
deny 10.209.100.0/24
default accept
Nun aber zurück zum Serverstart.
User rules
----------------------------.
.
Enter the rules for this user, and hit ctrl-D once you are done:
(the user can have an empty rules set)
Geben Sie an dieser Stelle die Regeln ein und drücken Sie (STRG)+(D) wenn Sie fertig sind.
Sandini Bib
3.2 Nessus
165
Danach bekommen Sie eine Auflistung der eingegebenen Daten und müssen dies
bestätigen oder widerrufen:
.
.
Is that ok ? (y/n) [y] <Falls alle Angaben korrekt sind,
bestätigen Sie bitte mit ‚y’>
Danach sind Sie fertig und können Nessus starten:
Linux:~# ./nessusd start
Starting nessusd
Konfiguration
Um Nessus zu konfigurieren müssen Sie die Konfigurationsdatei bearbeiten.
Diese finden Sie entweder unter /etc/nessus/nessusd.conf oder unter /usr/local/etc/
nessus/nessusd.conf. Wir werden an dieser Stelle nicht auf die einzelnen Zeilen dieser Datei eingehen, da sie sehr gut dokumentiert ist und jeder sich schnell darin
zurechtfinden sollte.
3.2.3
Clientkonfiguration (text)
Neben der grafischen Version haben Sie zusätzlich die Option, Nessus im Textmodus zu fahren. Die dafür verfügbaren Optionen finden Sie in Tabelle 3.1.
Option
Beschreibung
-n
Keine Pixmaps. Zu empfehlen, wenn Sie Nessus auf einem entfernten Rechner laufen haben und keine hohe Bandbreite zur Verfügung
haben.
-q Server Port Login
Targetsfile Resultsfile
Setzt Quite- oder Batch-Modus. Hiermit können Sie die Optionen
für den Batch-Modus setzen.
-C
Mit dieser Option können Sie eine passphrase zur Verschlüsselung
Ihres private keys verwenden.
-L
Listet Einträge in der user key-Datenbank auf
-K <Keyname>
Löscht einen Schlüssel aus der user key-Datenbank
-k <Keylength>
Setzt die minimale Schlüssellänge. Der Defaultwert liegt bei 1024
-X <Key-Datei>
Schreibt den public user key in die angegebene Datei
-v
Zeigt die Versionsnummer
-h
Listet die verfügbaren Optionen auf
-T <Typ>
Speichert die Daten im angegebenen Format (html, html_graph,
text, tex, nsr)
Tabelle 3.1 Verfügbare Optionen
Sandini Bib
166
3.2.4
3 Systemaudit
Nessus Attack Scripting Language
Dieser Abschnitt des Buches wird sich um die nessuseigene Skriptsprache NASL
drehen. Diese Sprache ermöglicht es, binnen weniger Minuten Tests für bekannte
Sicherheitslöcher zu schreiben und weiterzugeben, ohne dabei auf das Betriebssystems achten zu müssen. NASL ist aber nicht die einzige Sprache, mit der Sie
diese Aufgabe erledigen können. Die Sprache C bietet ebenfalls diese Möglichkeiten, doch sollten Sie Ihre Tests auf jeden Fall mit NASL schreiben, da diese Sprache eigens für Nessus entwickelt wurde und deswegen wie keine andere auf dieses Programm zugeschnitten ist. Nichtsdestotrotz gibt es Momente, in denen man
nicht anders kann und auf die »Atomsprache« C zurückgreifen muss. Die meisten
Aufgaben lassen sich aber problemlos mit NASL bewältigen.
Falls Sie sich an dieser Stelle fragen, warum sich die Entwickler von Nessus entschieden haben, eine eigene Sprache zu entwerfen, obwohl so viele andere, weitaus mächtigere Skriptsprachen wie Perl zur Verfügung stehen, sollten Sie einmal
daran denken, dass Sie mit diesen Sprachen weitaus mehr anfangen können, als
einfach Tests zu schreiben. So könnten Sie zum Beispiel ein Perlskript schreiben
und in Nessus integrieren, das dann auch nach einer bestimmten Sicherheitslücke
sucht, doch diese (falls sie existiert) mit einigen wichtigen und interessanten Informationen an einen Cracker schickt, der sie dann nutzen kann, um das unsichere System zu erobern. NASL schiebt dem einen Riegel vor und garantiert, dass
dies nicht vorkommt (das garantiert die Einfachheit dieser Sprache). So können
Sie zum Beispiel keine Befehl auf dem Remotehost ausführen oder Daten an andere Programme versenden. Ein weiterer Vorteil von NASL ist der Speicherverbrauch. Haben Sie schon einmal versucht, 25 Sicherheitstests laufen zu lassen,
während Sie auf einem Rechner mit 256 MB Arbeitsspeicher vernünftig arbeiten
wollen? Dies wird mit Perl nicht klappen, mit NASL aber schon. Weiter brauchen
Sie nicht zuerst aufwändig irgendwelche Module zu installieren. Sie können sofort loslegen, und genau das werden wir jetzt auch machen.
Interpreter
Skriptsprachen werden im Gegensatz zu Hochsprachen wie C nicht kompiliert,
sondern interpretiert. Da Sie wahrscheinlich nicht so sehr an der Prozessorarchitektur vom X86-System interessiert sind und Sie die Prozesse beim Start eines
Programms auch nicht so sehr begeistern, werde ich diese Themen nicht anschneiden. Das Einzige, was Sie wissen müssen, ist, wie Sie Ihre selbst geschriebenen Tests zum Laufen bringen. Dazu benötigen Sie das Paket nasl, das wir bereits
installiert haben. Um die Tests zu initialisieren, müssen Sie nichts weiter machen,
als die Skripts dem Interpreter zu übergeben. Der Befehl hierfür lautet wie folgt:
Linux:~# nasl <datei>
Sandini Bib
3.2 Nessus
167
Da Sie bei der Installation aber schon sehr viel Skripte mitgeliefert bekommen haben, können Sie sich vorstellen, dass es noch einen anderen – weitaus sinnvolleren – Weg geben muss, um solche Skripte zu initialisieren. Nun denn, Sie haben
Recht. Der einfachste Weg hierfür besteht darin, Ihre Skripte in den Plugin-Ordner zu kopieren. Falls Sie jetzt nicht genau wissen sollten, wo dieser Ordner bei
Ihnen liegt, werfen Sie einen Blick in die Konfigurationsdatei (nessusd.conf). Dort
steht an erster Stelle folgender Eintrag:
# Path to the security checks folder:
plugins_folder = /usr/bin/nessus/plugins
Kopieren Sie Ihre Security Checks einfach in diesen Ordner und Nessus kann Sie
nutzen und ausführen.
Syntax
Bevor wir uns mit Sicherheitstests befassen, müssen wir uns in die recht einfache
Syntax von NASL einarbeiten, die, wie auch bei vielen anderen Skriptsprachen,
der C-Syntax sehr ähnlich ist.
Kommentare
Bei einem Kommentar handelt es sich um eine Zeile, die der Interpreter schlicht
überliest und somit ignoriert. Kommentare sind in der Welt der Programmierung
sehr wichtig, da Sie es dem Programmierer ermöglichen seine Programme zu dokumentieren und machen es somit anderen Entwicklern leichter, sich in den Code
einzulesen und ihn zu bearbeiten. Um den Interpreter mitzuteilen, dass ein Kommentar folgt, benötigen Sie ein Kommentarzeichen. Alles was hinter diesem Zeichen steht, wird bei der Programmausführung ignoriert. NASL verwendet hierfür dasselbe Zeichen wie Perl: #. Im Folgenden sehen Sie ein Beispiel für die
Anwendung eines Kommentarzeichens:
a = 1; # Alles Hinter dieser Anweisung ignoriert der Interpreter
Anweisungen
Wie Sie am Beispiel für einen Kommentar sehen können, endet die Befehlszeile mit
einem Semikolon. Falls Sie schon einmal mit Perl programmiert haben, wird Ihnen
diese Syntax durchaus bekannt vorkommen. Anweisungen wie das Übergeben eines bestimmten Werts an eine Variable müssen mit einem Semikolon abgeschlossen
werden. Funktionsbeschreibungen hingegen in Klammern gesetzt. Dabei sind Verschachtelungen erlaubt. Falls Sie dieses Prinzip noch nicht vollkommen verstanden
haben sollten, werden Sie dies mit Sicherheit innerhalb der nächsten Seiten.
Variablen
Jede Skriptsprache braucht sie und annähernd jede hat sie. Die Variablen in
NASL brauchen Sie nicht zu deklarieren, auch die Typen sind bei der Erstellung
eines Skripts nicht wichtig. Falls Sie nicht wissen, was Variablen sind, werde ich
Ihnen eine kurze (und nicht 100%ig richtige) Beschreibung dazu liefern.
Sandini Bib
168
3 Systemaudit
Sie werden in Programmen bestimmte Werte an Funktionen übergeben oder bestimmte Werte irgendwo speichern müssen. Um diese bestimmten Informationen
zu speichern, benutzen Sie in der Regel Variablen. Man könnte eine Variable also
mit einer Art Platzhalter für Informationen bezeichnen. Wie der Name schon sagt,
können sich die Werte in diesen Platzhaltern ändern (da die Daten darin ja variabel sind).
Includes
Falls Sie sich fragen, ob NASL, da diese Sprache ja an C angelehnt ist, auch Includes braucht, kann ich Sie beruhigen. Sie werden bei der Programmierung Ihrer
Tests vollkommen auf Includes verzichten können.
Strings
In der Variablenbeschreibung haben wir den Vergleich mit einem Platzhalter herangezogen. Wir haben festgestellt, dass man in Variablen bestimmte Daten ablegen kann. Diese Daten können so genannte Strings sein. In NASL stehen Ihnen
zwei Arten von Strings zur Verfügung. Die erste Art beschreibt Zahlen. Sie können Variablen also bestimmte Zahlenwerte übergeben. Bei diesen Werten darf es
sich um dezimale, hexadezimale oder binäre Daten handeln. Das folgende Programmfragment zeigt Ihnen nun zu jedem dieser Zahlensysteme ein Beispiel, bei
dem einer Variable ein bestimmter Zahlenwert übergeben wird.
a = 1; # Der Variable a wird der dezimale Wert 1 zugewiesen
b = FF; # Der Variable b wird der hexadezimale Wert FF zugewiesen
c = 11111110; # c wird auf den binären Wert 11111110 gesetzt
Die nächste Art von Variablen stellen Strings dar. Das heißt, Sie können Variablen
nicht nur Zahlenwerte zuweisen, sondern auch Zeichenketten wie zum Beispiel
einen Satz. Beachten Sie dabei, dass Sie den Wert der Variable in Gänsefüßchen
setzen müssen. Als Beispiel betrachten Sie bitte das nächste Codefragment:
a = "Hallo, ich liebe Linux"; # Variable a wird auf den Wert
Hallo, # ich liebe Linux gesetzt
Beachten Sie dabei bitte, dass bei dieser einfachen Zuweisung die Buchstaben
nicht interpoliert werden. Dafür benutzen Sie bitte die string() Funktion, die Sie
weiter unten noch vorgestellt bekommen.
Non Anonymous Funktionen
Wenn Sie dieses Kapitel durchgearbeitet haben, werden Sie sicherlich einen Sicherheitstest nach dem anderen mit NASL schreiben. Da wird es sicher bald vorkommen, dass Sie auf Funktionen stoßen, die sehr viele Argumente brauchen (die
Sie der Funktion übergeben müssen). Falls diese Argumente unterschiedlichen
Typs sind, spricht man von einer Non Anonymous Funktion (und wenn die Reihenfolge von Bedeutung ist). Wenn Sie schon einmal mit einer Hochsprache gearbei-
Sandini Bib
3.2 Nessus
169
tet haben, wissen Sie, dass diese Sprachen auf die exakte Reihenfolge bei Ihren
Funktionsparametern bestehen. NASL vereinfacht die Sache ungemein, wie Sie
am folgenden Beispiel sehen können:
Dieses Beispiel ruft eine Funktion auf, die ein UDP-Paket erstellen soll (Sie werden die komplette Funktion später kennen lernen):
forge_udp_paket(uhsport : 1000, uhdport : 9000);
Diese Funktionsbeschreibung ist zwar von der Syntax her korrekt, doch habe ich
vergessen alle Parameter zu übergeben. Der NASL-Interpreter wird mich während der Laufzeit darauf aufmerksam machen. Worauf ich aber hinaus will, wird
das folgende Beispiel zeigen:
forge_udp_paket(udport : 9000, usport : 1000);
Im Gegensatz zu einer Funktionsbeschreibung in einer Hochsprache ist diese hier
mit der oben aufgeführten identisch und ruft exakt dasselbe auf. Die Reihenfolge
ist daher zu vernachlässigen, sollte aber aus Gründen der Übersicht und Übertragbarkeit eingehalten werden.
Anonyme Funktionen
Eine anonyme Funktion besteht entweder aus nur einem zu übergebenden Argument oder aus mehreren Argumenten desselben Typs. Sie dürfen aber bestimmte
Optionen beinhalten, wie zum Beispiel pcap oder ähnliches.
Auch hier führen wir ein einfaches Beispiel einer anonymen Funktion mit der
pcap-Option an:
send_packet(packet, use_pcap:FALSE);
While-Schleife
Wie so vieles in NASL funktioniert die while-Schleife genauso wie in C. Falls Sie
die Syntax noch nicht kennen, werden Sie diese jetzt kennen lernen:
Sie können bei der Initialisierung der Schleifen entweder eine Funktion oder
einige Funktionsanweisungen nachstellen, die, falls die Bedingung der Schleife
erfüllt ist, aufgeführt werden.
while(Bedingung)
{
# Funktionsanweisungen
}
oder
while(Bedingung)Funktion();
Sandini Bib
170
3 Systemaudit
Um sich dieses Modell besser vorstellen zu können, betrachten Sie bitte das folgende Beispiel
a = 1;
while(a < 10)
{
a = a+1;
}
Dieses Beispiel prüft, ob die Variable a kleiner als 10 ist und solange dies der Fall
ist, wird die Anweisung in den geschweiften Klammern ausgeführt. Diese besagt,
dass nach jedem Schleifendurchgang der Wert der Variablen a (anfangs 1) um 1
erhöht werden soll. Nachdem die Schleifenbedingung so oft wiederholt wurde,
dass a 10 ist, wird die Schleife übergangen und es werden die weiteren Anweisungen im Code bearbeitet.
For-Schleife
Auch diese Schleife bemächtigt sich der C-Syntax. Tabelle 3.2 enthält die Teile der
For-Schleife und liefert zu jedem Punkt eine kleine Beschreibung:
Schleifenteil
Beschreibung
Initialisierung
Dieser Teil der Schleife wird vor dem ersten Schleifendurchlauf ausgeführt. Variablen erhalten hierbei oft einen Wert.
Test
Im Testteil einer Schleife wird eine bestimmte Bedingung getestet. Stellt
sich diese Bedingung als wahr heraus, so wird die Schleife durchlaufen.
Falls nicht, wird Sie übersprungen.
Inkrement
Das Inkrement wird vor jedem möglichen Verlassen oder Wiedereintritt
in die Schleife ausgewertet.
Schleifenkörper
Der Schleifenkörper beinhaltet die Anweisungen oder Funktionen, die
bei jedem Schleifendurchlauf ausgeführt werden.
Tabelle 3.2 For Schleife
Die Syntax für For-Schleifen lautet folgendermaßen:
for (Initialisierung; Test; Inkrement)
{
# Funktionsanweisungen
}
oder
for (Initialisierung; Test; Inkrement) Funktion();
Damit Sie das Prinzip dieser Anweisung besser verstehen, werden wir einige Beispiele hierfür aufführen:
for (a=1;a <=10; a=a+1)display("a hat den Wert : ", a, "\n");
Sandini Bib
3.2 Nessus
171
Dieses Beispiel zeigt Ihnen eine Anwendungsmöglichkeit von For-Schleifen und
stellt Ihnen gleichzeitig die Funktion display() vor. Da Sie die Syntax sicherlich
aus dem Beispiel ablesen können und noch in weiteren Beispielen zu sehen bekommen werden, werde ich an dieser Stelle nicht zu tief in deren Beschreibung
eingehen.
Die Syntax ist sehr einfach gehalten und mit der Funktion printf() von C zu vergleichen, da Sie ebenfalls einen Wert auf die Standardausgabe (stdout) – zumeist
der Bildschirm – auswirft. Wie Sie im Beispiel oben sehen können erfolgt der Aufruf über den Funktionsnamen display(). In den Funktionsklammern sind diejenigen Werte, die auf die Standardausgabe ausgegeben werden, in Gänsefüßchen
gesetzt. Die Variable a, die zwischen den beiden auszugebenden Werten steht,
gibt den Wert der Variablen a aus. Das nächste Zeichen ist ein so genanntes Steuerzeichen. Diese sind stets hinter einem Backslash zu finden und werden ebenfalls in Gänsefüßchen gesetzt. Das hier aufgeführte Steuerzeichen bewirkt einen
Zeilenumbruch, sprich der Cursor springt in die nächste Zeile, nachdem er
A hat den Wert 1
A hat den Wert 2
A hat den Wert 3
...
auf dem Bildschirm ausgegeben hat. Diesem Listing können Sie bestimmt schon
die Funktionsweise der For-Schleife entnehmen, welche solange a kleiner gleich
10 ist, den Schleifenkörper durchläuft und den Wert von a auf die Standardausgabe ausgibt.
Operatoren
Wie Sie sich sicher vorstellen können, werden Sie bei der Programmierung von
Sicherheitstest viel mit Schleifen arbeiten. Dabei sollten Sie aber einen Nachteil
der Schleifen nie aus den Augen verlieren. Sie sind langsam. Bei einem Sicherheitstest werden Sie mit einer Schleifenfunktion einen Test durchführen. Falls
dieser erfolgreich verläuft werden eine vordefinierte Funktion oder einige vordefinierte Anweisungen von Ihnen durchgeführt. Nachdem dies erledigt ist, wird
der Test nochmals durchgeführt. All das braucht enorm viel Rechenzeit. Glücklicherweise stellt uns NASL einige Operatoren vor, die uns das Leben enorm erleichtern können. Diese werden Sie in den Tabellen 3.3, 3.4, 3.5, 3.6 und 3.7 kennen lernen:
Arithmetische
Operatoren
Verwendung
Beschreibung
*
x*y
Multiplikation
/
x/y
Division ohne Rest
Tabelle 3.3 Arithmetische Operatoren
Sandini Bib
172
3 Systemaudit
Arithmetische
Operatoren
Verwendung
Beschreibung
%
x%y
Es verbleibt Rest bei Division
+
x+y
Addition
-
x–y
Subtraktion
Tabelle 3.3 Arithmetische Operatoren (Forts.)
Vergleichsoperatoren
Verwendung
Beschreibung
<
x<y
Kleiner als
<=
x <= y
Kleiner gleich
>
x>y
Größer gleich
>=
x >= y
Größer gleich
==
x == y
Gleich
!=
x != y
Ungleich
Tabelle 3.4 Vergleichsoperatoren
Logische Operatoren
Verwendung
Beschreibung
!
!x
Logische Verneinung
&&
x && y
Logische Und-Verknüpfung
||
x || y
Logische Oder-Verknüpfung
Tabelle 3.5 Logische Operatoren
Binär Operatoren
Verwendung
Beschreibung
|
x|y
Bitweise Und-Verknüpfung
&
x&y
Bitweise Oder-Verknüpfung
Tabelle 3.6 Binär Operatoren
NASL Operatoren
Verwendung
Beschreibung
x
Funktion() x
Funktion() wird x mal ausgeführt
><
x><y
Liefert den Wert true, falls x in y vorkommt.
Tabelle 3.7 NASL Operatoren
Benutzerdefinierte Funktionen
Sicherheitslücken sind nicht immer gleich (wäre ja auch zu schön) und da Sie variieren, werden auch Ihre Testskripte immer anders aussehen. Es wird sicher vor-
Sandini Bib
3.2 Nessus
173
kommen, dass Ihnen die von NASL zur Verfügung gestellten Funktionen nicht
mehr ausreichen und Sie sich gezwungen sehen, Ihre eigenen Funktionen zu entwerfen. Leider gibt es unter NASL einige Einschränkungen, die man dabei beachten muss:
Im Gegensatz zu »normalen« Funktionen, dürfen benutzerdefinierte Funktionen keine weiteren benutzerdefinierte Funktionen enthalten.
Sie müssen bei der Erstellung dieser Funktionen Non Anonymous Argumente
verwenden.
Der eigentliche Sinn einer Funktion besteht in der Rückgabe eines bestimmten
Wertes. Dafür benutzt man die Funktion return(). Im Gegensatz zu manchen
anderen Sprachen, muss hier der Rückgabewert in Klammern stehen.
Die allgemeine Syntax einer benutzerdefinierten Funktion sieht wie folgt aus:
function Funktionsname(Argument 1, Argument 2,
Argument 3, Argument n)
Um dies zu verdeutlichen werden wir uns bemühen eine nicht allzu sinnlose
kurze Funktion zu programmieren:
function n_plus_zwei(a)
{
if ((a == 0) || (a == 1))
return(a +2);
else
return(a);
}
display("Es kann nie ein Wert unter drei ausgegeben werden, im
momentanen Beispiel hat a den Wert", test_plus_zwei(a),"\n");
Sockets allgemein
Bevor wir uns mit den verfügbaren Socketfunktionen von Nessus bzw. NASL
auseinandersetzen, sollten wir kurz erörtern, was ein Socket überhaupt ist. Man
könnte ihn als eine Art Tunnel, der entweder verbindungsorientiert ist oder nicht,
definieren, den man nutzt, um Daten durch eine Pipe von einem Rechner zu einem anderen im Netzwerk zu schicken.
UDP Socket öffnen
Die Funktion open_sock_udp() erlaubt es einem, einen UDP-Socket zu öffnen.
Da UDP nicht verbindungsorientiert ist, kann man nicht so leicht feststellen, ob
ein UDP-Port auf dem Remoterechner geöffnet oder geschlossen ist. Zu beachten
dabei ist, dass zurzeit nur ein Socket zu einem bestimmten Zeitpunkt zu einem
bestimmten Port geöffnet werden kann, und dass diese Funktion nur anonyme
Argumente verwendet. Die nötige Syntax hierfür sieht folgendermaßen aus:
open_socket_udp(Portnummer);
Sandini Bib
174
3 Systemaudit
TCP Socket öffnen
Für diese Funktion gelten dieselben Restriktionen wie für die open_sock_udp()Funktion, hat aber dabei den Vorteil, dass man sehr leicht erkennen kann, ob der
Verbindungsaufbau erfolgreich war oder nicht. Dies ist möglich, da TCP ein verbindungsorientiertes Protokoll ist und NASL somit den Wert 0 zurückgeben
kann, falls die Verbindung zustande gekommen ist. Zur Verwendung benutzen
Sie bitte diese Syntax:
open_sock_tcp(Portnummer);
Damit Sie den Nutzen einer solchen Funktion erkennen, werden wir damit das
beliebteste Spielzeug eines Crackers programmieren, einen Portscanner:
# TCP Portscanner in NASL
begin = prompt("Bei welchem Port soll das Scannen beginnen?\n ");
ende
= prompt("Bei welchem Port soll das Scannen aufhoeren?\n
");
for(i=begin;i<ende;i=i+1)
{
socket = open_sock_tcp(i);
if(socket) {
display("Port ", i, " open\n");
close(socket);
}
}
Socket schließen
Am letzen Beispiel können Sie schon die einfache Syntax für das Schließen eines
Sockets ersehen.
close();
Mit Sockets senden und empfangen
Um Daten von einem Socket zu empfangen oder dorthin zu senden gibt es mehrere Möglichkeiten. Im Folgenden werden Sie einige Informationen zu verfügbaren Funktionen erhalten. Dabei werden wir zu jeder dieser Funktionen die Syntax
und eine kurze Beschreibung erhalten. Am Ende dieses Abschnittes wird die
Handhabung anhand eines Beispiels verdeutlicht.
recv(socket:<socketname>, length:<length> [,timeout : <timeout>)
Die recv()-Funktion ist für TCP als auch für UDP verfügbar und empfängt
<length> Bytes vom Socket <socketname>. Der Defaultwert für das Argument
timeout liegt bei fünf Sekunden.
recv_line(socket:<socketname>, length:<length> [, timeout:
<timeout>])
Sandini Bib
3.2 Nessus
175
Diese Funktion ist der recv() Funktion sehr ähnlich, bricht aber das Lesen vom Socket ab, sobald ein \n-Zeichen (new line, neue Zeile) empfangen wird. Außerdem
kann man sie nur für TCP verwenden. Auch hier liegt der timeout bei 5 Sekunden.
send(socket:<socket>, data:<data> [, length:<length>])
Diese Funktion sendet die Daten (die durch das Argument data übergeben werden)
an den angegebenen Socket (socket). Das Argument length ist optional und gibt
an, wie viele Bytes tatsächlich gesendet werden sollen. Falls Sie dieses Argument
nicht übergeben, wird solange gesendet bis eine binäre NULL erkannt wird.
Es ist schwierig für diese Optionen passende Beispiele zu finden, die nicht auf
Funktionen eingehen, die Sie noch nicht kennen gelernt haben, deshalb werden
wir an dieser Stelle ein etwas sinnloses Skript anbringen, das den Banner eines
sshd-Servers abfragt oder abbricht falls dieser geschützt (tcp_wrapper) oder
nicht erreichbar ist:
# Skript zum Abfangen eines sshd-Banners
socket = open_sock_tcp(22);
if(socket)
{
banner = recv_line(socket:socket, lenght:1024);
if(banner)
{
display("Der sshd Server hat folgenden Banner ausgegeben:\n",
banner, "\n");
}
else
{
display("Bannerabfrage fehlgeschlagen");
}
close(socket);
}
Die Funktion zum Datenversand auf einen Socket werden Sie im Laufe des Kapitels noch kennen lernen.
High Level Funktionen
Für Web und FTP stehen einige weitergehende Funktionen zur Verfügung, die
Sie nachfolgend erklärt bekommen werden.
ftp_log_in(socket:<socket>, user:<login>, pass:<Passwort>)
Nachdem Sie mit der Funktion open_sock_tcp() eine Verbindung zu einem
FTP-Server oder Bouncer aufgebaut haben, können Sie sich mit Hilfe dieser Funktion dort anmelden.
ftp_get_pasv_port(socket:<socket>)
Sandini Bib
176
3 Systemaudit
Diese Funktion ermöglicht es Ihnen bestimmte Daten von einem FTP-Server herunter zu laden. Außerdem sendet sie einen PASV-Befehl an den Server und liefert
den Port für eine Verbindung. Falls dabei ein Fehler auftritt liefert die Funktion
den Rückgabewert false.
is_cgi_installed(<name>)
Prüft ob das CGI Skript <name> auf dem Webserver installiert ist und gibt bei Erfolg den Rückgabewert true zurück. Es verwendet dabei den GET-Befehl. Das
Skript verwendet als Standardpfadangabe /cgi-bin/. Sie können diese aber ändern,
in dem Sie den absoluten Pfad beginnend mit einem Slash selbst angeben. Diese
Funktion ist dabei selbstverständlich nicht auf cgi-Dateien beschränkt, sondern
kann auch für jedes andere Dateiformat verwendet werden.
Sie sehen jetzt zu den oben angeführten Funktionen einige Beispielskripte:
Das erste Beispielskript wird versuchen, Ihnen mit Hilfe des FTP-Servers die
Passwortdatei anzeigen zu lassen:
socket = open_sock_tcp(21);
if (ftp_log_in(socket:socket, user:"Helmschrott", pass:"Fischer"))
{
port = ftp_get_pasv_port(socket:socket);
if(port)
{
socket2 = open_sock_tcp(port);;
data = string("RETR /etc/passwd\r\n");
send(socket:socket, data:data);
passfile = recv(socket:socket2, length:50000);
display(passfile);
close(socket2);
}
close(socket);
}
Das nächste Beispiel wird prüfen, ob die Datei running.php im Verzeichnis nasltest eines Webservers existiert:
open_sock_tcp(80);
if (is_cgi_installed("/nasl-test/running.php"));
{
display("Die Datei running.php existiert\n");
}
Hilfsfunktionen
Bei der Beschreibung der folgenden Netzwerkfunktionen werden Sie auf einige
Hilfsfunktionen stoßen, die Ihnen die Arbeit enorm erleichtern können. Damit Sie
Sandini Bib
3.2 Nessus
177
sich nicht fragen, was solche Funktionen in der Argumentsübergabe zu suchen
haben, werden wir Sie an dieser Stelle vorab schon einmal besprechen:
this_host()
Diese Funktion übergibt die IP Adresse des Host, auf dem das Skript läuft. Sie
benötigt selbst keine Argumente.
get_host_name()
Auch diese Funktion benötigt kein Argument. Sie liefert den Hostnamen des
getesteten Rechners.
get_host_ip()
Sie können diese Funktion verwenden, um die IP des getesteten Rechners zu
übergeben und müssen auch hierbei kein Argument verwenden.
get_host_open_port()
Falls Sie den ersten offenen Port eines Hosts bestimmen wollen, können Sie diese
Funktion verwenden, Sie müssen hierbei keine Argumente übergeben.
get_port_state(Portnummer)
Diese Funktion gibt den Wert TRUE zurück, falls der Port (Portnummer) offen
oder sein Zustand unbekannt ist.
telnet_init(Socket)
Falls Sie den Banner eins Netzwerkprogramms abfangen wollen, können Sie
diese Funktion verwenden. Sie baut eine Telnet-Verbindung über den angegebenen – vorher initialisierten – Socket auf und liefert die erste Zeile der empfangenen Daten, die Sie dann via display() Wiedergeben können.
tcp_ping()
Liefert den Rückgabewert true, falls der Host auf eine TCP Paket mit gesetztem
ACK-Flag reagiert. Es verwendet kein Argument.
getrpcport()
Liefert den Rückgabewert 0, falls ein Fehler auftritt. Sie kennen diese Funktion
wahrscheinlich schon aus C. Trotzdem wollen wir seine Syntax an dieser Stelle
noch mal anführen:
<Resultat> = getrpcport(program : <program_number>,
protocol: IPPROTO_TCP|IPPROTO_UDP,
[version: <version>]);
Sandini Bib
178
3 Systemaudit
Raw-Pakete
Sie haben mit Nessus die Möglichkeit IP-Pakete zu erstellen und einzusetzen.
Falls Sie bestimmte Änderungen an dem Paket vornehmen, wird die Prüfsumme
neu berechnet und das length – Feld auf den neusten Stand gebraucht.
Alle Funktionen, die Raw-Pakete erstellen, verwenden Non Anonymous Argumente und beziehen Ihre Namen aus einer BSD-Include-Datei.
Ein IP Paket erstellen
Mit der Funktion forge_ip_packet() können Sie IP-Pakete erstellen. Die dabei
verwendeten Argumentnamen stammen aus BSD Include – Dateien, deshalb
können einige Abweichungen auftreten. Das ip_sum Feld ist optional. Für eine
Liste der Protokolle, die Sie dem Argument ip_p übergeben können, werfen Sie
bitte einen Blick auf Tabelle 3.8 (Sie können aber auch numerische Werte übergeben). Sehen Sie sich zur Verdeutlichung die Syntax und ein Beispiel dazu an:
<Rückgabewert> = forge_ip_packet(
ip_hl
: <ip_hl>,
ip_v
: <ip_v>,
ip_tos
: <ip_tos>,
ip_len
: <ip_len>,
ip_id
: <ip_id>,
ip_off
: <ip_off>,
ip_ttl
: <ip_ttl>,
ip_p
: <ip_p>,
ip_src
: <ip_src>,
ip_dst
: <ip_dst>,
[ip_sum : <ip_sum>] );
Im Folgenden sehen Sie ein einfaches Beispiel dazu:
Ip = forge_ip_packet(ip_v : 4, ip_hl : 5, ip_tos : 0, ip_id: 9,
ip_len : 28, ip_off : 0, ip_p : IPPROTO_UDP, ip_src : this_host(),
ip_ttl : 255);
Zu übergebendes Argument
Protokoll
IPPROTO_TCP
TCP
IPPROTO_UDP
UDP
IPPROTO_ICMP
ICMP
IPPROTO_IGMP
IGMP
IPPROTO_IP
IP
Tabelle 3.8 Argumente für ip_p
Sie sehen, Sie können in einen solchen Aufruf auch Funktionen etc. verpacken.
Sandini Bib
3.2 Nessus
179
Elemente eine IP Paketes auslesen
Die Funktion get_ip_element() ermöglicht es Ihnen bestimmte Felder eines IP
Paketes auszulesen. Die Syntax und ein Beispiel dazu finden Sie im Anschluss.
<Elementname> = get_ip_element(ip
: <ip_variable>,
element : "ip_hl"|"ip_v"|"ip_tos"|"ip_len"|
"ip_id"|"ip_off"|"ip_ttl"|"ip_p"|
"ip_sum"|"ip_src"|"ip_dst");
Das nächste Beispiel verdeutlicht Ihnen die Syntax noch mehr:
aga = get_ip_elemet(ip : rep, element:"ip_src");
Sie sehen, dass es auch genügt, wenn Sie ein Paket angeben, welches ausgelesen
werden soll. Vergessen Sie bei dieser Funktion bitte nicht die Anführungszeichen.
Inhalt eines IP Pakets verändern
Set_ip_elements() ermöglicht es Ihnen bestimmte IP Pakete beziehungsweise
deren Inhalt zu verändern und die Prüfsumme neu berechnen zu lassen (Sie können aber auch angeben, dass die Prüfsumme nicht neu berechnet wird). Die Syntax hierzu lautet:
set_ip_elements( ip
: <IP Paket>,
[ip_hl
: <ip_hl>, ]
[ip_v
: <ip_v>, ]
[ip_tos
: <ip_tos>,]
[ip_len
: <ip_len>,]
[ip_id
: <ip_id>, ]
[ip_off
: <ip_offset>,]
[ip_ttl
: <ip_ttl>,]
[ip_p
: <ip_proto>, ]
[ip_src
: <ip_src>,]
[ip_dst
: <ip_dst>,]
[ip_sum : <ip_sum> ]
);
Zur Vervollständigung werden wir auch für diese Funktion einige Beispiele aufführen:
Set_ip_elements(ip:igmp, ip_len:1500, ip_off:IP_MF);
Set_ip_elements(ip:igmp, ip_off:a|IP_MF);
Wie Sie aus dem letzen Beispiel ersehen können, können Sie auch Operatoren in
die Funktionsaufrufe einbauen. Der | Operator verbindet mehrere Argumente.
IP Pakete lesbar auf die Standardausgabe (stdout) ausgeben
Diese Funktion sollten Sie nicht in Ihre Skripte einbauen. Es sei denn, es ist unbedingt notwendig (z.B. für Tests, Fehlersuche etc.). Der Name der Funktion lautet
dump_ip_packet() und stellt schon fast die gesamte Syntax dar:
dump_ip_packet(Paketname);
Sandini Bib
180
3 Systemaudit
TCP-Pakete erstellen
Die Funktion, die Sie benötigen, um TCP-Pakete zu erstellen, ist der, die Sie bei
der Erstellung von IP Paketen benutzen, sehr ähnlich. Sie trägt den Namen
forge_tcp_packet() und wird wie folgt verwendet:
tcppacket = forge_tcp_packet(ip : <ip_packet>,
th_sport : <source_port>,
th_dport : <destination_port>,
th_flags : <tcp_flags>,
th_seq
: <seqünce_number>,
th_ack
: <acknowledgement_number>,
[th_x2
: <unused>],
th_off
: <offset>,
th_win
: <window>,
th_urp
: <urgent_pointer>,
[th_sum : <checkum>],
[data
: <data>]);
Die Option th_flags muss eine der folgenden Optionen beinhalten. Diese können mit dem | Operator verknüpft werden.
TH_SYN
TH_ACK
TH_FIN
TH_PUSH
TH_RST
Numerischer Wert
Die Option ip_packet muss über vorher die Funktion forge_ip_packet() generiert werden oder muss aus einem über send_packet() oder pcap_next() gelesenen Paket bestehen. Auch dazu werden wir einige Beispiele aufführen:
tcp = forge_tcp_packet(ip:ip, th_sport:10003, th_dport:port,
th_win:4096, th_seq:rand(), th_ack:0, th_off:5, th_flags:TH_SYN,
th_x2:0, th_urp:0):
tcppacket = forge_tcp_packet(ip:ip, th_sport:sport,
th_dport:dport, th_flags:TH_ACK, th_seq:rand(), th_ack:rand(),
th_x2:0, th_off:5, th_win:2048, th_urp);
Elemente aus einem TCP Paket verändern
Sie kennen diese Funktion für IP Pakete bereits und werden in der Handhabung
kaum auf Schwierigkeiten stoßen, da die Syntax annähernd dieselbe ist. Die Checksumme wird hier automatisch neu berechnet, außer Sie setzen die Option th_sum.
set_tcp_elements(tcp : <tcp_packet>,
[th_sport : <source_port>,]
[th_dport : <destination_port>,]
Sandini Bib
3.2 Nessus
181
[th_flags : <tcp_flags>,]
[th_seq
: <sequnce_number>,]
[th_ack
: <acknowledgement_number>,]
[th_x2
: <unused>,]
[th_off
: <offset>,]
[th_win
: <window>,]
[th_urp
: <urgent_pointer>,]
[th_sum
: <checkum>],
[data
: <data>] );
Elemente aus TCP Paketen auslesen
Um bestimmte Elemente aus einem TCP Paket auszulesen, steht Ihnen die Funktion get_tcp_element() zur Verfügung. Zur Verwendung benutzen Sie bitte folgende Syntax, doch beachten Sie dabei, dass die Option <element_name> aus einem Element der folgenden Auflistung bestehen muss (vergessen Sie bei der
Initialisierung bitte die Anführungszeichen nicht):
»tcp_sport«
»th_dport«
»th_flags«
»th_seq«
»th_ack«
»th_x2«
»th_off«
»th_win«
»th_urp«
»th_sum«
element = get_tcp_elements(tcp: <tcp_packet>,
element: <element_name>);
Natürlichen dürfen auch bei dieser Funktionsbeschreibung die Beispiele nicht
fehlen:
beispiel = get_tcp_element(tcp:r, element:"th_flags");
beispiel2 = get_tcp_element(tcp:r, element:"th_sport");
UDP Pakete erstellen
Um Wiederholungen zu vermeiden, werde ich an dieser Stelle nur die Syntax für
die Funktion forge_udp_packet() anbringen, da Sie die Handhabung dieser
Funktion schon von der Funktion forge_tcp_packet() her kennen:
udp = forge_udp_packet(ip:<ip_packet>,
uh_sport : <source_port>,
uh_dport : <destination_port>,
Sandini Bib
182
3 Systemaudit
uh_ulen
[uh_sum
[data
: <length>,
: <checksum>],
: <data>]);
Dazu auch noch einige Beispiele:
s = 56;
d =16343;
udp = forge_udp_packet(ip:ip, uh_sport:s, uh_dport:d, uh_leng:56);
udp2 = forge_udp_packet(ip:ip, uh_sport:s, uh_dport:d, uh_ulen:56,
update_ip_len:FALSE);
Elemente eines UDP Paketes ändern
Sie kennen diese Prozedur ja schon von den vorherigen Netzwerkfunktionen,
deshalb werden wir die Funktion set_udp_elements() nicht näher beschreiben.
Elemente aus einem UDP Paket auslesen
Auch die Funktionsweise der Funktion get_udp_elements() werden wir nicht
näher beschreiben, da sie ausreichend bekannt sein dürfte.
ICMP Pakete erstellen
Sie können die Funktion forge_icmp_packet() verwenden, um ICMP Pakete zu
erstellen. Die Syntax und einige Beispiele dazu werden Ihnen bei der Erstellung
dieser Tests mit Sicherheit weiter helfen.
<Rückgabewert> = forge_icmp_packet(ip:<ip_Variable>,
icmp_type:<icmp_type>,
icmp_code:<code>,
icmp_seq:<seq-nr>,
icmp_id:<id>
[data:<data>]
Dazu einige Beispiele:
icmp1 = forge_icmp_packet(ip:ip, icmp_type:17, icmp_code:0,
icmp_seq:1, icmpq_id:1);
icmp2 = forge_icmp_packet(ip:ip, icmp_type:8, icmp_code:0,
icmp_seq:2, icmp_id:2. data: "Sicherheitstest!");
icmp3 = forge_icmp_packet(ip:ip, icmp_type:13, icmp_code:0,
icmp_seq:1, icmp_id:1);
Elemente eines ICMP Paketes ändern
Auch die set_icmp_packet() Funktion sollten Sie nach der sorgfältigen Lektüre
dieses Kapitels bereits beherrschen, da Sie nach dem selben Prinzip wie die anderen Funktionen zur Änderung bestimmter Werte in Paketen funktioniert. Deshalb
werden wir nicht näher darauf eingehen.
Sandini Bib
3.2 Nessus
183
Elemente eines ICMP Paketes auslesen
Auch die Funktion get_icmp_element() funktioniert nach demselben Prinzip
wie die anderen Funktionen dieser Art. Trotzdem werden wir zum besseren Verständnis einige Beispiele aufführen:
icmp1 = get_icmp_element(icmp:r, element:"icmp_type");
icmp2 = get_icmp_element(icmp:rep, element:"icmp_type");
icmp3 = get_icmp_element(icmp:r, element:"icmp_type");
icmp4 = get_icmp_element(icmp:r, element:"icmp_id");
Erstellen eines IGMP Paketes
Um eine IGMP Paket zu erstellen, benutzen Sie bitte die Funktion
forge_igmp_packet(). Die Syntax hierzu ist den bereits besprochenen wieder
sehr ähnlich:
<Rückgabewert> = forge_igmp_packet(ip:<ip_Variable>,
type:<type>,
code:<code>,
group:<group>,
[data:<data]);
Hierzu noch ein Beispiel:
Igmp = forge_igmp_packet(ip:ip, type:2, code:31, group:128.1.1.1,
data:crap(1500));
Die Funktion crap() wird weiter unten im Kapitel besprochen.
IGMP Elemente ändern
Um Elemente eines IGMP Paketes zu ändern, benutzen Sie bitte die Funktion
set_igmp_element(). Die Verwendung ist äquivalent zu den bereits erklärten
Funktionen.
IGMP Elemente auslesen
Auch die Verwendung der Funktion get_igmp_element() funktioniert nach
dem bereits beschriebenen Prinzip.
Erstellte Pakete versenden
Sie sind nun an einem Punkt des Buches angelangt, an dem es Ihnen möglich ist,
Pakete mit NASL selbst zu erstellen. Die Erstellung eines Pakets macht natürlich
nur Sinn, wenn Sie die Möglichkeit besteht, diese danach auch zu versenden. Um
nun ein Paket unter Nessus zu verschicken können Sie die Funktion
send_packet() benutzen. Zur Verwendung ist die folgende Syntax nötig:
<Rückgabewert> = send_packet(packet1, packet2, ...., packetN,
pcap_active: <TRUE|FALSE>,
pcap_filter: <pcap_filter>
pcap_timeout:<timeout>);
Sandini Bib
184
3 Systemaudit
Die Option pcap_active kann zwei Werte annehmen: TRUE oder FALSE. Der Defaultwert liegt bei TRUE und besagt, dass die Funktion auf eine Antwort des Zielrechners wartet (was das Argument FALSE bedeutet dürfte somit klar sein). Die
nächste Option ist etwas komplexer, da sie einen Filter darstellt. Man kann die
pacp_filter-Option so setzen, dass die gewünschte Paketart definiert wird. Leider können wir an dieser Stelle nicht alle möglichen Filter ansprechen, da dies einige Seiten füllen würde. Um die verfügbaren Filter zu erhalten, installieren Sie
bitte das Paket libpcap oder tcpdump und rufen Sie die dementsprechende Manpage auf, dort werden alle Filter und die Verknüpfungsarten (and, or oder not)
beschrieben. Der pcap_timeout-Wert wird in Sekunden angegeben.
Damit diese Funktion etwas verständlicher wird, werden wir einige Beispiele
dazu aufführen:
reply = send_packet(udpip, pcpap_filter:"udp and dst port 44444",
pcap_active:TRUE);
Dies ist eine ziemlich einfach gehaltene Funktion, erfüllt jedoch seinen Zweck.
Das nächste Beispiel hingegen wird an Komplexität zunehmen.
filter = string("dst host", src, "and icmp and ((icmp[0]==3) or
(icmp[0]==11))", "and (icmp[24]==", str_ip-z")");
z[0]=" ";
t = strstr(z, ".");
filter = filter + string("and (icmp[25]==",z-t,") ");
t[0]=" ";
z = strstr(t, ".");
filter = filter + string("and (icmp[26]==", t-z,") ");
z[0]=" ";
filter = filter + string("and (icmp[27]==", z, ")");
.
.
reply = send_packet(p, pcap_active:TRUE, pcap_filter:filter);
Lassen Sie sich von der Komplexität dieses Codefragments nicht abschrecken, es
soll Ihnen nur zeigen, wie genau man solche Filterregeln definieren kann.
Bestimmte Pakete lesen
Natürlich will man Pakete nicht nur versenden, sondern auch lesen. NASL bietet
hierzu eine ziemlich einfache Funktion namens pcap_next(). Falls Sie diese
Funktion verwenden, liest Nessus das Paket von der zuletzt in einem Filter definierten Schnittstelle. Die Syntax hierzu lautet:
reply = pcap_next();
Sandini Bib
3.2 Nessus
185
Ein Beispiel hierzu könnte sein:
filter = string("tcp and src host" , get_host_ip(), " and dst host
", this_host(), "and src port", port, "and dst port", 12345);
aga = send_packet(tcp, pcap_active:TRUE, pcap_filter:filter);
if(aga)
{
aga2 = pcap_next();
if(aga2)
security_warning(port:0);
}
Allgemeines zu Zeichenketten
Da NASL Zeichenketten wie Zahlen behandelt können Sie auch Operatoren verwenden. Wir werden dies anhand einiger Beispiele verdeutlichen:
a = "version 1.2.3";
b = "version 1.4.1";
if(a < b){
#
# Da a kleiner ist als b, wird der Schleifenkörper
# ausgefuehrt
}
Sie können nach demselben Prinzip auch andere Operatoren, die Sie bereits kennen gelernt haben einsetzen. Es besteht auch die Möglichkeit Zeichenketten zu
addieren oder subtrahieren. Wir werden uns dies anhand einiger Beispiele verdeutlichen:
Bei diesem Skriptfragment erhält b den Wert »21.10«.
a = "Geburtsdatum 21.10";
b = a - "Geburtsdatum ";
Dieses Beispiel weist c den Wert »Linux« zu.
a = "Linux ist das Groesste";
b = " ist das Groesste ";
c = a - b;
Das letzte Beispiel weist a den Wert »LinuxLinux« zu.
a = "Linux";
a = a+a;
In den nächsten Abschnitten werden Sie einige Funktionen von NASL, die mit
Zeichenketten arbeiten, kennen lernen.
Sandini Bib
186
3 Systemaudit
Mustervergleich
Für Mustervergleiche steht Ihnen unter NASL die Funktion ereg() zur Verfügung. Die passende Syntax zu dieser Funktion lautet:
<Rückgabewert> = ereg(pattern:<pattern>, string:<string>)
Um Genaueres über die Syntax des Arguments pattern zu erfahren, betrachten
Sie bitte Tabelle 3.9, welche die möglichen Metazeichen für dieses Argument mit
einer passenden Beschreibung erläutert. Falls Sie einige Beispiele für Suchmuster
einsehen wollen, werfen Sie einen Blick in Tabelle 3.10.
Metazeichen
Beschreibung
.
Trifft auf jedes Zeichen zu.
*
Trifft auf beliebig viel vorher angegebene Zeichen zu.
^
Trifft auf Zeilenanfang zu.
$
Trifft auf Zeilenende zu.
\
Die folgende Sonderbedeutung eines Zeichens wird aufgehoben.
[]
Trifft auf ein Zeichen zu, welches sich in der Menge, die in den
Klammern angegeben ist, befindet.
\{ \}
Trifft auf eine bestimmte Anzahl von Instanzen zu.
+
Trifft auf eines oder mehrere der vorher angegebenen Zeichen zu.
?
Trifft auf keines der vorher angegebenen Zeichen zu.
|
Trennt Auswahlmöglichkeiten.
()
Gruppiert Auswahlmöglichkeiten.
Tabelle 3.9 Metazeichen für das Argument pattern
Suchmuster
Beschreibung
Version
Sucht nach der Zeichenkette »version«.
^version
Sucht auch nach der Zeichenkette »version«. Es wird aber nur ein Treffer
gemeldet, falls sich diese Zeichenkette am Anfang einer Zeile befindet.
version$
Hier trifft das Suchmuster zu, falls die Zeichenkette sich am Ende der
Zeile befindet.
^version$
Um hierbei einen Treffer zu erzielen, muss die Zeichenkette das einzige
Wort in der Zeile sein.
versi.n
Hierbei kann das sechste Zeichen beliebig sein.
^… $
Tifft auf jede Zeile mit genau drei Zeichen zu.
^\.
Jede Zeile die mit einem Punkt beginnt, stellt bei diesem Suchmuster
einen Treffer dar.
Tabelle 3.10 Beispiele zum Argument pattern
Sandini Bib
3.2 Nessus
187
Suchmuster
Beschreibung
version*
Auf dieses Suchmuster würden zum Beispiel folgende Zeichenketten
zutreffen: versionsnummer, versionstest …
[123]
Trifft zu, wenn eine der Ziffern 1, 2 oder 3 enthalten ist.
Feuerwehr(mann|frau)
Die Zeichenkette kann Feuerwehrmann oder Feuerwehrfrau lautet.
Beides träfe zu.
[a-zA-Z]
Zeichenkette kann ein beliebiger Buchstabe sein.
[0-9A-Za-z]*
Trifft auf alle alphanumerischen Zeichenfolgen zu.
[A-Z]*
Trifft auf beliebig viele Großbuchstaben zu.
[A-Z].*
Trifft auf eine Zeichenkette zu, die aus einem beliebigen Großbuchstaben gefolgt von beliebig vielen Zeichen besteht.
[A-Z]+
Zeichenkette muss aus einem oder mehreren Zeichenketten bestehen.
»*version«*
Trifft auf die Zeichenkette zu, ob mit oder ohne Anführungszeichen.
Tabelle 3.10 Beispiele zum Argument pattern (Forts.)
Falls Ihnen die in Tabelle 3.10 aufgeführten Beispiele und die folgenden Codefragmente noch nicht reichen, können Sie die egrep-Manpage aufrufen, um weitere Informationen zu diesem Argument zu bekommen.
ereg(pattern:".*vr([0-9][^0-9]|10).*$",string:r));
ereg(patter:"^connected. time/date: .*, version:.*$", string:r));
ereg(pattern:".*.Version\ (8\.1\.6)|(8\.0\.6)|(7\.3\.4).*.",
string:version));
Eine weitere Funktion, die sich mit Mustervergleichen beschäftigt, lautet
egrep(). Diese Funktion gibt die erste Zeile eines Textes wieder, die mit dem
Suchbegriff, der dem Argument pattern übergeben wird. Falls dieser Text nur
aus einer einzigen Zeile besteht, so entspricht diese Funktion der Funktion
ereg(). Wenn keine übereinstimmende Textpassage gefunden wird, wird der
Wert false zurückgegeben. Die Syntax für diese Funktion lautet wie folgt (die
Metazeichen hierzu finden Sie ebenfalls in Tabelle 3.9):
funktion = egrep(pattern : <pattern>, string: <string>);
Natürlich halten wir auch ein passendes Beispiel dazu bereit.
port = get_kb_item("Services/www");
if( !port) port = 80 ;
if(get_port_state(port))
{
key = string("www/banner/", port);
banner = get_kb_item(key);
if(!banner)
{
Sandini Bib
188
3 Systemaudit
socket = open_sock_tcp(port);
req = http_head(item:"/", port:port);
send(socket :socket, data :req) ;
banner = recv(socket:socket, length:2000);
close(socket);
}
if(egrep(
pattern:"(.*PHP/3\.0\.((1[0-6])|([0-9]([^0-9]|$))))
|(.*PHP/4\.0\.[0-2]([^0-9]|$))", string:banner))
{
security_waring(port);
}
}
Bufferoverflowattacken simulieren
Wenn man etwas mit Hacking identifiziert, dann Bufferoverflow-Attacken.
NASL bietet eine recht einfach gestrickte, aber durchaus sinnvolle Funktion, mit
der Sie testen können, ob bestimmte Programme eine Bufferoverflowlücke haben
oder nicht. Diese Funktion heißt crap() und kann auf zwei verschiedenen Weisen benutzt werden:
Die erste Möglichkeit diese Funktion zu benutzten besteht darin, eine Zeichenkette bestimmter Länge (<length>) bestehend aus lauter X zu erzeugen und diese
zu übergeben. Die nötige Syntax hierfür lautet:
crap(<length>);
Falls Sie aber einen ständig wiederholenden Inhalt (data) bestimmter Länge
(<length>) übergeben wollen, können Sie auch die zweite Möglichkeit der Initialisierung benutzen:
crap(length:<length>, data:<data>);
Um die Funktionsweise besser verdeutlichen zu können, werde ich hierzu einige
simple Beispiele aufführen:
a = crap(2);
# uebergibt a = "XX"
c = crap(length:7, data:"ab"); # uebergibt c = "abababa"
Zeichenketten in Zeichenketten verwenden
Die Funktion string() werden Sie sehr oft in Ihren Tests verwenden, da Sie es einem ermöglicht bestimmte Zeichenketten in anderen Zeichenketten zu werden und
dabei Steuerzeichen interpoliert. Die zu verwendende Syntax lautet wie folgt:
string(<string1>, [<string2>, ..., <stringN>]);
Schauen Sie sich die folgenden Beispiele genau an, damit Sie die Handhabung
dieser Funktion auch wirklich verstehen:
Sandini Bib
3.2 Nessus
189
Das erste Beispiel weist der Variable den Wert: »Ich arbeite nur mit Linux« mit
dem Steuerzeichen »NewLine« am Ende der Zeile zu.
os = "Linux";
a = string("Ich arbeite nur mit ", os, "\n");
Das nächste Listing übergibt der Variable den Wert: »1 und 2 ergibt 3«:
b = string(1, " und ", 2, " ergibt ", 1+2);
Das letzte Codefragment belegt c mit dem Wert: »TEST XXXX« gefolgt von einem
Carriage Return und einem New Line am Ende der Zeile:
c = string("TEST ", crap(4), "\r\n");
Länge einer Zeichenkette
Die Funktion strlen() wird wohl jedem C-Programmierer bekannt sein. Sie ermittelt die Länge einer Zeichenkette und wird wie folgt verwendet:
Variable = strlen();
Ein passendes Beispiel zu dieser Funktion finden Sie im nächsten Listing.
Variable = strlen("keihlp"); # a erhält den Wert 6
NASL Integer zu binären Integer konvertieren
Mit der strtoint() Funktion kann man NASL Integer zu binären Integer konvertieren, die dazu nötige Syntax lautet wie folgt:
Variable = strtoint(number:<nasl_integer>,
size:<number_of_bytes>);
Diese Funktion können Sie zusammen mit raw_string() verwenden (Sie werden merken, dass Sie diese Funktion fast nur in Verbindung dazu nutzen werden), wobei das Argument size der Byteanzahl entspricht in die der Integer von
NASL konvertiert werden soll. Mögliche Größen hierfür sind 1, 2 und 4.
Beispiel:
num = rand();
raw_data = strtoint(number:num, size:2);
Zeichenketten in Kleinbuchstaben konvertieren
Dies ist eine recht einfach, aber dennoch praktische Funktion, die es Ihnen erlaubt
einen bestimmten String in Kleinbuchstaben zu konvertieren. Die Syntax lautet:
tolower(<string>)
Zur Veranschaulichung stellen wir auch zu dieser Funktion ein Beispiel bereit:
a = "Ich will nur Kleinbuchstaben haben";
b = tolower(a); # b = "ich will nur kleinbuchstaben haben"
Sandini Bib
190
3 Systemaudit
Portstatus ermitteln
Mit der Funktion get_port_state() steht Ihnen eine Funktion zur Verfügung,
die es Ihnen ermöglicht zu überprüfen, ob ein bestimmter Port offen ist. Falls er
offen oder sein Status unbekannt ist liefert die Funktion den Wert true, ansonsten
false. Beachten Sie, dass es bei NASL Sicherheitstests sehr auf die schnelle Abarbeitung der einzelnen Skripte ankommt und es daher sehr sinnvoll ist, diese
Funktion einzusetzen, um zu testen, ob eine bestimmte Verbindung (die ein anderes Skript bzw. eine andere Funktion in demselben Skript aufbauen muss) überhaupt zustande kommen kann, da sehr viel Zeit mit einer Firewall, die Pakete
zum Zielport blockt, verschwendet werden kann. Die Syntax für diese Funktion
lautet:
get_port_state(<Portnummer>)
Knowledge Base
Vorab möchte ich Sie darauf hinweisen, dass Sie zum Verständnis der Nessus
Knowlegde Base den Abschnitt weiter unten im Buch, der sich ausschließlich darum dreht, lesen sollten.
Die Nessus Knowledge Base wurde entwickelt, um Arbeit, die bereits verrichtet
wurde, nicht noch einmal machen zu müssen und Sie anderen Skripten zur Verfügung zu stellen. Bevor ich mich lange in den Ausführungen über die Theorie
darüber aale, werde ich ein kleines Beispiel bringen, das Ihnen sicherlich helfen
wird, die Thematik zu verstehen.
Nehmen wir an, Sie haben einen FTP-Server laufen, der sicherheitskritische Daten
für einige Ihrer Mitarbeiter bereitstellt. Natürlich sind Sie nun darauf bedacht, dass
dieser Dienst stets sicher ist und ihm niemand ein »Ei« unterjubelt. Daher haben Sie
sich entschlossen, den Server alle 30 Sekunden überprüfen zu lassen. Wenn Sie sich
nun über einige Variablen des Servers sicher sind (Port etc.), brauchen Sie diese logischerweise nicht mehr überprüfen lassen, da dies ja doppelte Arbeit wäre. Sie können diese bekannten Fakten nun aus der Nessus Knowledge Base beziehen und sparen sich somit einen Haufen Arbeit und Traffic. Natürlich werden spezifische
Änderungen in der KB gespeichert (Änderung der Portnummer).
Nachdem Sie nun wissen, was die Knowledge Base ist, sollten Sie noch erfahren,
mit welchem Aufruf Sie sie in Ihre Skripte einbauen können. Dabei müssen Sie
aber beachten, dass es zwei Möglichkeiten gibt, diese Funktion zu initialisieren.
Die erste ist anonym und und liefert den in der Knowledge Base gespeicherten
Wert des Feldes <name>.
get_kb_item(<name>);
Die zweite Möglichkeit besteht darin, ein Feld in der Knowledge Base upzudaten.
set_kb_item(name:<name>, value:<value>);
Sandini Bib
3.2 Nessus
191
Beachten Sie dabei, dass es nicht möglich ist ein Feld in Zeile x zu setzen und es in
Zeile x+y wieder einzulesen, da die lokale Knowledge Base noch nicht auf den
neusten Stand gebracht wurde.
Aufbau eines NASL Skriptes
Bevor Sie Ihr NASL Skript in den dafür vorgesehenen Ordner kopieren können
(zumeist /usr/lib/nessus/plugins) müssen Sie es schreiben und dabei eine gewissen
Form einhalten. Dies ist wichtig, da sich das Skript automatisch am Nessus-Server anmeldet und ihm einige Informationen über sich übergibt. Sie werden im
Folgenden ein Muster – »Skriptgerüst« sehen, das Ihnen die nötigen Formatierungen zeigen wird:
#
# NASL SKRIPT
#
if(description)
{
#
# Hier platzieren Sie bitte die Register Section
#
exit(0);
}
#
# Die Attack Section befindet sich hier und
# beinhaltet den eigentlichen Code
#
Die globale Variable description wird auf TRUE gesetzt, falls sich ein Skript
registrieren muss oder auf FALSE, wenn es das nicht tun muss.
Register Section
In diesem Teil des Skriptes müssen folgende Optionen gesetzt werden:
script_name(language1:<name>, [...]);
Der Name, den Sie hier angeben, wird im Nessus-Client erscheinen.
script_description(language1:<desc>, [...]);
Wenn der User den Namen im Client anklickt, wird diese Beschreibung gezeigt.
script_summary(language1:<summary>, [...]);
Hier können Sie die Kurzbeschreibung angeben, die bei den Tooltips erscheinen
wird (Sie dürfen dabei keinen Text angeben, der mehr als eine Zeile benötigt).
script_category(<category>);
Sandini Bib
192
3 Systemaudit
Gibt die Skriptkategorie an, welche aus einer der in Tabelle 3.11 angegebenen
Argumente bestehen muss.
Skriptkategorie
Beschreibung
ACT_GATHER_
INFO
Die Skripte werden vorab durchgeführt und können den Zielhost unter
keinen Umständen schädigen.
ACT_ATTACK
Diese Tests versuchen bestimmte Rechte am Zielhost zu erhalten. Die
dafür verwendeten Methoden können den Zielhost durchaus Schaden
zufügen (Bufferoverflowattacken etc.).
ACT_DENIAL
Falls ein Skript dieser Kategorie erfolgreich ist, wird der Zielhost mit
Sicherheit Schaden nehmen, da das Skript versucht den Rechner zum
Absturz zu bringen.
ACT_SCANNER
Bei der Anwendung solcher Skripte hat der Zielhost keinen Schaden zu
befürchten, da es sich um ein Portscannerskript handelt.
Tabelle 3.11 Skriptkategorien für die Register Section
script_copyright(language1:<copyright>, [...]);
In diesem Abschnitt können Sie bestimmte Copyright-Angaben machen, die das
Skript betreffen. Welche das sind, bleibt völlig Ihnen überlassen.
script_family(language1:<family>, [...]);
Gibt die Skriptfamilie an. Da es aber zurzeit keine klar vordefinierten Familien gibt,
können Sie eine x-beliebige angeben, was aber wenig Sinn macht, da Sie nicht der
einzige sein werden, der mit Nessus arbeitet. Um sicherzugehen, dass Sie auch
Administratoren außerhalb Ihres Büros verstehen (bzw. Ihre Skripte), sollten Sie
eine der folgenden – vordefinierten – Familien angeben:
Backdoors
CGI abuses
Denial of Service
FTP
Finger abuses
Firewalls
Gain a shell remotely
Gain root remotely
Misc.
NIS
RPC
Sandini Bib
3.2 Nessus
193
Remote file access
SMTP problems
Useless services
script_Funktion(english:englischer_text,
[francais:franzoesischer_text, deutsch:deutscher_text,
...]);
Das oben angeführte Listing ist keine eigenständige Funktion, sondern betrifft
alle Funktionen. Sie haben bei den Funktionsaufrufen gesehen, dass vor jeder Angabe immer das Argument language1 stand. Wie Sie sehen können, ist es unter
Nessus möglich, die Angaben in mehreren Sprachen zu verfassen. Welche Sprachen Sie dabei wählen bleibt Ihnen überlassen, solange Sie Ihre Angaben mindestens in Englisch verfassen. Damit Sie besser verstehen, was ich meine, werfen Sie
bitte einen Blick auf das folgende Beispiel:
If(description)
{
name["english"] = "Bufferoverflow test for apache";
name["deutsch"] = "Bufferoverflowtest für Apache";
name["francais"] = "Je ne parles pas francais";
script_dependencies(filename1 [,filename2, ..., filenameN]);
Diese Funktion ist nicht vorgeschrieben, aber manchmal sehr hilfreich. Sie können an dieser Stelle angeben, ob Ihr Skript erst ausgeführt werden soll, nachdem
ein anderes bereits gelaufen ist. Dies kann äußerst praktisch sein, falls zwei
Skripte denselben Server scannen, da Ihr Skript dann alle spezifischen Daten, die
es zum erfolgreichen Test braucht, aus der Knowledge Base beziehen kann.
Attack Section
In der Attack Section steht alles, das für einen erfolgreichen Sicherheitstest notwendig ist. Falls ein Test erfolgreich war, können Informationen für ähnlich arbeitende Tests mit den beiden folgenden Funktionen weitergegeben werden.
security_warning(<port> [, protocol:<proto>]);
security_hole(<port> [, protocol:<proto>]);
security_warning(port:<port>, data:<data> [, protocol:<proto>]);
security_hole(port:<port>, data:<data> [, protocol:<proto>]);
Die jeweils zuerst erwähnte Funktion beschreibt ein Sicherheitsloch, dessen Risiko nicht so hoch ist wie das bei einer security_hole. Falls Sie sich für den ersten
Aufruf entscheiden, so wird die Skriptbeschreibung, die Sie am Anfang angegeben haben, im Client angezeigt. Für den Fall, dass Sie sich für die längere Syntax
entscheiden, wird der Inhalt des Feldes data angezeigt.
Sandini Bib
194
3 Systemaudit
Ausführung einschränken
Obwohl wir dieses Szenario schon öfters in diesem Kapitel besprochen haben,
möchte ich es trotzdem gerne auch an dieser Stelle benutzen.
Stellen Sie sich vor, Sie haben ein Skript geschrieben, das einen bestimmten Service, welcher auf einem bestimmten Port läuft, auf Sicherheitslücken überprüft.
Falls dieser Dienst nicht aktiv oder erreichbar ist, ist Ihr Skript völlig nutzlos und
kostet nur wertvolle Zeit. Nessus bietet Ihnen die Möglichkeit die Ausführung
bestimmter Skripte einzuschränken. Welche Funktionen – die Sie übrigens in der
description section, also ganz am Anfang, angeben müssen – Ihnen dabei zur Verfügung stehen, werden Sie jetzt erfahren:
script_require_ports(<port1>, <port2>, ...)
Falls Sie diese Funktion verwenden, wird Ihr Skript nur ausgeführt, wenn der
Port <port> offen oder nicht bekannt ist. Sie können Ihre Angaben numerisch (21)
oder symbolisch (Services/ftp) machen.
script_require_keys(<key1>, <key2>, ...)
Skripte, die diese Funktion beinhalten, werden nur ausgeführt, falls die Argumente <key> alle in der Knowledge Base vorhanden sind.
script_exclude_keys(<key1>, <key2>, ...)
Nessus wird dieses Skript nicht ausführen, falls eines der Argumente <key> in
der Knowledge Base gesetzt ist.
Natürlich haben wir auch zu diesen Funktionen einige Beispiele bereitgestellt:
script_require_ports("Services/www", 80);
script_require_keys("rpc/portmap");
script_exclude_keys("imap/false_imap");
3.2.5
Knowledge Base
Die Knowledge Base ist eine Art Datenbank, die bestimmte Felder (Nessus nennt
diese Felder Schlüssel – für eine Liste mit den wichtigsten Feldern besuchen Sie
bitte unsere Buch-Website) mit Daten füllt, die sich bei bestimmten Testdurchläufen ergeben (wie zum Beispiel Portnummern). Skripte können sich dadurch eine
Menge Arbeit sparen, indem Sie bestimmte – wichtige – Fakten nicht selbst herausfinden müssen, sondern sich der Knowledge Base bedienen und sich die
Informationen aus den Feldern holen. Dies spart eine Menge Zeit und Bandbreite.
In Abbildung 3.1 können Sie das Konfigurationsfenster für die Konfiguration der
Knowledge Base sehen.
Sandini Bib
3.2 Nessus
195
Abbildung 3.1 Clientkonfigurationsfenster für Knowledge Base
Wir werden nun in den folgenden Abschnitten auf die einzelnen Punkte dieses
Konfigurationsfensters eingehen und Ihnen erklären, was diese genau bedeuten.
Knowledge Base aktivieren
Abbildung 3.2 zeigt, welchen Punkt Sie aktivieren müssen, damit Sie die Vorzüge
einer Knowledge Base nutzen können. Beachten Sie dabei aber bitte, dass, falls Sie
nur diese Funktion alleine aktivieren, die Felder in der Datenbank von anderen
Tests nicht genützt werden. Wie Sie Nessus konfigurieren, so dass die gespeicherten Ergebnisse von bereits durchgeführten Tests auch für andere Skripte verfügbar sind, erfahren Sie im Anschluss an diesen Abschnitt.
Sandini Bib
196
3 Systemaudit
Abbildung 3.2 Knowledge Base aktivieren
Wie bereits erwähnt, können Sie die getesteten Ergebnisse damit noch nicht für
andere Tests verfügbar machen. Um dies zu erreichen müssen Sie den in Abbildung 3.3 gezeigten Punkt aktivieren.
Seien Sie aber sehr vorsichtig mit dieser Option. Obwohl die Vorteile klar auf der
Hand liegen (Schonung der Bandbreite, Zeitersparnis), hat das Verfügbarmachen
von bestimmten Testergebnissen auch enorme Schattenseiten. Stellen Sie sich vor,
es wäre Ihre Aufgabe, einen bestimmten Webserver jeden Tag auf aktuelle Sicherheitslücken zu testen. Wenn Sie sich nun die Zeit für das Portscanning sparen
wollen und Ihrem Skript den Schlüsselwert aus der Knowledge Base übergeben,
könnte es durchaus sein, dass Sie so gravierende Sicherheitslücken wie Trojaner
Sandini Bib
3.2 Nessus
197
nicht entdecken. Wägen Sie also ab, wie sicher das zu testende Netzwerk bereits
ist und welche Rolle die Zeit bei Ihren Tests spielt. Finden Sie ein Mittelmaß, mit
dem Sie schnell und sorgfältig testen können.
Abbildung 3.3 Knowledge Base verfügbar machen
Nachdem Sie diese Option aktiviert haben, können Ihre Tests auf die Knowledge
Base zugreifen. Welche Aktionen Ihre Tests dabei nicht mehr jedes Mal aufs Neue
herausfinden sollen, können Sie an den Punkten in Abbildung 3.4 einstellen.
Sandini Bib
198
3 Systemaudit
Abbildung 3.4 Optionen für Knowledge Base
Was soll getestet werden?
Falls Sie eine Knowledge Base wünschen und dies im ersten Schritt angegeben haben, ist es möglich, bestimmte Einschränkungen vorzunehmen. Diese Restriktionen beziehen sich auf die zu testenden Hosts. Wie Sie anhand von Abbildung 3.5
sehen können, stehen Ihnen dabei drei Auswahlmöglichkeiten zur Verfügung.
Test all hosts
Falls Sie diesen Punkt aktivieren, werden alle Hosts, die Sie im Target-Feld angegeben haben, getestet.
Only test hosts that have been tested in the past
Sandini Bib
3.2 Nessus
199
Diese Option bewirkt, dass nur Hosts überprüft werden, die eine aktuelle (noch
nicht verfallene) Knowledge Base angehängt haben.
Only test hosts that have never been tested in the past
Um Nessus dazu zu bringen, nur Hosts zu scannen, die keine oder nur eine abgelaufene Knowledge Base angehängt haben, müssen Sie diese Option aktivieren.
Abbildung 3.5 Einschränkungen für zu testende Hosts
Aktualität (up-to-date)
Im vorhergehenden Abschnitt habe ich von einer abgelaufenen und aktuellen
Knowlegde Base gesprochen. Falls Sie das verwirrt hat, hoffe ich, dass dieser Abschnitt die Unklarheiten beseitigen wird.
Nessus bietet Ihnen die Möglichkeit, Ihrer Knowledge Base ein bestimmtes Verfallsdatum zu geben. Falls dieses Datum überschritten ist, erkennt Nessus dies
Sandini Bib
200
3 Systemaudit
und deklariert die KB als outdated (abgelaufen). Abbildung 3.6 zeigt Ihnen einen
Screenshot des Dialogs, der Ihnen die Möglichkeit gibt, Nessus das Verfallsdatum
einer KB mitzuteilen. Die Grenzen nach oben stehen Ihnen dabei frei. Nach unten
haben Sie jedoch ein Limit von 3600 Sekunden einzuhalten. Wie schon erwähnt,
sind Angaben in Sekunden zu machen.
Abbildung 3.6 Verfallsdatum einer KB
3.2.6
Session saving
Falls Sie sich einmal die Mühe machen und das Programm IPTraf den Netzwerkverkehr mitloggen lassen, den Nessus verursacht, werden Sie sehr schnell merken,
dass dieser enorm hoch ist. Deshalb ist es umso ärgerlicher, wenn ein Scandurchlauf durch irgendetwas unterbrochen wird (Host stürzt ab, Netzwerkverbindung
wird inaktiv etc.). Für solche Fälle hat man sich entschlossen ein neues Feature in
Sandini Bib
3.2 Nessus
201
Nessus zu implementieren. Mit Hilfe des Session saving-Features haben Sie in Fällen unerwarteter Unterbrechungen eines Durchlaufs die Möglichkeit, Ihren Scan
annähernd von der Stelle, an der die Unterbrechung stattgefunden hat, zu starten
und verlieren somit wesentlich weniger Daten und setzen das Netzwerk nicht
nochmals einer großen Scanbelastung aus.
Abbildung 3.7 zeigt das Dialogfenster (TARGET SELECTION), in dem Sie Session
saving aktivieren können.
Abbildung 3.7 Session saving-Dialog
Um Session saving zu aktivieren müssen Sie lediglich den dazugehörigen Menüpunkt aktivieren.
Session wiederherstellen
Falls es nun wirklich einmal passiert sein sollte, können Sie eine abgestürzte Session mit dem Punkt RESTORE SESSION wiederherstellen. Sie sollten den Namen der
Sandini Bib
202
3 Systemaudit
abgestürzten Session sehen, sobald Sie sich wieder mit dem Nessus Server verbunden haben. Das dabei verwendete Format ist <YYYYMMDD-HHMMSS>.
Session löschen
Wie Sie sich sicher schon gedacht haben, können Sie mit dem DELETE SESSION-Button Sessions auf der Nessus Server-Seite löschen.
Fehlerbehebung
Es kann dabei durchaus einmal vorkommen, dass Ihnen Nessus bei einem Scandurchlauf abstürzt und Sie – nachdem Sie sich mit Ihrem Server neu verbunden
haben – noch immer keine Session, die Sie wiederherstellen können, sehen. In diesem Fall könnte dies daran liegen, dass die Session noch gelockt ist. Sie können
diesen Lock lösen, indem Sie den folgenden Befehl ausführen:
rm /usr/local/var/nessus/<username>/sessions/.*.lck
3.2.7
Weitere Plugins
Natürlich können wir noch einige Seiten mit wirklich sehr guten und gelungenen
Plugins von Nessus füllen, doch ich denke, dass das nicht im Sinne dieses Buches
ist. Falls Sie aber interessiert sind, weitere Plugins kennen zu lernen, besuchen Sie
doch die offizielle Nessusseite oder unsere Buchseite. Wir haben dort einige Informationen für Sie aufbereitet, die Ihnen mit Sicherheit helfen, die Möglichkeiten
von Nessus voll auszuschöpfen.
3.3
VPASS
Jetzt ist es an der Zeit unsere Passwörter zu prüfen. Wir werden Ihnen einige Tools
vorstellen, mit denen Sie überprüfen können, ob die Passwörter und die dazugehörigen Usernamen sicher sind oder eben nicht und es einer Änderung bedarf.
Das erste Tool diese Serie ist vpass. Vpass überprüft anhand der beliebten cracklib, ob die übergebene Kombination aus Username und Passwort (oder nur das
Passwort) sicher ist. Falls nicht, sollten Sie vermeiden dieses Passwort zu wählen.
Nun werden Sie sich denken, was der blauäugige Autor da so von sich gibt, ist
zwar ganz nett, aber leider in der Praxis völlig sinnlos. Denn wie sollen Sie als Administrator eines lebendigen Netzwerkes, in dem jeder User sein Passwort nach
Belieben ändern kann (oder sogar muss), überprüfen, ob das Passwort, das gewählt wurde, sicher ist.
Mit dieser These liegen Sie natürlich richtig. Sie können in solchen Fällen selbstverständlich auf Programme wie crack oder john the ripper zurückgreifen,
aber es gibt auch eine Möglichkeit das Programm vpass sinnvoll einzusetzen.
Das ist selbstredend kein hundertprozentig sicherer Weg, er könnte aber einige
User davon abhalten Ihr Passwort ungeschickt zu wählen.
Sandini Bib
3.3 VPASS
203
Syntax
Der allgemeine Aufruf erfolgt über den Programmnamen. Zusätzlich können
noch einige weitere Angaben gemacht werden:
Linux:~# echo "USER PASS" | vpass [Optionen] [Wörterbuch]
Die beiden verfügbaren Optionen finden Sie in Tabelle 3.12.
Option
Beschreibung
-h oder --help
Gibt die Hilfefunktion aus
-u oder --nouser
Informiert vpass darüber, dass kein Username angegeben wird. Es wird
also nur das Passwort überprüft.
Tabelle 3.12 Optionen für vpass
Anstelle des Platzhalters [Wörterbuch] können Sie optional ein Verzeichnis angeben, in dem sich Crackwörterbücher befinden. Falls Sie kein Verzeichnis spezifizieren, wird das Standardverzeichnis /usr/lib/cracklib_dict benutzt.
Tabelle 3.13 informiert Sie über die möglichen Rückmeldungen von vpass bezüglich der Sicherheit der angegebenen Passwörter.
Meldung
Beschreibung
OK
Passwort scheint nicht einfach zu erraten zu sein.
ERR a message
Gibt eine Meldung aus, warum Sie diese Kombination nicht wählen
sollten.
Tabelle 3.13 Rückmeldungen von vpass
Beispiele
Linux:~# echo "a a" | vpass
ERRNO 3:do not use your user name as a password
Linux:~# echo "a b" | vpass
ERRNO 5:unsuitable password because it is too short.
Linux:~# echo "joe bunnylein" | vpass
ERRNO 6:do not use all lower case passwords
Linux:~# echo "joe bunNyLein" | vpass
OK
Sandini Bib
Sandini Bib
4 Filesystem Integrity Checker
Falls Ihnen die Überschrift dieses Kapitels noch nicht allzu viel sagt, wird es definitiv Zeit, dass Sie sich mit dieser Materie auseinander setzen. Bevor ich Ihnen
kurz erläutern werde, was Filesystem Integrity Checker überhaupt sind, möchte ich
Sie bitten kurz über die Schwächen so genannter Attack-Signature-Scanner (AntiViren-Programme) nachzudenken. Dabei wird Ihnen mit Sicherheit auffallen,
dass diese Programme –um einen guten Job machen zu können– stets eine aktuelle Bibliothek benötigen (man könnte auch sagen, dass Sie eine gute Virendatenbank bräuchten), in der Sie Informationen über bekannte Virensignaturen finden,
um bereits bekannte, bösartige Fremdprogramme zu erkennen und somit das
System vor solchen Eindringlingen schützen können.
In diesem Kapitel werden wir uns mit freier Software beschäftigen, die diesen
Makel nicht hat und zusätzlich einen wesentlich größeren Schutz für Ihr System
bieten kann. Filesystem Integrity Checker konservieren (stark vereinfach gesagt)
einen Systemzustand, der als sicher gilt. Falls nun eine bösartige Software nicht
vom Virenscanner erkannt wird und somit zum Beispiel durch eine E-Mail ins
System gelangt, kann es mit Hilfe des konservierten Systemzustands gefunden
und beseitigt werden.
4.1
Tripwire
Tripwire ist wohl der bekannteste Vertreter der Filesystem Integrity Checker und
mit Sicherheit auch eines der besten freien Tools, die sich mit IT-Security einen Namen gemacht haben. Die Entwickler Gene Kim und Eugene Spafford haben es sich
zur Aufgabe gemacht, ein Programm zu schaffen, das dabei weitaus mehr bietet als
einen einfachen Vergleich des aktuellen Systemzustands mit einer als sicher geltenden Sicherungskopie. Da den Entwicklern bereits sehr bald klar wurde, dass man die
Integrität eines Dateisystems anhand einiger, signifikanter Merkmale genauso gut
überprüfen kann wie anhand einer exakten Sicherungskopie, bestand die große Aufgabe und Schwierigkeit darin, diese Merkmale auf eine sinnvolle Weise – auch und
besonders in Hinblick auf die späteren Überprüfungen – zu extrahieren. Um die Datenmengen, die dabei entstehen, so gering wie möglich zu halten, hat man sich dazu
entschlossen, die Informationen mit Algorithmen aus dem Bereich der Nachrichtenverschlüsselung aus dem System zu gewinnen (zum Beispiel MD5).
Bevor wir beginnen, möchte ich an dieser Stelle vorab erwähnen, dass wir mit der
weit verbreiteten Academic-Source-Release (ASR) arbeiten, aber an den meisten
Stellen (Selection Masks und Templates) auch auf die Vorzüge der »anderen«
Version eingehen werden. Sie können bereits bei der Installation festlegen, welche Version Sie beziehen. Dies hängt dabei aber zum Großteil davon ab, wie Sie
Tripwire nutzen (lizenzpolitisch).
Sandini Bib
206
4.1.1
4 Filesystem Integrity Checker
Allgemeine Vorteile
Das Kuriose an Tripwire ist, dass es eigentlich über sein Ziel hinausschießt (im absolut positiven Sinne). Wie wir bereits erfahren haben, war das Ziel der Entwickler ein Programm zu schaffen, das es einem ermöglicht, den aktuellen Sicherheitsstand unseres Systems daran zu erkennen, ob bestimmte (von uns angegebene)
Charakteristika verändert wurden oder sich noch im gewünschten Zustand befinden. Dieses System bringt aber noch einige andere Vorteile mit sich. So erleichtert Tripwire das Entfernen schlecht geschriebener Software enorm. Ein weiterer
großer Vorteil wird dem Programm im Bereich der aktiven Beweissicherung
nachgesagt. Ohne mich zu weit aus dem Fenster lehnen zu wollen (ich muss zugeben, ich hatte nur einige, wenige Vorlesungen während meines Studiums, die
sich um Computerrecht oder Ähnliches gedreht haben), könnte die Signatur einer
One-Way-Hash-Funktion durchaus als Beweismittel vor Gericht dienen. Da aber
zumeist der Angreifer nicht in der Lage ist, den finanziellen Schaden, den er
durch seinen Angriff angerichtet hat, zu begleichen, erscheint es wohl sinnvoller,
diese Datei der Versicherung zu mailen.
4.1.2
Konfigurationsaufwand
Nachdem wir nun die geplanten und nicht geplanten Features von Tripwire kennen, ist es wohl an der Zeit, den Verwaltungs- und Konfigurationsaufwand dieser
Software zu besprechen. Da Tripwire ein statisches System ist, müssen Sie sich jedes Mal mit der Konfiguration beschäftigen, sobald Sie Software hinzufügen oder
entfernen. Das heißt, dass auf Testrechnern und ähnlichen Systemen Tripwire
nichts zu suchen hat. Da aber die Softwarekonfiguration auf den meisten kritischen Serversystemen nicht wöchentlich geändert wird, sollten Sie sich um den
Konfigurationsaufwand keine allzu großen Gedanken machen, da dieser im Vergleich zum Nutzen ein gerne in Kauf genommenes kleines Übel darstellt.
4.1.3
Installation
Wie immer sollten Sie sich die aktuelle Version von Tripwire aus einer sicheren
Quelle wie der Buchseite oder bevorzugt von den offiziellen Tripwireseiten, welche Sie in der folgenden Auflistung finden, herunterladen:
http://www.cs.purdue.edu/coast
http://www.tripwiresecurity.com
Nachdem Sie die Echtheit Ihres Pakets überprüft haben, können Sie es ohne
Bedenken installieren.
Linux:~# rpm –ivh tripwire-version-i.386.rpm
Sandini Bib
4.1 Tripwire
207
Wie ich zu Beginn bereits erwähnt habe, werde ich Ihnen Tripwire anhand der
ACR vorstellen. Falls Sie sich schon länger mit Tripwire beschäftigen, werden Sie
sicherlich wissen, dass sich in letzter Zeit einiges in Sachen Vermarktung, Open
Source etc. getan hat. Wer mehr über die Geschichte von Tripwire wissen möchte,
kann dazu mehr unter folgender Adresse finden:
http://www.forbes.com/tool/html/toolbox.htm
Wer daran interessiert ist, an der Entwicklung von Tripwire teilzuhaben, kann
sich bei Sourceforge Informationen dazu besorgen:
http://sourceforge.net/projects/tripwire
Wer die aktuellen Binaries beziehen will, kann dies natürlich auch per Internet tun:
http://www.tripwire.org
Jetzt sollten Sie alle wichtigen Adressen und Informationen erhalten haben, um
sich die richtige Version zu beschaffen, und wir können guten Gewissens starten.
4.1.4
Konfigurationsdatei
Die Konfigurationsdatei tw.config bildet das Herzstück von Tripwire. An sich ist
die Syntax leicht zu verstehen und zu erlernen. Falls Sie aber vorhaben tw.config
für mehrere Hosts, die unterschiedliche Betriebssysteme fahren, einzusetzen,
kann die Syntax schnell sehr komplex werden. Aber keine Angst, wir werden mit
einer einfachen Konfiguration einsteigen, so dass Sie sich ganz langsam an die
Syntax und ihre Tücken gewöhnen können.
Tripwire bietet eine Vielzahl an Optionen, die es einem ermöglichen, Daten oder
ganze Verzeichnisse (auch rekursiv) zu überwachen. Um einen einfachen Weg zu
bieten, auch plattformabhängige Charakteristika eines Dateisystems in die Überwachung nahtlos einschließen zu können, hat man sich dazu entschlossen, die
Konfigurationsdatei ähnlich einer Liste aufzubauen. Die Grundsyntax hierbei
sieht folgendermaßen aus:
[!|=] Objekt [Auswahlmaske] [Kommentar]
Kommentare
Vorab möchte ich gleich auf die Kommentare eingehen. Wie bei vielen anderen
Skriptsprachen und wie bei den meisten Konfigurationsdateien leiten Sie einen
Kommentar mit dem #-Zeichen ein, wobei auch hier die Zeichen und Anweisungen hinter dem Kommentarzeichen ignoriert werden.
Objekte und Operatoren
Objekte in Tripwire stellen entweder Dateien oder ganze Verzeichnisse dar.
Wenn Sie sich die Syntax von tw.config nochmals ansehen, werden Sie bemerken,
Sandini Bib
208
4 Filesystem Integrity Checker
dass Sie optional die Operatoren ! und = einsetzen können. Ich möchte Ihnen zuerst den =-Operator anhand eines Beispieles vorstellen:
# Beispielfragment aus tw.config
.
= /mail
L
.
Das hier aufgeführte Codefragment weist Tripwire an, dass es zwar die Inode des
Verzeichnisses /mail überwachen soll, aber nicht den Inhalt dieses Verzeichnisses.
Das heißt, Sie werden zum Beispiel über die Erstellung oder das Löschen von Dateien informiert, aber nicht über die betroffenen Objekte oder die Art der Veränderungen. Dies ist eine äußerst ressourcensparende Option, da sich der Inhalt der
Verzeichnisse wie /mail, /tmp und /var/spool im Regelfall sehr oft ändert.
Falls Sie keinen Operator verwenden, werden Sie zusätzlich über die Art der Veränderungen und die betroffenen Objekte informiert.
Das nächste Codefragment zeigt die Verwendung des !-Operators, der es Ihnen
erlaubt, bestimmte Objekte aus der Überwachung auszuschließen. Diese Option
ist für Verzeichnisse wie /dev äußerst nützlich. Sie sollten aber grundsätzlich darauf verzichten, da jede Verwendung des Stopp–Operators möglicherweise auf
Kosten der Sicherheit geht.
# Beispielfragment aus tw.config
.
!/dev
.
.
Bevor wir den Abschnitt über Objekte abschließen, möchte ich Sie noch darauf
hinweisen, dass Sie unbedingt die Dateisystemgrenzen beachten müssen. Sind
zum Beispiel /joey und /joey/aga Mountpunkte für zwei Partitionen und Sie wollen
das Verzeichnis /joey komplett überwachen, so müssen beide Pfade separat aufgeführt werden.
Selection masks / select-flags
Wir haben gesehen, dass Sie mit den verfügbaren Operatoren die Möglichkeit haben, die Überwachung in groben Zügen einzuschränken. Tripwire bietet aber
eine weitaus tiefer gehende und feinere Methode, um Abstimmungen über die
vorzunehmende Überwachung zu treffen. Mit den so genannten Selection masks
oder Select-flags (hier scheiden sich die Geister, wenn es um die korrekte Betitelung dieser Option geht) haben Sie die Möglichkeit eine konkrete Eigenschaft des
zugeordneten Objekts zu kennzeichnen. Welche Eigenschaft Sie dabei wählen
können, hängt zum Großteil vom Dateisystem (EXT2 hat sich als Quasistandard
etabliert) ab. Welche Selection Masks Ihnen grundsätzlich in Linux unter EXT2
Sandini Bib
4.1 Tripwire
209
zur Verfügung stehen, sehen Sie in Tabelle 4.1. Über die sinnvolle Implementierung anhand einiger Codefragmente und eventuelle Alternativen werden wir uns
im Anschluss Gedanken machen.
Selection Mask
Bericht
Beschreibung
P
st_mode
Ausführungsmodi (SUID-Bit, SGID-Bit und Text-Bit)
und Zugriffsrechte
I
st_ino
Inodenummer. Allgemeines zu Inodenummern finden
Sie in Kapitel 1. Normalerweise wird durch Schreiben
und Lesen einer Datei die Inodenummer nicht verändert. Findet Tripwire dennoch eine Veränderung, so
kann man daraus schließen, dass das betroffene Objekt
gelöscht oder durch eine Datei mit anderem Inhalt, aber
selbem Namen ersetzt wurde.
N
st_nlink
Link-Count. Repräsentiert die Anzahl der Links (keine
dynamischen, sondern ausschließlich Hardlinks) und
Unterverzeichnisse. Im Falle von Verzeichnissen gibt
der Zähler (Counter) die Anzahl der zugehörigen Unterverzeichnisse an. Im Falle einer einfachen Datei die
Anzahl der mit der Inode verbundenen Links. Der Zähler erhöht sich bei jedem Hardlink auf die zugehörige
Datenzone.
U
st_uid
UID. Benutzer ID
G
st_gid
GID. Gruppen ID
S
st_size
File size. Eine sehr wichtige Mask, da Veränderungen
wichtiger Dateien meistens mit einer Änderung der
Dateigröße einhergehen.
A
st_atime
Access timestamp. Auf der Jagd nach Crackern erweist
sich diese Mask als äußerst hilfreich, da ihr Wert bereits
beim Betrachten bzw. beim Einlesen einer Datei geändert wird. Sie sollten diese Datei mit keiner Mask verwenden, die zur Berechnung des Werts die Datei einlesen muss (zum Beispiel Signaturberechnung).
M
st_mtime
Modification-timestamp. Dieses Feld wird geändert,
falls eine Datei verändert und mit den Veränderungen
gesichert wird.
C
st_ctime
Inode-change-timestamp. Diese Mask gibt den Wert der
letzen Statusänderung zurück. Dies entspricht dem letzten Schreibzugriff auf die Inode (zum Beispiel, wenn die
Zugriffsrechte einer Datei geändert wurden).
T
Object Type
Dateityp
Tabelle 4.1 Verfügbare Selection-Masks
Sandini Bib
210
4 Filesystem Integrity Checker
Selection Mask
Bericht
Beschreibung
D
Device Nr.
Beim Partitionieren sind mit einer speziellen Kennzahl
versehen, welche Aufschluss über die Art der Formatierung gibt. Diese Mask stellt sicher, dass diese Kennzahl
(neben anderen Merkmalen) in die Referenzdatenbank
eingetragen wird, von der die Inode des dazugehörigen
Objekts stammt.
I
Size
Vorab ist zu dieser Mask zu sagen, dass sie unter ASR nur
in Verbindung mit einer anderen Selection-Mask als
Template (werden wir später noch genauer besprechen)
zur Verfügung steht. Anders als die Mask s, die bei jeder
Veränderung der Dateigröße »anspringt«, erfolgt bei dieser Mask nur eine Meldung, falls eine Datei verkleinert
wurde. Diese Mask sollte man auf Logfiles ansetzen, da
diese von Eindringlingen gerne verändert werden.
R
File Device Nr.
Diese Mask ist nur für Gerätedateien verfügbar und
bezeichnet die Gerätetreibernummer, die mit der dazugehörigen Inode verbunden ist.
B
Blocks
Steht für die Anzahl der Datenblöcke (für EXT2 typischerweise 1024 Bit), die durch die Zonenzeiger der
Inode belegt werden.
Tabelle 4.1 Verfügbare Selection-Masks (Forts.)
Nachdem Sie nun einige der Selection-Mask kennen gelernt haben, wollen wir uns
mit den verfügbaren Algorithmen beschäftigen. Die Wahl des Algorithmus ist von
großer Bedeutung und von vielen Faktoren abhängig. Denn was hilft Ihnen ein absolut sicheres System (was es ja sowieso nicht geben kann, außer Sie schalten den
Rechner aus), wenn die Performance so gering ist, dass eine Bedienung nahezu unmöglich ist. In Tabelle 4.2 finden Sie die in Tripwire verfügbaren Algorithmen mit
einigen durchaus hilfreichen Bemerkungen. Das Feld »Geschwindigkeit« kann die
Werte 1 bis 8 einnehmen, wobei 1 der schnellste Algorithmus ist und 8 der langsamste. Das Feld »Sicherheit« kann zwischen 1 und 5 variieren, wobei Algorithmen, die den Wert 5 zugewiesen bekamen, die sichersten darstellen.
Beachten Sie dabei, dass auch die Auswahl des Algorithmus mit Hilfe der Selection-Masks zu treffen ist.
Mask
Algorithmus
Geschwindigkeit
Sicherheit
Beschreibung
0
-
-
-
null signature
1
MD5
5
5
Message Digest 5 Algorithmus, sicherer, aber
auch langsamer als sein Vorgänger
Tabelle 4.2 Algorithmen
Sandini Bib
4.1 Tripwire
211
Mask
Algorithmus
Geschwindigkeit
Sicherheit
Beschreibung
2
Snefru
7
4
Langsamer, aber als sicher geltender Algorithmus
3
CRC-32
4
2
Ursprünglich gedacht zur Erkennung von
hardwarebedingten Übertragungsfehlern.
Sollte bei sicherheitskritischen Systemen
nicht verwendet werden.
4
CRC-16
1
1
Siehe Beschreibung zu CRC-32. Absolut
schneller Algorithmus, der in Sachen
Geschwindigkeit seinesgleichen sucht!
Sollte aber bei sicherheitskritischen Serversystemen nicht eingesetzt werden.
5
MD4
2
3
Sehr beliebt bei RISC Systemen, da er auch
sehr schnell ist. Sollte aber auf keinen Fall
eingesetzt werden.
6
MD2
8
4
Ist noch auf 8 Bit Prozessortechnik ausgelegt und von daher ungemein langsam.
Obwohl er als sicher gilt, sollte er aufgrund der mangelnden Geschwindigkeit
nicht eingesetzt werden.
7
SHA
6
5
Ist mit MD4 verwandt. Obwohl – wie Sie
vielleicht wissen – einige Gerüchte im
Raum stehen, dass dieser Algorithmus
eine nicht dokumentierte Sicherheitslücke
besitzt, können Sie ihn meiner Ansicht
nach bedenkenlos einsetzen (die NASA
tut es ja auch).
8
Haval
3
4
Bietet 15 unterschiedliche Varianten für
praktische Anwendungen, ist sicher und
schnell. Kann durchaus für sicherheitskritische Systeme eingesetzt werden.
Tabelle 4.2 Algorithmen (Forts.)
Verwendung von Select-Masks
Der einfachste Weg, um eine vollständige Beschreibung aller interessanten Eigenschaften eines Objekts zu bekommen, besteht darin, alle dafür nötigen Masks aneinander zu reihen. Dabei haben Sie die Möglichkeit mit zwei weiteren Operatoren (+ und -) bestimmte Masks explizit aus- bzw. einzuschließen. Dabei müssen
Sie beachten, dass die von uns verwendete Version ASR alle nicht ausdrücklich
ausgeschlossenen Masks (Sie können bestimmte Masks mit Hilfe des –-Operators
ausschließen) in die Überwachung einschließt. Falls Sie sich an dieser Stelle fragen, wofür dann der +-Operator zu gebrauchen sein sollte, haben Sie bitte noch
etwas Geduld. Sie werden es im Abschnitt über Templates erfahren.
Sandini Bib
212
4 Filesystem Integrity Checker
Da das eben erwähnte »Feature« in den Manpages nur schlecht bis überhaupt
nicht beschrieben ist, werden wir uns anhand einiger Beispiele noch tiefer in die
Materie einarbeiten. Im folgenden Listing finden Sie einige Auswahlmasken, die
trotz völlig unterschiedlicher Syntax genau dasselbe bewirken.
/joey/aj +ug-n
/joey/aj –n
/joey/aj +piuagsmc123456789-n
Wie Sie aus dem Listing entnehmen können, ist aus Ihrem Wunsch, nur die UID
und GID ohne die Anzahl der Hardlinks zu überwachen, nichts geworden, da
Tripwire automatisch alle nicht explizit ausgeschlossenen Masks einbezieht. Um
zu erreichen, dass wirklich nur die UID und die GID angezeigt werden, müssen
Sie folgende Auswahlmaske benutzen:
/joey/aj +ug-pinsamc123456789
oder
/joey/aj –pinsamc123456789
Templates
Im vorhergehenden Abschnitt haben Sie gesehen, wie man eine Auswahlmaske definiert und welche Eigenheiten Sie dabei beachten müssen. Wie Sie sich gut vorstellen können, kann es durchaus vorkommen, dass Sie bei solch langen Masken Fehler
machen. Um diese Fehlerquelle teilweise zu beseitigen, haben Sie die Möglichkeit so
genannte Templates zu verwenden. Dies sind vordefinierte Auswahlmasken, die es
Ihnen ermöglichen, oft genutzte Auswahlschemata mit nur einem Buchstaben zu
initialisieren. In Tabelle 4.3 sind die verfügbaren Templates zu sehen.
Template
Äquivalent
Beschreibung
R
+pinugsm12-ac3456789
Read-Only. Dateien sind allgemein verfügbar, dürfen
aber nur gelesen werden. (Defaultwert)
L
+pinug-sacm123456789
Log file. Verzeichnisse und Dateien, die sich ständig
verändern
N
+pinugsamc123456789
Ignore-Nothing. Nichts ignorieren. Alle Masken sind
aktiv.
E
-pinugsamc123456789
Ignore-Everything. Alles ignorieren. Hier werden nur
hinzugefügte oder gelöschte Objekte ausgewiesen.
>
+pinug-samc123456789
Growing-File. Gut geeignet für Logdateien, die zwar
wachsen dürfen, aber deren Größe nicht abnehmen darf.
Device
+pugsdr-intlbamcCMSH Dateien, die Tripwire nicht öffnen darf (Gerätedateien)
Tabelle 4.3 Verfügbare Templates
Sandini Bib
4.1 Tripwire
213
Eine Konfigurationsdatei für das gesamte Netzwerk
Nachdem Sie nun wissen, welche Möglichkeiten beim Designen der tw.config zur
Verfügung stehen, sollten Sie sich Gedanken machen wie Sie Ihr Netzwerk schützen. Denn – wie wir alle wissen – der Computer ist nichts, da das Netzwerk alles
ist. Und da ein solches – von IBM gepriesenes – Netzwerk aus vielen Computern
besteht, ist es an der Zeit, über die Möglichkeiten zu sprechen, die Sie haben, um
Tripwire zentral zu konfigurieren, das heißt, wie Sie die Konfigurationsdatei verfassen, so dass Sie damit alle Rechner in Ihrem Netzwerk überprüfen und verwalten können. Natürlich können Sie auch auf jedem Rechner eine eigene tw.config
anlegen, doch dies bedeutet einen enormen Aufwand bei der Verwaltung.
Tripwire bietet uns dafür die Preprocessor-Syntax, deren Befehle mit einem doppelten @ (@@) initialisiert werden. Tabelle 4.4 beinhaltet die verfügbaren Optionen
hierfür.
Argument
Beschreibung
@@ifhost hostname
Wahr, wenn hostname mit uname –n oder hostname übereinstimmt. Wenn der Wert wahr zurückgegeben wird, werden alle
Anweisungen bis zum nächsten @@endif oder @@else ausgeführt.
@@ifnhost hostname
Wahr, wenn hostname mit uname –n oder hostname nicht übereinstimmt. Wenn der Wert wahr zurückgegeben wird, werden alle
Anweisungen bis zum nächsten @@endif oder @@else ausgeführt.
@@else
Wird ausgeführt, falls @@ifhost, @@ifnhost, @@ifdef oder
@@ifndef den Wert falsch zurückgeben
@@ifdef Variable
Gibt den Wert true zurück, wenn die Variable definiert ist
@@ifndef Variable
Gibt den Wert true zurück, wenn die Variable nicht definiert ist
@@endif
Schließt das @@if* Statement
@@define Variable
String
Weist der Variable einen String zu, falls kein String angegeben
wird, so wird der Null-String zugewiesen
@@undef Variable
Variable ist nicht weiter definiert
@@include Pfadname
Zieht die Datei, die unter dem angegebenen Pfadnamen liegt, mit
ein. Diese Datei muss dieselbe Konfigurationssyntax haben.
@@Variable
Weist den String, der in Variable gespeichert ist zu.
@@{Variable}
Selbe Beschreibung wie das zuvor aufgeführte Argument
||
Logisches ODER
&&
Logisches UND
Tabelle 4.4 Preprozessoren unter Tripwire
Um Ihnen die Syntax näher zu bringen, habe ich im Folgenden einige Beispiele
für Sie vorbereitet. Ich werde die einzelnen Schritte direkt im Code anhand von
Kommentaren beschreiben.
Sandini Bib
214
4 Filesystem Integrity Checker
# Tripwire Konfigurationsdatei mit Preprocessoren
#
# Die erste Zeile aendert das Template READ (R) so ab, dass
anstelle
# der Selection-Masks # 7 und 8 die Masks 1 und 2 verwendet
werden.
@@define READ R+78-12
#
# Da wir ein Netzwerk mit vielen unterschiedlichen
Betriebssystemen
# haben, brauchen wir
# fuer jedes OS eigene Auswahlmasken. Wir werden Tripwire nun
# "sagen" welche Hosts welches Betriebssystem fahren.
# Als Erstes weisen wir den Rechnern joey, roland, grassl das OS
# Linux zu.
#
@@ifhost joey || roland || grassl
@@define LINUX
@@endif
#
# Nun weisen wir den Rechnern aga, aj, bill das OS MS Windows zu.
#
@@ifhost aga || aj || bill
@@define WINDOWS
@@endif
#
# Natürlich haben wir auch einige Solarisserver im Haus
#
@@ifhost angelus || woodstock
@@define SOLARIS
@@endif
#
# Die restlichen Computer in unserem Netzwerk fahren IRIX
#
@@ifndef SOLARIS
@@ifndef LINUX
@@ifndef WINDOWS
@@define IRIX
@@endif
@@endif
@@endif
@@endif
#
# Jetzt kommen wir zum eigentlichen Start von Tripwire
#
# Fuer Linux haben wir eine eigene Konfigurationsdatei unter
# /usr/local/tripwire/etc/tw.config.linux angelegt.
#
@@ifdef LINUX
Sandini Bib
4.1 Tripwire
215
@@include /usr/local/tripwire/etc/tw.config.linux
@@else
.
#
# Hier lasse ich einen Großteil der Syntax weg, da Sie die
# Argumente darin bereits kennen.
#
.
@@endif
.
@@ifdef SOLARIS
.
#
# Jetzt definieren wir noch unsere eigenen Variablen und weisen
# ihnen Selection Masks zu
#
@@define privat E
@@define geheim R
/home/joey @@private
/root/online-banking @@geheim
.
.
@@endif
.
.
Ich hoffe, dieses Beispiel hat Ihnen weiter geholfen und Sie sehen sich nun in der
Lage eine eigene zentrale Konfigurationsdatei zu entwerfen.
4.1.5
Funktionsweise
Bevor wir uns näher mit den einzelnen Befehlen von Tripwire auseinander setzen
können, sollten wir uns zuerst mit der Funktionsweise dieses Tools beschäftigen.
Man kann diese Prozedur in drei Phasen unterteilen:
1. Initialisierung
2. Integritätstest
3. Updatemodus
4. Wir werden nun kurz auf die einzelnen Phasen eingehen und deren Nutzen
und Funktionen erläutern.
Initialisierung
Bei der Initialisierung wird auf Basis der Konfigurationsdatei (tw.config) eine
Referenzdatenbank erstellt, welche – wie wir ja bereits besprochen haben – eine
Beschreibung der sicherheitsrelevanten Objekte des betroffenen Systems bzw.
Sandini Bib
216
4 Filesystem Integrity Checker
des betroffenen Netzwerks enthält. Diese Beschreibung ergibt sich aus der Auswahlmaskendefinition, die Sie mit Hilfe der Selection-Masks erstellen.
Die dabei erstellte Referenzdatenbank (welche im ASCII Format erstellt wird)
müssen Sie nach der Initialisierung auf jeden Fall noch in ein anderes Verzeichnis
verschieben. Genaueres dazu werden Sie bei der Besprechung der einzelnen Argumente für den Tripwire-Befehl finden.
Beachten Sie bitte, dass Ihr System bei der Initialisierung frei von jeglichen bösartigen Fremdkörpern, die nichts in Ihrem System zu suchen haben, ist. Am besten geeignet dafür ist selbstverständlich ein frisch aufgesetztes System; da dies in
der Realität natürlich kaum zu bewerkstelligen ist, sollten Sie durch manuelle
Überprüfung einiger systemkritischer Dateien (wie inetd.conf bzw. xinetd.conf
oder passwd) sicherstellen, dass sich das System in einem sicheren Zustand befindet.
Die Syntax für die Initialisierung werden Sie nach der Besprechung der Funktionsweise erhalten.
Integritätstest
Diese Phase stellt die eigentliche Systemüberprüfung dar. Auch hierbei wird eine
Datenbank auf Basis der Konfigurationsdatei erstellt, welche den aktuellen Stand
des Dateisystems widerspiegelt. Der erste Vergleich mit der Referenzdatenbank
liefert dabei folgende Informationen:
Anzahl der gescannten Dateien
Anzahl der hinzugefügten Dateien
Anzahl der gelöschten Dateien
Der folgende genaue Vergleich wendet dann die von Ihnen definierten Auswahlmasken an und gibt Ihnen die Anzahl der noch übrig bleibenden Dateien zurück.
Das heißt: Anfangs werden alle Änderungen im System angezeigt, aber nach Anwendung der Regeln zeigt Ihnen Tripwire, ob bei diesen Änderungen Dateien oder
Attribute betroffen sind, die Sie durch Ihre Auswahlmasken spezifiziert haben.
Die Bildschirmausgabe eines Integritätstests, der keine gefährlichen Änderungen an
den Dateien, die in tw.config spezifiziert sind, ausweist, sieht folgendermaßen aus:
Linux:~# tripwire
### Phase 1:
Reading configuration file
### Phase 2:
Generating file list
### Phase 3:
Creating file information database
### Phase 4:
Searching for inconsistencies
###
###
Total files scanned:
231
###
Files added:
0
###
Files deleted:
0
Sandini Bib
4.1 Tripwire
###
###
###
###
###
217
Files changed:
231
After applying rules:
Changes discarded:
Changes remaining:
231
0
Dem aufgeführten Listing können Sie entnehmen, dass 231 Dateien geändert
wurden, aber dass keine dieser Änderungen auf eine Auswahlmaske zutrifft.
Updatemodus
Falls Sie eines Tages bemerken, dass der Integritätstest von Tripwire eine Veränderung anspricht, die von Ihnen gewollt wurde, ist es an der Zeit, die Referenzdatenbank auf den neuesten Stand zu bringen, da Tripwire diesen »Missstand«
ansonsten bei jedem Durchgang erneut bemängeln würde.
Diese Option erlaubt es Ihnen aber auch, Ihre Konfigurationsdatei zu verändern,
ohne dabei eine komplette Reinitialisierung veranlassen zu müssen. Sie werden
zu diesem Befehl im folgenden Abschnitt mehr erfahren.
4.1.6
Die Tripwire-Befehle
Dieser Abschnitt beschäftigt sich mit den verfügbaren Tripwire-Befehlen, die Ihnen beim Umgang und bei der Pflege Ihres Systems zur Seite stehen. Bevor wir
die einzelnen Optionen dazu besprechen, möchte ich Sie darauf hinweisen, dass
das eigentliche Tripwire-Programm (also der Integritätstest) aufgerufen wird,
falls Sie der Konsole nur den Programmnamen übergeben.
Linux:~# tripwire
Sie haben ja bereits bei der Besprechung der Funktionsweise gesehen, wie die
Bildschirmausgabe aussehen sollte, falls »nennenswerte« Änderungen auftraten
(sprich, wenn Ihre Auswahlmasken nicht berührt wurden). Nun werden wir uns
damit beschäftigen, wie Tripwire die Ausgabe gestaltet, falls eine Auswahlmaske
betroffen wurde.
Wir haben dazu der Datei /joey/neu/test eine Zeile hinzugefügt, und da Tripwire in
der Konfigurationsdatei die Maske erhielt, dass diese Datei nicht verändert, sondern nur gelesen werden darf, wird der Integritätstest eine Inkonsistenz bemerken und diese auch anzeigen:
Linux:~# tripwire
### Phase 1:
Reading configuration file
### Phase 2:
Generating file list
### Phase 3:
Creating file information database
### Phase 4:
Searching for inconsistencies
###
Sandini Bib
218
4 Filesystem Integrity Checker
###
Total files scanned:
232
###
Files added:
0
###
Files deleted:
0
###
Files changed:
232
###
###
After applying rules:
###
Changes discarded:
231
###
Changes remaining:
1
###
changed: -rw-r—r—joey
18 Jun 25 19:50:40 2001 /joey/neu/test
### Phase 5:
Generating observed/expected pairs for changed
files
###
### Attr
Observed (what it is)
Expected (what it should be)
### ======== =========================
============================
/joey/neu/test
st_ino:
137046
136996
st_size:
18
6
st_mtime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
st_ctime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
md5 (sig1):
1oDgYoDDEL.5g2tFr9W.Nm
2kwNorphIYEyAtMnhMr:kIa
snefru (sig2):2.ZirbrL3ZN289TyymBJ5H
27shvz29Wzo.DeyYN38no9
Wie Sie aus dem Listing gut entnehmen können, hat Tripwire die Änderung an
unserer Datei bemerkt und uns sofort darüber informiert.
Neben dem Integritätsaufruf bietet Tripwire aber noch einige zusätzliche Optionen, welche wir nun besprechen werden:
Initialisierung
Sie kennen diese Option bereits aus der Besprechung der Funktionsweise. Wir
werden sie aber an dieser Stelle trotzdem nochmals ausführlich besprechen.
Diese Option werden Sie nicht sehr häufig benutzen, da Sie im späteren Systemlauf durch die Updatefunktion zum Großteil ersetzt werden kann. Sie kommen
aber nicht drum herum, die Funktion zum Start Ihres Tripwiresystems zu benutzen, da Sie damit die Referenzdatenbank erstellen. Sie rufen diese Funktion wie
folgt auf:
Linux:~# tripwire –initialize
Nachdem Sie den Befehl eingegeben haben, erhalten Sie folgende Bildschirmausgabe:
### Warning:
###
### Phase 1:
creating ./databases directory!
Reading configuration file
Sandini Bib
4.1 Tripwire
219
### Phase 2:
Generating file list
### Phase 3:
Creating file information database
###
### Warning:
Database file placed in ./databases/
tw.db_rechnername
###
###
Make sure to move this file and the configuration
###
to secure media!
###
###
(Tripwire expects to find it in ‘/etc/tw’.)
Wie Sie der Bildschirmausgabe entnehmen können, erstellt Tripwire ein Verzeichnis
namens databases im Verzeichnis, in dem Sie sich beim Aufruf des Befehls befunden
haben. Dort speichert es die Datenbank unter dem Namen tw.rechnername (wobei
rechnername durch den Rechnernamen Ihres Systems zu ersetzen ist). Danach werden Sie aufgefordert die Datenbank und die Konfiguration auf ein sicheres Medium
zu speichern. Sie erhalten zusätzlich den Hinweis, dass Tripwire die Datenbank in
dem Verzeichnis /etc/tw vermutet. Sie sollten – falls Sie sich dazu entscheiden, die
Datenbank in diesem Verzeichnis aufzubewahren – das Read-Only-Flag für dieses
Verzeichnis setzen. Eine weitaus sicherere Methode wäre es aber, die Datenbank auf
eine CD zu brennen, da bei dieser Methode definitiv keine Änderungen daran vorgenommen werden können (Falls ein Angreifer Rootrechte erlangt, könnte er das
Read-Only-Flag für das Verzeichnis problemlos wieder entfernen.) Vergessen Sie
bei dieser Methode aber nicht die CD auf /etc/tw zu mounten.
Wir werden uns im weiteren Verlauf dieses Kapitels noch intensiver mit der Sicherung der Datenbank beschäftigen. Fürs Erste denke ich aber, dass Sie alles Nötige wissen.
Updatemodus
Auch diese Option kennen Sie bereits aus der Besprechung der Funktionsweise
von Tripwire. Um Ihnen die Vorteile und Möglichkeiten diese Option näher zu
bringen, werde ich ein Beispiel aus dem alltäglichen Administratorleben benutzen (dieses Beispiel ist zwar etwas stupide, aber es erfüllt seinen Zweck):
Nehmen wir an, Sie bemerken (beziehungsweise der Tripwire-Integritätstest bemerkt dies bei einem seiner Scandurchläufe), dass ein von Ihrem Unternehmen
entwickelter Server namens fishd als changed dargestellt wird (Ursache dafür
könnte sein, dass Sie Tripwire gesagt haben, dass die Größe dieser Datei stets
gleich bleiben muss). Nachdem Sie sich mit Entwicklern in Ihrem Hause unterhalten haben, kommen Sie zum Ergebnis, dass dieser Vorfall völlig legitim war (ihre
Entwickler haben etwas Code hinzugefügt und deshalb wurde die Datei größer).
Natürlich sollte man das auch Tripwire mitteilen, da es ansonsten bei jedem Scandurchlauf diesen Missstand anzeigen wird. Ein Weg, um dieses Problem zu lösen,
ist eine komplett neue Referenzdatenbank zu erstellen. Das ist aber eher der
Sandini Bib
220
4 Filesystem Integrity Checker
»grobe« Weg. Tripwire bietet einen viel eleganteren Modus, um bestimmte Änderungen wirksam zu machen.
Mit dem Updatemodus können Sie schnell und einfach die Änderung des Servers
in die Referenzdatenbank aufnehmen, so dass auch Tripwire über die neue Größe
der Datei Bescheid weiß.
Da der Server unter /usr/sbin liegt und die Datei fishd heißt, ergibt sich folgender
Befehl:
Linux:~# tripwire –update /usr/sbin /usr/sbin/fishd
Nachdem Sie den Befehl eingegeben haben, werden Sie folgende Bildschirmausgabe erhalten, welche Sie über die Aktualisierung informiert:
### Phase 1:
Reading configuration file
### Phase 2:
Generating file list
Updating: update entry: /usr/sbin
Updating: update file: /usr/sbin/fishd
### Phase 3:
Updating file information database
###
### Old database file will be moved to ‘tw.rechnername.old’
###
in ./databases
###
### Update database will be stored in ‘./databases/tw.rechnername’
###
(Tripwire expects it to be moved to ‘/etc/tw’.)
###
Wie Sie sehen können, wird die alte Datenbank zu tw.rechnername.old umbenannt
und eine neue Referenzdatenbank mit den aktualisierten Informationen erstellt,
welche Sie wieder in das angegebene Verzeichnis verschieben müssen.
Automatische Aktualisierung
Diese – durchaus brauchbare und praktische – Funktion ist mit Vorsicht zu genießen. Sie haben in den vorhergehenden Abschnitten gesehen, in welchen Schritten
ein Integritätstest und ein nötiges Update eines Eintrages ablaufen:
1. Tripwire-Integritätstest
2. Bericht über Änderung an Objekt
3. eventuelle Aktualisierung der Datenbank
4. Im Grunde bietet die Funktion, die wir jetzt besprechen, die Möglichkeit all
diese Schritte durch einen einzigen Befehl zu bewerkstelligen. Sie lassen also
Tripwire nach Inkonsistenten in Ihrem Dateisystem suchen, erhalten danach
einen Bericht über mögliche Treffer und können die betroffenen Objekte und
Felder sofort aktualisieren. Auf den ersten Blick eine sehr praktische Funktion. Doch sie hat zwei entscheidende Nachteile:
Sandini Bib
4.1 Tripwire
221
Der Administrator muss bei jedem Integritätstest anwesend sein, um mögliche
Aktualisierungen vornehmen zu können. Bei einem normalen Test ist dies
nicht notwendig. Der Systemverwalter könnte die Bildschirmausgabe zum
Beispiel in eine Datei umleiten, die er sich dann automatisch zuschicken lässt,
oder er könnte diese Datei mit einem Skript auf Inkonsistenten untersuchen
und, falls eine Gefahrenquelle entdeckt wurde, könnte dieses Skript den Administrator automatisch per E-Mail oder SMS (mit Hilfe des Pakets yaps) über
die Lage benachrichtigen.
Man wird leichtfertig und vergibt Updates schneller und leichter, als man dies
täte, wenn man sie per Hand eingeben müsste.
Sie müssen also selbst entscheiden, was für Sie am besten geeignet ist. Seien Sie
aber vorsichtig damit und machen Sie lieber einige Handgriffe mehr.
Nachdem wir jetzt die Funktion kennen, können wir uns mit der Bildschirmausgabe, die wir bei einer gefunden Inkonsistenz (wir benutzen dafür wieder unsere
Datei test aus dem vorhergehenden Beispiel) erhalten, beschäftigen. Der Aufruf
dieser Funktion geschieht über folgenden Befehl:
Linux:~# tripwire –interactive
Und hier die dadurch entstehende Bildschirmausgabe:
### Phase 1:
Reading configuration file
### Phase 2:
Generating file list
### Phase 3:
Creating file information database
### Phase 4:
Searching for inconsistencies
###
###
Total files scanned:
232
###
Files added:
0
###
Files deleted:
0
###
Files changed:
232
###
###
After applying rules:
###
Changes discarded:
231
###
Changes remaining:
1
###
changed: -rw-r—r—joey
18 Jun 25 19:50:40 2001 /joey/neu/test
### Phase 5:
Generating observed/expected pairs for changed
files
###
### Attr
Observed (what it is)
Expected (what it should be)
### ======== =========================
============================
/joey/neu/test
st_ino:
137046
136996
st_size:
18
6
st_mtime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
Sandini Bib
222
4 Filesystem Integrity Checker
st_ctime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
md5 (sig1):
1oDgYoDDEL.5g2tFr9W.Nm
2kwNorphIYEyAtMnhMr:kIa
----> File: ‘/joey/neu/test’
----> Update entry
[YN(y)nh?]
Updating entry : /joey/neu/test
### Updating database...
###
### Phase 1:
Reading configuration file
### Phase 2:
Generating file list
Updating: update entry: /joey/neu/test
### Phase 3:
Updating file information database
###
### Old database file will be move to ‘tw.rechnername.old’
###
in ./databases
###
### Updated database will be stored in ‘./databases/
tw.rechnername’
###
(Tripwire expects it to be moved to ‘/etc/tw’.)
###
###
### If you changed the tw.config file, remember to run
### ‘twdb_check.pl’ to ensure database consistency.
### See the README file for details
Anhand dieses Listings können Sie gut erkennen, wie einfach es einem gestressten Systemverwalter gemacht wird, bestimmte Einträge zu aktualisieren.
Wie Sie sehen können, läuft der Integritätstest genauso ab wie beim normalen
Aufruf von Tripwire. Doch am Ende des Tests werden Sie gefragt, ob Sie die auffälligen Einträge aktualisieren wollen. Dabei stehen Ihnen grundsätzlich drei Optionen zur Verfügung.
1. Nein (Nn)
2. Ja (Yy und Defaultwert, falls Sie keine Angabe machen)
3. Aufruf einer kleinen Hilfefunktion (h?)
4. An Punkt zwei können Sie eine weitere Tücke erkennen. Falls Sie keine Angaben über die Aktualisierung eines Eintrages machen, so kommt der Defaultwert zum Zuge, der ein Update des Eintrages initialisiert.
5. Nachdem Sie Tripwire mitgeteilt haben, welche Einträge Sie aktualisieren
möchten, erhalten Sie dieselben Ausgaben wie beim normalen Updatemodus.
Mit einem Unterschied:
6. Sie werden darauf hingewiesen, das Skript twdb_check.pl aufzurufen, um die
Datenbank zu überprüfen. Mit Hilfe dieses Befehls (er sollte sich bei der
Installation automatisch nach /usr/sbin kopieren) können Sie die Integrität der
Sandini Bib
4.1 Tripwire
223
Datenbank testen. Die Syntax ist – wie Sie sehen – einfach:
twdb_check.pl <tw.db_rechnername> <tw.config>
Test–tuning
Wenn Sie Tripwire nutzen wollen, um sehr große Datenmengen zu überprüfen,
merken Sie bald, dass jeder Test viel Rechenzeit verschlingt und eine gewisse Zeit
bis zur Abarbeitung benötigt. Tripwire bietet Ihnen mit der --ignore-Funktion
ein Hilfsmittel, um schnelle Tests durchzuführen. Doch auch dieses Bonbon ist
mit Vorsicht zu genießen, da die Funktion den Performancegewinn durch das
Ausblenden bestimmter spezifizierter Auswahlmasken erreicht, was wiederum
zu einem enormen Informationsverlust führen kann. Es wäre aber durchaus
denkbar, dass Sie zum Beispiel täglich einen kompletten Integritätstest durchführen und sich bei der stündlichen Überprüfung Ihres Systems auf die abgespeckte
Variante verlassen. Der Aufruf dieser Funktion erfolgt über folgende Syntax:
Linux:~# tripwire –-ignore Selection Mask
Falls diese Funktion bei Ihnen nicht funktioniert, haben Sie Möglichkeit (außer
bei den brandneuen Versionen) auf die Funktion loosedir auszuweichen, die
grundsätzlich ähnliche Vorteile bietet. Sie können aber dabei (im Gegensatz zu
ignore) selbst bestimmen, welche Masken Sie ignorieren wollen. Es werden automatisch folgende Flags ausgeblendet:
st_size
st_nlinks
st_mtime
st_ino
Auch hier erfolgt der Aufruf in gewohnter Manier:
Linux: tripwire –loosedir
Die Bildschirmausgabe, die Sie dabei erhalten, unterscheidet sich nicht von der eines normalen Integritätstests und wird daher nicht extra aufgeführt.
Alternative Datenbank
Falls Sie mehrere Datenbanken auf Ihrem System gespeichert haben, können Sie
auch eine alternative Datenbank spezifizieren. Tripwire wird dann diese anstatt
der Datenbank, die sich in dem Defaultverzeichnis befindet, verwenden.
Der Aufruf erfolgt über folgende Syntax:
Linux:~# tripwire –-dbfile Datenbank
Sandini Bib
224
4 Filesystem Integrity Checker
Auch hier führen wir die Alternative für andere Systeme (Versionen) auf:
Linux:~# tripwire –d Datenbank
Alternative Konfigurationsdatei
Neben einer alternativen Datenbank können Sie bei Tripwire auch eine alternative Konfigurationsdatei angeben, die dann anstelle der Konfigurationsdatei,
welche sich im Defaultverzeichnis befindet, verwendet wird.
Der Aufruf verbirgt auch bei dieser Funktion keine großen Überraschungen:
Linux:~# tripwire –-cfgfile Konfigurationsdatei
Auch hier führen wir die Alternative für andere Systeme (Versionen) auf:
Linux:~# tripwire –c Konfigurationsdatei
Datenbank aus File Descriptor lesen
Eine äußerst praktische und ressourcensparende Methode, ideal für Verschlüsselung und Packen. Die Syntax ist auch hier sehr einfach gehalten:
Linux:~# tripwire –dfd Open File Descriptor
Konfigurationsdatei aus File Descriptor lesen
Sie haben auch die Möglichkeit, die Konfigurationsdatei aus einem File Descriptor zu lesen. Die Syntax ist den bereits bekannten Befehlen sehr ähnlich:
Linux:~# tripwire –cfd Open File Discriptor
Variablen definieren
Sie haben ja bereits eine Möglichkeit kennen gelernt, um Variablen zu definieren.
Außer dem Preprocessor @@define gibt es aber noch einen anderen Weg, das zu erledigen. Sie können mit dem Befehl –Dvar eine Variable als String definieren. Die
Initialisierung und Bildschirmausgabe können Sie im folgenden Listing ersehen:
Linux:~# tripwire –Dvar=string
Zum besseren Verständnis werfen Sie einen Blick auf die Bildschirmausgabe:
Linux:~# tripwire –DOS=LINUX
### Phase 1:
Reading configuration file
### Phase 2:
Generating file list
### Phase 3:
Creating file information database
### Phase 4:
Searching for inconsistencies
###
###
Total files scanned:
232
###
Files added:
0
###
Files deleted:
0
Sandini Bib
4.1 Tripwire
225
###
Files changed:
232
###
###
After applying rules:
###
Changes discarded:
231
###
Changes remaining:
1
###
changed: -rw-r—r—joey
18 Jun 25 19:50:40 2001 /joey/neu/test
### Phase 5:
Generating observed/expected pairs for changed
files
###
### Attr
Observed (what it is)
Expected (what it should be)
### ======== =========================
============================
.
.
.
Wie Sie der Initialisierung entnehmen können, haben Sie mit diesem Befehl die
Möglichkeit einer Variable einen bestimmten Wert zuzuweisen. Nachdem Sie das
getan haben, wird die Initialisierung – mit der neuen Variable – wie gewohnt
durchgeführt.
Variablendefinition rückgängig machen
Nachdem Sie nun einen Weg gesehen haben, der es Ihnen erlaubt, Variablen von
der Konsole aus zu definieren, werden Sie jetzt das Gegenstück dazu kennen lernen, mit dem Sie die Möglichkeit haben, definierte Variablen zu »un-definieren«
(sprich die Definition der Variable rückgängig zu machen):
Linux:~# tripwire –Uvar
Auch hier ein kleiner Ausschnitt aus der Bildschirmausgabe:
Linux:~# tripwire –UOS
### Phase 1:
Reading configuration file
### Phase 2:
Generating file list
### Phase 3:
Creating file information database
### Phase 4:
Searching for inconsistencies
###
###
Total files scanned:
232
###
Files added:
0
.
.
.
Genauso wie bei der Definition bestimmter Variablen wird bei diesem Befehl der
Integritätstest wie gewohnt durchgeführt.
Sandini Bib
226
4 Filesystem Integrity Checker
Signaturtest unterbinden
Es kann durchaus Situationen im Leben eines Administrators geben, bei denen er
einen schnellen Integritätstest braucht. Wir haben ja bereits einige Möglichkeiten
gesehen, wie man dies erreichen kann. Einer der leichtesten Wege den Test zu beschleunigen ist, nur eine oder wenige Signaturen anfertigen zu lassen (ein stabiler, aussagekräftiger und sicherer Integritätstest benutzt mehrere Algorithmen,
um die Signatur zu bestimmen). Das folgende Listing zeigt die Signaturbestimmung unserer beliebten Datei test durch die Algorithmen MD5 und snefru.
.
.
.
### Attr
Observed (what it is)
Expected (what it should be)
### ======== =========================
============================
/joey/neu/test
st_ino:
137046
136996
st_size:
18
6
st_mtime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
st_ctime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
md5 (sig1):
1oDgYoDDEL.5g2tFr9W.Nm
2kwNorphIYEyAtMnhMr:kIa
snefru (sig2):2.ZirbrL3ZN289TyymBJ5H
27shvz29Wzo.DeyYN38no9
Natürlich braucht der Rechner einige Zeit, bis er die zu bestimmenden Signaturen
berechnet hat, wie bereits erwähnt, können Sie Tripwire dazu bringen, bestimmte
Signaturberechnungen zu übergehen. Der Befehl hierfür muss lauten:
Linux:~# tripwire –i Algorithmen
Falls Sie mehrere Algorithmen übergehen möchten, müssen Sie diese durch Kommas voneinander trennen. Das folgende Listing zeigt die Bildschirmausgabe, die
wir erhalten, wenn wir wollen, dass nur durch snefru eine Signatur berechnet
wird. Die MD5–Berechnung soll also wegfallen.
Linux:~# tripwire –i 1
.
.
.
### Attr
Observed (what it is)
Expected (what it should be)
### ======== =========================
============================
/joey/neu/test
st_ino:
137046
136996
st_size:
18
6
st_mtime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
st_ctime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
snefru (sig2):2.ZirbrL3ZN289TyymBJ5H
27shvz29Wzo.DeyYN38no9
Sandini Bib
4.1 Tripwire
227
Wie Sie sehen können, wurde die MD5–Berechnung nicht ausgeführt und der
Vorgang beschleunigt. Falls Sie wollen, dass überhaupt keine Signaturberechnung durchgeführt wird, können Sie dies mit folgendem Befehl verwirklichen:
Linux:~# tripwire –i all
Die Bildschirmausgabe hierzu lautet:
.
.
.
### Attr
Observed (what it is)
Expected (what it should be)
### ======== =========================
============================
/joey/neu/test
st_ino:
137046
136996
st_size:
18
6
st_mtime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
st_ctime:
Mon Jun 25 19:50:40:2001
Mon Jun 25 19:49:31 2001
Durch die Eingabe des oben aufgeführten Befehls wurde keine Signaturberechnung durchgeführt.
Konfiguration testen
Mit der folgenden Funktion haben Sie die Möglichkeit Ihre Konfiguration zu testen,
da bei diesem Befehl nur ein »preprocess« der Konfigurationsdatei zu machen und
diese dann auf die Standardausgabe zu werfen ist. Der Aufruf dieses Befehls lautet:
Linux:~# tripwire –E
oder
Linux:~# tripwire –preprocess
Minimaler Output
Falls Sie das Output eines Integritätstests nicht in eine Datei zur Weiterverarbeitung durch ein Skript geben, kann es sehr lästig sein, wenn viele Anomalien entdeckt wurden, da die Ausgabe dadurch enorm lang wird. Abhilfe schafft der hier
vorgestellte Befehl, da er Tripwire veranlasst jeweils nur eine Zeile pro geänderter Datei auszugeben. Der Aufruf erfolgt über folgenden Befehl:
Linux:~# tripwire –q
Falls das bei Ihnen nicht funktioniert, versuchen Sie bitte folgende Alternative
(diese Option hat zwar nicht exakt dieselben Eigenschaften, aber sie schränkt
ebenfalls die Ausgabe ein):
Linux:~# tripwire –quiet
Sandini Bib
228
4 Filesystem Integrity Checker
Maximaler Output
Mit dem Verbose Modus haben Sie die Möglichkeit alle von Tripwire gescannten
Dateien auf die Standardausgabe werfen zu lassen. Falls Ihnen diese Option sinnlos erscheint, bedenken Sie, dass sie bei der Fehlersuche enorm hilfreich sein
kann. Stellen Sie sich dazu einfach vor, Sie haben die Vermutung, dass Tripwire –
aus irgendwelchen Gründen– die Datei /joey/neu/test2 nicht scannt. Mit dem Verbose Modus können Sie dies leicht überprüfen. Leiten Sie dazu die Ausgabe des
Verbose Modus einfach in eine Datei um. Danach gehen Sie in das betreffende
Verzeichnis (/joey/neu) und geben dort den find-Befehl ein, dessen Ausgabe Sie
wiederum in eine Datei umleiten. Danach benutzen Sie den diff-Befehl, um zu
sehen, ob Tripwire die Datei test2 wirklich nicht scannt.
Hilfe über Inodes
Falls Sie mehr über die Inodes erfahren wollen, können Sie diesen Befehl benutzen:
Linux:~# tripwire –help
Versionsnummer ausgeben lassen
Um sich die Versionsnummer ausgeben zu lassen, benutzen Sie bitte folgenden
Befehl:
Linux:~# tripwire –version
4.1.7
Schutz der Datenbank
Nach der Lektüre des bisherigen Kapitels sollten Sie fit im Umgang mit Tripwire
sein. Bevor ich Sie aber »aus diesem Kurs entlassen« kann, möchte ich noch ein
Wort über die Datenbank und den Schutz dafür verlieren.
Wir haben bereits bei der Initialisierung gesehen, dass Ihnen Tripwire vorschlägt,
die Datenbank auf ein sicheres (READ-ONLY) Medium zu verfrachten. Ich möchte
Ihnen hierbei auch ans Herz legen, dies ernst zu nehmen. Dabei ist es wichtig,
dass das Medium selbst die READ-ONLY Flag gesetzt hat, das heißt, die READ-ONLYFlag sollte physikalisch und nicht logisch sein. Denn logischerweise kann jede logische Barriere durch logisches Handeln wieder aufgehoben oder zumindest umgangen werden. Mein Vorschlag (ich weiß, ich wiederhole mich bei diesem
Punkt, aber er ist wirklich wichtig) ist daher, die Datenbank auf eine CD zu brennen, diese CD in ein CD-Rom bzw. ein DVD-Rom zu legen und ins Dateisystem
einzuhängen. Zusätzlich zu diesem Schutz können Sie mit dem Tripwire–Tool
siggen die Signatur der Datenbank überprüfen (praktisch, wenn Sie keinen lokalen Zugriff auf die CD-Rom haben und sie theoretisch unbemerkt ausgewechselt
werden könnte). Die Handhabung dieses Tools ist einfach.
Sandini Bib
4.1 Tripwire
229
Nachdem Sie die Datenbank erstellt und auf die CD gebrannt haben, wenden Sie das
Tool an, um die Signatur zu berechnen. Danach können Sie ein Skript schreiben, welches durch einen Croneintrag täglich überprüft, ob sich die Signatur und damit die
Authentizität der Datenbank geändert hat. Dies mag etwas paranoid erscheinen,
bietet aber einen ziemlich sicheren Weg, um Angreifern wieder eine Barriere mehr in
den Weg zu stellen. Die Syntax für das siggen-Tool lautet wie folgt:
Linux:~# siggen –Option Konfigurationsdatei
Tabelle 4.5 enthält alle verfügbaren Optionen zu siggen.
Option
Beschreibung
-h
Gibt die Signatur hexadezimal anstatt base 64 aus
-q
Gibt alle Signaturen in einer Zeile aus und lässt somit weitergehende
Informationen weg
-a
Es werden alle Signaturen berechnet (Defaultwert)
-v
Verbose Modus (Defaultwert)
-0
Berechnet 0 Signatur
-1
Berechnet MD5 Signatur
-2
Berechnet snefru Signatur
-3
Berechnet CRC 32 Signatur
-4
Berechnet CRC 16 Signatur
-5
Berechnet MD4 Signatur
-6
Berechnet MD2 Signatur
-7
Berechnet SHA Signatur
-8
Berechnet Haval Signatur
-9
Berechnet 0 Signatur (Reserviert für zukünftigen Gebrauch)
Tabelle 4.5 Verfügbare Optionen für siggen
Um den Abschnitt über Tripwire endgültig abzuschließen, können Sie die Verwendung von siggen anhand des folgenden Listings einsehen:
Linux:~# siggen /etc/tw/tw.linux
sig0: nullsig: 0
sig1: md5
: 1UESQLg04KTxCswAXxnkr
sig2: snefru : 1pdbqHak2P42KbnlsyEcqA
sig3: crc32 : 17UDxV
sig4: crc16 : 000EJQ
sig5: md4
: 0jUn3uxIMxJ2gTe.:pIeoB
sig6: md2
: 1j9rITQBzWsFqgjV.9Qmdq
sig7: sha
: 677qhN468Wvtzpuhvw4IZaptiLV
sig8: haval : 0v5vAv59leWQm4b0UxGMH9
sig9: nullsig: 0
Sandini Bib
230
4.2
4 Filesystem Integrity Checker
MD5Sum
Wenn es um die Installation eines Tools ging, habe ich im Laufe des Buches sehr
oft gesagt, dass Sie die Herkunft des Programms genau überprüfen sollen. Außerdem habe ich Ihnen des Öfteren ans Herz gelegt, dass Sie das frisch heruntergeladene Tool auf Echtheit hin überprüfen.
Zumeist wird dafür auf den Downloadseiten eine MD5-Checksum angeboten.
Wir werden in diesem Abschnitt des Buches nun das Tool besprechen, mit dem
Sie 128-Bit-Prüfsummen leicht überprüfen können.
4.2.1
Syntax
Da dieses Tool nicht weiter beschrieben werden muss, können wir uns sofort mit
der zu verwendenden Syntax beschäftigen.
Aufruf
Der allgemeine Aufruf dieses Programms lautet wie folgt:
Linux:~# md5sum [Optionen] Datei
Falls Sie keine Datei oder den Platzhalter »-« stattdessen angeben, liest MD5sum
von der Standardeingabe (STDIN).
Optionen
Da dieses Tool alles andere als schwer zu bedienen ist, werden wir uns sofort mit
den verfügbaren Optionen, die Sie in Tabelle 4.6 erkennen können, beschäftigen.
Option
Beschreibung
-b, --binary
Hiermit werden alle Eingabedateien als Binarydateien behandelt. Für uns
Linuxbenutzer spielt diese Option keine große Rolle, da UNIX-Systeme nicht
zwischen Textdateien und Binaries unterscheiden.
--status
Diese Option ist nur dann sinnvoll, wenn Sie Checksummen überprüfen.
-t, --text
Hiermit werden alle Binarydateien als Textfiles behandelt. Diese Option ist
das Gegenstück zur Option »--binary«.
-w, --warn
Wenn Checksummen überprüft werden, wird bei nicht richtig formatierten
MD5-Checksummen gewarnt.
Diese Option kann sehr hilfreich sein, wenn alle Checksummen mit einigen
wenigen Ausnahmen als gültig erkannt wurden.
Tabelle 4.6 Verfügbare Optionen
Sandini Bib
5 Verschlüsselung
Der Begriff Verschlüsselung hat wohl zusammen mit dem Ausdruck Firewall die
Securitybranche in den letzten Jahren geprägt. Jede wichtige Datei wird mehr
oder weniger sicher verschlüsselt oder gehashed. Wir wollen uns in diesem Kapitel nicht mit der Theorie der Verschlüsselung oder mit zur Verfügung stehenden
Algorithmen beschäftigen. Es geht uns hauptsächlich darum, die wichtigsten
Tools, die es in diesem Sektor gibt, kurz vorzustellen und Ihnen die Möglichkeiten dieser Programme näher zu bringen.
5.1
Gnu PG (GPG)
GPG ist die Open-Source-Alternative zu dem weit verbreiteten E-Mail- und Dateiverschlüsselungsprogramm PGP. Bis vor kurzem hatte dieses geniale Tool aber
einen entscheidenden Nachteil.
Da keine eigene Bibliothek vorhanden war, war es für Entwickler äußerst mühselig die Funktionen (Verschlüsselung nach dem Public-Key-Verfahren) in eigenen
Programmen verfügbar zu machen. Seit GPGME ist dies aber kein Problem mehr.
5.1.1
Funktionsweise
GPG arbeitet – wie PGP auch – nach dem Public-Key-Verfahren. Im Gegensatz zu
einer »normalen« Verschlüsselung, bei der der Absender die zu sendende Nachricht mit demselben Schlüssel verschlüsselt, mit dem auch der Empfänger die
Nachricht wieder entschlüsselt, bringt dieses Verfahren, da es zwei Schlüssel benutzt, enorme Sicherheitsvorteile.
Wie Sie sich denken können, hat die »normale« Verschlüsselung mit nur einem
Schlüssel eine große Sicherheitslücke, da hierbei der Schlüssel auf einem – potentiell unsicheren – Kommunikationsweg (zum Beispiel E-Mail) verschickt werden
muss. Ist es einem Angreifer möglich, diese E-Mail abzufangen, kann er die folgende – geheime – Kommunikation der beiden beteiligten Seiten problemlos entschlüsseln und mit verfolgen.
Anders sieht die Sache aus, wenn sich die beiden Partner entschlossen haben, das
Public-Key-Verfahren zu verwenden. Dort läuft der Kommunikationsvorgang
folgendermaßen ab:
Der Absender besorgt sich den öffentlichen Schlüssel des Empfängers (Website,
E-Mail usw.). Danach verschlüsselt er die abzusendende Nachricht mit diesem
Schlüssel. Auf dem Weg zum Empfänger wird diese Nachricht ebenfalls von einem Angreifer abgefangen, der – genauso wie der Absender – den öffentlichen
Schlüssel des Benutzers besitzt. Beim Versuch, die abgefangene Mail zu ent-
Sandini Bib
232
5 Verschlüsselung
schlüsseln, hat der Angreifer aber wenig Erfolg, da sich die Nachricht nicht mit
dem öffentlichen Schlüssel entschlüsseln lässt. Dies ist nur mit dem privaten
Schlüssel möglich, den – idealerweise – nur der Empfänger besitzt. Außerdem ist
es nicht möglich, aus dem öffentlichen Schlüssel den privaten abzuleiten.
Wie Sie sehen, ist das Public-Key-Verfahren relativ sicher. Aber auch diese
Methode hat eine potentielle Schwachstelle.
Nehmen wir an, unser Angreifer weiß, dass User A User B seinen öffentlichen
Schlüssel schicken will, damit sie eine sichere Datenkommunikation initiieren
können. Falls es dem Angreifer nun gelingt, die E-Mail von A an B abzufangen, ist
er im Besitz des öffentlichen Schlüssels. Wir haben ja bereits gesehen, dass dies
noch kein Grund zur Sorge ist, er kann die Nachrichten immer noch nicht entschlüsseln, denn dafür braucht er den privaten Schlüssel. Auf den ersten Blick besteht der einzige Nachteil darin, dass User B die E-Mail nicht bekommen hat. Dies
ist aber auch nicht weiter tragisch, er kann sie ja erneut anfordern. Schlimm wird
es erst, wenn der Angreifer die ursprüngliche E-Mail von User A an B modifiziert
und damit den originalen öffentlichen Schlüssel mit einem von ihm generierten
Schlüssel austauscht und danach an User B weiterleitet. User B antwortet auf
diese Mail und bestätigt dabei User A, dass er den öffentlichen Schlüssel erhalten
hat. Beide User denken, dass alles in Ordnung ist, und beginnen mit der Übertragung der sensiblen Daten. Der gewiefte Angreifer fängt nun aber jede E-Mail ab
entschlüsselt sie und leitet Sie – modifiziert – an die jeweiligen Kommunikationspartner weiter. Weder A noch B werden merken, dass sie Opfer eines Angriffs
wurden.
Aber auch hierfür bietet GPG Abhilfe. GPG (und auch PGP) lassen es zu, öffentliche Schlüssel unterschreiben zu lassen. Diese Unterschriften sollen dem Empfänger zeigen, dass der Schlüssel auch zu der richtigen Person passt. Man sollte natürlich die Leute, die unterschrieben haben, kennen und ihnen auch vertrauen.
5.1.2
Installation
Als sicherheitsinteressierter Administrator haben Sie sicher die Probleme mit der
Ausfuhr von PGP aus den USA in andere Länder mitbekommen. Falls nicht,
möchte ich Sie bitten die dementsprechenden Berichte auf der Buchseite zu lesen,
da das Buch hier dafür nicht der geeignete Rahmen ist.
Durch die erwähnten Probleme (Kryptographie ist den Vereinigten Staaten Rüstungsgut) können Sie sich GPG (wie auch PGP) nicht von amerikanischen Servern
downloaden. Da es aber genügend europäische Server gibt, stellt dies definitiv
kein Problem dar. Es ist auch nicht strafbar, wenn Sie GPG in die USA einführen.
Besorgen Sie sich eine aktuelle und stabile Version von der Buchseite oder offiziellen Seite www.gnupg.org (Sie können auch im Paketverzeichnis Ihrer Distribu-
Sandini Bib
5.1 Gnu PG (GPG)
233
tion nachschauen, die meisten führen das Paket). Sie haben dabei die Auswahl
aus drei Paketen:
1. Debian Paket
2. RedHat RPM
3. Source Code
4. Wir werden an dieser Stelle die Installation der Pakete eins und zwei besprechen.
RedHat RPM
Das easy-to-use-Paket RPM sollte keine allzu großen Schwierigkeiten bereiten,
daher werden wir nur den Aufruf anführen:
Linux:~# gnupg-version.rpm
Und schon ist das Paket installiert!
Source Code
Vom gepackten Paket bis zum fertig kompilierten und installierten Programm
sind es nur fünf Schritte, die Sie im Folgenden sehen werden.
Linux:~# tar -xfz gnupg-version.tar.gz
Linux:~# cd gnupg-version
Linux:~# ./configure
Linux:~# make
Linux:~# make install
Falls Sie GPG mit anderen Optionen kompilieren wollen, sind dementsprechende
Änderungen vorzunehmen.
Nachdem Sie das Paket nun installiert haben, können wir uns daran machen, dieses wirklich gute Tool genau zu besprechen. Ich werde an dieser Stelle aber zwei
Besprechungen anbieten.
1. Die erste Besprechung wird anhand des Mini-Howtos auf der offiziellen
Gnupgp Seite stattfinden. Dort werden Sie sehen, wie Sie mit wenigen und
nicht komplizierten Schritten die wichtigsten Features von GPG sinnvoll nutzen können.
2. Die zweite Besprechung ist eher eine Referenz als eine Besprechung. Ich
werde versuchen Ihnen alle möglichen Optionen und Features dieses
umfangreichen Programms aufzuzählen und näher zu bringen.
Sandini Bib
234
5.1.3
5 Verschlüsselung
Besprechung 1 (Howto)
In dieser Besprechung werden Sie erfahren, wie Sie mit wenig Aufwand viel erreichen können. Falls Sie aber alle Features von GPG nutzen wollen, schlage ich
Ihnen vor einen Blick auf Besprechung Nummer 2 zu werfen. Dort finden Sie alle
verfügbaren Optionen und Argumente.
Hinweis zur Sprache der Listings
Die von mir verwendete Version von GPG unterstützt die deutsche Sprache. Falls
Sie aber eine andere Version benutzen, werden die Listings möglicherweise in
Englisch ausgeworfen. Ich möchte hierbei betonen, dass die Ausgaben der Listings nicht von mir übersetzt worden sind, sondern zum Bestandteil der von mir
verwendeten Distribution von GPG gehören.
Schlüssel
Wie Sie bereits bei der Besprechung erfahren haben, brauchen Sie für die Verund Entschlüsselung Ihrer E-Mails zwei Schlüssel:
1. einen öffentlichen
2. einen privaten
Schlüsselpaar erzeugen
Um dieses Schlüsselpaar zu erzeugen benutzen Sie den Befehl --gen-key
Nachdem Sie der Kommandozeile diesen Befehl übergeben haben, sollten Sie folgendes Listing erhalten:
Linux:~# gpg --gen-key
gpg (GnuPG) 1.0.6; Copyright (C) 2001 Free Software Foundation,
Inc.
This programm comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
Bitte wählen Sie, welche Art von Schlüssel Sie möchten:
(1) DSA und ELGamal (voreingestellt)
(2) DSA (nur signieren/beglaubigen)
(3) ELGamal (signieren/beglaubigen und verschlüsseln)
Ihre Auswahl?
Wie Sie sehen können, müssen Sie nun den zu verwendenden Algorithmus aussuchen. Sie sollten die Nummer 1 wählen.
Wenn Sie Ihre Auswahl getroffen haben, erhalten Sie die folgende Bildschirmausgabe:
Sandini Bib
5.1 Gnu PG (GPG)
235
.
.
.
Ihre Auswahl? 1
Der DSA Schlüssel wird 1024 Bit haben.
Es wird ein neues ELG-E Schlüsselpaar erzeugt.
kleinste Schlüssellänge ist 768 Bit
standard Schlüssellänge ist 1024 Bit
größte sinnvolle Schlüssellänge ist 2048
Welche Schlüssellänge wünschen Sie? (1024)
Jetzt ist es an der Zeit, die Schlüssellänge zu bestimmen. Dabei kann ich Ihnen leider sehr schlecht weiterhelfen. Sie sollten dabei aber beachten, dass die Länge des
Schlüssels die Sicherheit und die Performance enorm beeinträchtigen kann.
Wählen Sie zum Beispiel den kleinsten Schlüssel von 768 Bit, werden Ihre Daten
schnell verschlüsselt und Sie werden kaum einen Performanceverlust spuren. Die
Sicherheit ist bei dieser Verschlüsselungsart aber nicht allzu groß.
Setzen Sie aber auf große Sicherheit und wählen einen Schlüssel über 2000 Bit, so
werden Ihre Daten zwar sicher sein, aber die Performance wird spürbar sinken.
Sie müssen also selbst entscheiden, was für Sie und Ihre Daten wichtig ist. Falls
Sie zum Großteil Glückwunschkarten versenden, sollte es der Standardschlüssel
mit 1024 tun, falls Sie aber sensitive Daten vertreiben, ist ein Schlüssel mit 2048 Bit
geradezu ein Muss.
Wir werden an dieser Stelle eine Schlüssellänge von 1024 Bit wählen. Danach erhalten Sie eine weitere Ausgabe, die Sie auffordert weitere Daten anzugeben:
.
.
.
Welche Schlüssellänge wünschen Sie? (1024) 1024
Die verlangte Schlüssellänge beträgt 1024 Bit
Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll.
0 = Schlüssel verfällt nie
<n> = Schlüssel verfällt nach n Tagen
<n>w = Schlüssel verfällt nach n Wochen
<n>m = Schlüssel verfällt nach n Monaten
<n>y = Schlüssel verfällt nach n Jahren
Der Schlüssel bleibt wie lange gültig? (0)
Zu diesem Zeitpunkt werden Sie gefragt, wann die Gültigkeit des erstellten
Schlüssels verfallen soll. Auch diese Angabe sollten Sie wieder nach Ihren Bedürfnissen machen. Bedenken Sie dabei aber auch die Umstellungen, die bei einer
Schlüsseländerung auf Sie zukommen.
Wir wollen, dass der Schlüssel nie verfällt.
Sandini Bib
236
5 Verschlüsselung
.
.
.
Der Schlüssel bleibt wie lange gültig? (0) 0
Der Schlüssel verfällt nie.
Ist dies richtig? (j/n) j
Nachdem wir dies bestätigt haben, werden wir gebeten Informationen zu übergeben, aus denen GPG unsere Benutzer-ID erstellen wird. Eine Benutzer-ID ist notwendig, damit der Schlüssel eindeutig identifiziert werden kann. Beachten Sie die
Korrektheit der Angaben und insbesondere der E-Mail-Adresse, da damit die
komplette Benutzererkennung unterschrieben wird.
.
.
.
Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu
machen; das
Programm baut diese User-ID aus Ihrem echten Namen, einem
Kommentar und
Ihrer E-Mail-Adresse in dieser Form auf:
"Heinrich Heine (Der Dichter) heinrichh@duesseldorf.de"
Ihr Name ("Vorname Nachname"): Josef Brunner
E-Mail-Adresse: josef.brunner@triblen.de
Kommentar: freiberuflicher Sicherheitsberater und Programmierer
Sie haben diese User-ID gewählt:
"Josef Brunner (freiberuflicher Sicherheitsberater und
Programmierer) josef.brunner@triblen.de"
Ändern (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? F
Nachdem Sie die gewünschten und benötigten Angaben korrekt gemacht haben,
haben Sie die Wahl Änderungen an bestimmten Stellen vorzunehmen, falls die
Angaben aber korrekt sind, können Sie mit (F) den nächsten Schritt einleiten. Mit
der Taste (B) brechen Sie ab.
.
.
.
Ändern (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? F
Sie benötigen ein Mantra, um den geheimen Schlüssel zu schützen. Ein Mantra ist
eine Art Passphrase, das heißt es können auch Leerzeichen darin vorkommen.
Wählen Sie ein sicheres Passwort, aber bedenken Sie, dass Sie sich dieses Mantra
auch merken können müssen, da ansonsten der Schlüssel wertlos würde.
Sandini Bib
5.1 Gnu PG (GPG)
237
.
.
.
Geben Sie ein Mantra ein:
Geben Sie das Mantra nochmals ein:
Nachdem Sie dies erledigt haben, müssen Sie die gleiche Eingabe nochmals vornehmen. Stimmen die beiden Eingaben, werden die Zufallswerte erzeugt:
.
.
.
Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies
unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole
irgendetwas tippen, die Maus verwenden oder irgendwelche anderen
Programme benutzen.
++++++++++++++++.+++++++++++++.++++++++.+..+++++++++++++.+++++++++
++
++++++++++.+…..+++++++++++++++>+++++++++++++.++++++++++++++++
Es sind nicht genügend Zufallswerte vorhanden. Bitte führen Sie
andere Arbeiten durch, damit das Betriebssystem weitere Entropie
sammeln kann!
(Es werden noch weitere 275 Byte benötigt.)
Wie Sie aus dem Listing erkennen können, werden an dieser Stelle jede Menge
Zufallswerte erzeugt, wenn Sie wollen, können Sie dabei – wie beschrieben – mithelfen. Sie sollten diese Hilfestellung auf jeden Fall leisten, da dies die Dauer dieses Prozesses enorm verkürzen kann.
Nachdem das Schlüsselpaar erzeugt und signiert wurde, sollten Sie abschließend
diese Meldung bekommen:
.
.
.
Öffentlichen und geheimen Schlüssel erzeugt und signiert
Damit ist das Erstellen eines Schlüsselpaares erledigt und wir können uns weiteren Themen rund um Schlüssel in GPG widmen.
Schlüssel exportieren und zugänglich machen
Nachdem wir nun unser Schlüsselpaar erstellt haben, wäre es durchaus sinnvoll,
wenn wir diesen unter unserer Kollegenschaft verbreiten würden, so dass diese
uns Ihre sensitiven Daten verschlüsselt zukommen lassen.
Für dieses Vorhaben benutzen wir die Exportfunktion von GPG, die es uns ermöglicht, den Schlüssel »an den Mann zu bringen«. GPG stellt uns eine Vielzahl
an verschiedenen Möglichkeiten zum Export von Schlüsseln zur Verfügung, die
wir an dieser Stelle aber nicht alle besprechen können. Falls Sie Interesse an ande-
Sandini Bib
238
5 Verschlüsselung
ren Methoden haben, werfen Sie einen Blick auf die zweite Besprechung, dort
werden Sie alle verfügbaren Methoden kennen lernen.
Trotzdem möchte ich Ihnen die verfügbaren Exportmöglichkeiten kurz aufzeigen:
Export von Schlüssel nach STDOUT
Schlüssel an Schlüsselserver (keyserver) schicken
Alle Schlüssel – auch nicht OpenPGP-kompatibel – exportieren
Geheimschlüssel exportieren (gefährlich)
Wir werden uns nur mit dem normalen Export von Schlüsseln beschäftigen, da
dies wohl die am häufigsten genutzte Option darstellt.
Nehmen wir an, Sie wollen Ihren Schlüssel auf Ihrer Website zum Download (im
ASCII-Format) anbieten, so dass jeder Benutzer des Internets Ihnen eine verschlüsselte E-Mail schicken kann. Dafür wollen Sie für Ihren Schlüssel in eine Datei kopieren, welche Sie dann auf Ihren Webserver schieben. Um dies zu erreichen, geben Sie bitte die folgenden Befehle ein.
Als Erstes müssen Sie den betreffenden Schlüssel exportieren. Dafür benötigen
Sie den Namen des Schlüssels – in unserem Fall lautet dieser: Josef Brunner. Falls
Sie den Namen nicht angeben, werden alle vorhandenen Schlüssel ausgegeben.
Da Sie die Ausgabe im ASCII-Format haben wollen, müssen Sie zusätzlich die
Option -a verwenden. Zum Schluss müssen Sie die Ausgabe bloß noch in eine
Datei umleiten, die Sie dann per E-Mail verschicken können oder auf Ihren Webserver zum Download stellen.
Linux:~# gpg --export -a Josef Brunner > pub_key
Danach haben Sie eine Datei pub_key, die Ihren privaten Schlüssel enthält. Sie
hätten statt des Shelloperators > auch die Option -o [Dateiname] verwenden
können.
Linux:~# gpg --export -a -o pub_key2 Josef Brunner
Um zu verdeutlichen, dass diese beiden Methoden dasselbe Ergebnis haben, bediene ich mich des diff-Kommandos, das mehrere Dateien vergleichen kann und
einem nach dem Durchlauf die Unterschiede der beiden Dateien aufzeigt. Sollten
die Dateien pub_key und pub_key2 also nicht identisch sein, werden wir dies sofort erfahren:
Linux:~# diff pub_key pub_key2
Linux:~#
Wie Sie sehen, bekommen wir keine Meldung und können davon ausgehen, dass
die beiden Dateien und somit die beiden Methoden identisch sind.
Sandini Bib
5.1 Gnu PG (GPG)
239
Schlüssel in Schlüsselbund aufnehmen (Importieren)
Natürlich sind Sie nicht der einzige GPG der PGP User, der seinen Schlüssel exportiert. Falls Sie sich einen Schlüssel von einer Website geholt haben und nun
dem Verfasser eine E-Mail (verschlüsselt) senden wollen, sollten Sie den Schlüssel
in Ihren Schlüsselbund aufnehmen. Dies geschieht über folgenden Befehl:
Linux:~# gpg --import new_key
Danach haben Sie den neuen Schlüssel in Ihrem Schlüsselbund. Sie können sich
davon überzeugen, indem Sie sich mit dem folgenden Befehl die Schlüssel in Ihrem Schlüsselbund anzeigen lassen:
Linux:~# gpg --list-keys
Schlüssel widerrufen
Falls Sie eines Tages zu dem Schluss kommen, dass Ihr Schlüssel einer Änderung
bedarf, da er
zu klein geworden ist
in falsche Hände geriet
die UID nicht mehr stimmt
etc.
können Sie ihn widerrufen. Dafür sollten Sie sich den zu löschenden Schlüssel
vorher ansehen und genau auswählen. In unserem Fall hat uns ein Windows-Security-Administrator verlassen (ein guter Mann), aber deshalb braucht die Workstation diesen Schlüssel nicht mehr und wir widerrufen ihn. Dazu lassen wir uns
alle Schlüssel auflisten, um zu sehen, ob mehrere Schlüssel zu löschen sind (er
könnte ja mehrere Schlüssel angelegt haben):
Linux:~# gpg --list-keys
/root/.gnupg/pubring.gpg
-----------------------.
.
.
pub 1024D/75CC62B5 2001-07-14 Andreas Neut (Security Administrator
for Windows Systems) <aj@mircosoft.com>
sub 1024g/F8D34998 2001-07-14
.
.
.
Nachdem wir nun den Schlüssel eindeutig identifiziert haben, können wir ein
Schlüsselwiderrufszertifikat erstellen:
Linux:~# gpg --gen-revoke
Sandini Bib
240
5 Verschlüsselung
Dazu brauchen Sie aber den privaten Schlüssel.
Löschen können Sie den Schlüssel mit dieser Option allerdings nicht. Informationen über das Löschen von Schlüsseln finden Sie im nächsten Abschnitt.
Schlüssel anzeigen lassen
Im Schlüsselbund werden alle Informationen über Ihre Schlüssel gespeichert (bis
auf Ownertrust). Die erste Option, die ich Ihnen gerne vorstellen würde, haben
wir bereits des Öfteren benutzt, um unsere vorhandenen Schlüssel anzeigen zu
lassen (Sie finden die Ausgabe dieser Option im vorhergehenden Abschnitt):
Linux:~# gpg --list-keys
Um zusätzlich noch Informationen über die Signaturen zu bekommen, müssen
Sie diese Option verwenden:
Linux:~# gpg --list-sigs
GPG bietet Ihnen weiter an, Ihre vorhandenen Schlüssel mit den dazugehörigen
»Fingerabdrücken« anzuzeigen. Diese Fingerabdrücke können benutzt werden,
um einen Schlüssel eindeutig zu identifizieren. Dies ist ein wesentlich schnellerer
Weg, als den kompletten Schlüssel zu vergleichen (außer Sie bedienen sich eines
Befehls wie diff). Die Option für das zusätzliche Anzeigen der Fingerabdrücke
wird folgendermaßen initialisiert:
Linux:~# gpg --fingerprint
/root/.gnupg/pubring.gpg
------------------------pub
1024D/8A573357 2001-07-14 Josef Brunner (freiberuflicher
Sicherheitsberater und Programmierer) josef.brunner@triblen.de
Key fingerprint = 11BC 9622 54A1 C6AF 50A8 EC27 A3AE C9EB
8A57 3357
sub
1024g/BF49D00 200107-14
.
.
.
Um die geheimen Schlüssel aufzuzeigen, benutzen Sie bitte diese Option:
Linux:~# gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------sec
1024D/8A573357 2001-07-14 Josef Brunner (freiberuflicher
Sicherheitsberater und Programmierer) josef.brunner@triblen.de
ssb
1024g/7BF49D00 2001-07-14
Sandini Bib
5.1 Gnu PG (GPG)
241
Schlüssel löschen
Natürlich werden wir an dieser Stelle auch eine Option zum Löschen eines
Schlüssels vorstellen. Dabei müssen Sie zwischen öffentlichem und privatem
Schlüssel unterscheiden.
Falls Sie einen öffentlichen Schlüssel löschen wollen, gehen Sie bitte folgendermaßen vor:
Linux:~# gpg --delete-key [UID]
Für einen privaten Schlüssel müssen Sie folgende Option an GPG übergeben:
Linux:~# gpg --delete-secret-key [UID]
Schlüssel editieren
Natürlich können Sie die Werte und Informationen eines Schlüssels auch editieren. Sie brauchen dazu lediglich diesen Befehl zu benutzen:
Linux:~# gpg --edit-key [UID]
Danach öffnet sich ein Menü (folgendes Listing) und Sie müssen den Editierungsbefehl spezifizieren.
Linux:~# gpg --edit-key [UID]
gpg (GnuPG) 1.0.6; Copyright (C) 2001 Free Software Foundation, Inc.
This program comes with ABSOLUTLY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
Secret key is available.
pub 1024D/8A573357created: 2001-07-14 expires: nevertrust: -/u
sub 1024g/7BF49D00created: 2001-07-14 expires: never
(1). Josef Brunner (freiberuflicher Sicherheitsbeauftragter und
Programmierer) josef.brunner@triblen.de
Command>
Wie Sie sehen, werden Sie nach dem genauen Editierungsbefehl befragt. Tabelle
5.1 enthält die verfügbaren Befehle und gibt zu jedem Punkt eine kurze Beschreibung (falls Sie eine genauere und weiterführende Beschreibung wollen, finden
Sie diese in der zweiten Besprechung):
Befehl
Beschreibung
quit
Beendet das Menü
save
Speichert und beendet das Menü
Tabelle 5.1 Editierungsbefehle
Sandini Bib
242
5 Verschlüsselung
Befehl
Beschreibung
help
Gibt eine kurze Befehlsübersichtsliste aus
fpr
Zeigt den Fingerabdruck
list
Listet Schlüssel und User-IDs auf
uid
Wählt eine User-ID aus
key
Wählt sekundären Schlüssel aus
check
Listet Signaturen auf
sign
Unterschreibt einen Schlüssel
lsign
Unterschreibt einen Schlüssel (lokal)
adduid
Fügt eine UID hinzu
deluid
Löscht eine UID
addkey
Fügt sekundären Schlüssel hinzu
delkey
Löscht sekundären Schlüssel
delsig
Löscht Signaturen
expire
Ändert das Verfallsdatum des Schlüssels
toggle
Verbindet zwischen öffentlichem und privatem Schlüssel
pref
Listet Präferenzen auf
showpref
Listet ebenfalls Präferenzen auf
passwd
Ändert die Passphrase (Mantra bei deutschen Versionen)
trust
Ändert den Ownertrust (Sie werden im Laufe des Kapitels noch erfahren,
was ein Ownertrust ist)
revsig
Widerruft Signaturen
revkey
Widerruft einen sekundären Schlüssel
disable
Deaktiviert einen Schlüssel
enable
Aktiviert einen Schlüsse
Tabelle 5.1 Editierungsbefehle (Forts.)
Signieren und Ownertrust
Falls Sie den Abschnitt über das Editieren von Schlüsseln gelesen haben, wissen
Sie ja, wie man Schlüssel signiert. Dazu verwendet man beim Editieren den Befehl
sign. Das Unterschreiben eines Schlüssels ist sehr wichtig (siehe Einleitung zu
GPG), da dies der einzige Weg ist, sicherzugehen, den richtigen Schlüssel bekommen zu haben.
Nun wird anhand der Unterschriften und des »Ownertrusts« die Gültigkeit des
Schlüssels ermittelt. Mit dem Ownertrust legen Sie fest, ob (und wie sehr) Sie dem
Schlüsselinhaber zutrauen, andere Schlüssel korrekt und verlässlich zu unterschreiben. Dieser Ownertrust wird in einer separaten Datei gespeichert.
Sandini Bib
5.1 Gnu PG (GPG)
243
Falls Sie sich fragen, wie man den Ownertrust erkennen kann, sollten Sie einen Blick
in die vorhergegangenen Listings werfen. Dort finden Sie des Öfteren das Wort trust.
Dies steht für den Ownertrust. Wie Sie dabei weiter bemerkt haben dürften, liefert
dieses Schlüsselwort zwei Ownertrusts. Der erste steht dabei für den zugewiesenen,
der zweite für den berechneten. Ein Beispiel hierfür könnte sein:
trust: -/u
In diesem Beispiel wäre der zugewiesene Wert »-« und der berechnete »u«. Was
diese Einstufungen bedeuten, erfahren Sie aus Tabelle 5.2.
Einstufung
Bedeutung
-
Kein Ownertrust zugewiesen bzw. noch nicht berechnet.
e
Berechnung schlug fehl. Dies deutet auf einen bereits abgelaufenen Schlüssel
hin.
q
Hierbei sind für eine Berechnung nicht genügend Informationen vorhanden.
n
Vertrauen Sie diesem Schlüssel nie.
m
Nicht besonders vertrauenswürdig.
f
Vollkommen vertrauenswürdig.
u
Mit Sicherheit vertrauenswürdig.
Tabelle 5.2 Einstufungen für Ownertrust
Dateien verschlüsseln
Bevor wir uns mit den einzelnen Befehlen beschäftigen, sollten wir uns darüber
informieren, wie man den Empfänger spezifizieren kann. Dies geschieht folgendermaßen:
Linux:~# gpg --recipient [UID]
Aber auch, wenn Sie vergessen eine UID als Empfänger zu spezifizieren, ist dies
nicht arg schlimm. Wir werden dies im folgenden Szenario annehmen (bei der
Verschlüsselung der Datei).
Falls Sie eine Datei verschlüsseln wollen, ist der Aufruf dafür simpel gehalten:
Linux:~# gpg -e Empfänger [Datei]
Wir werden nun eine Datei namens important mit dem Inhalt »Wichtige Information« erstellen. Diese werden wir danach mit dem eben kennen gelernten Befehl
verschlüsseln. Dabei geben wir keinen Empfänger an.
Als Erstes müssen wir die Datei erstellen:
Linux:~# echo "Wichtige Information" > important
Sandini Bib
244
5 Verschlüsselung
Danach verschlüsseln wir diese Datei. Da wir keinen Empfänger angegeben
haben, werden wir danach gefragt.
Linux:~# gpg -e important
You did not specify a user ID. (you may use "-r")
Enter the user ID: Andreas Neut
Jetzt sollten wir eine neue Datei in unserem Verzeichnis haben, die wie die spezifizierte Datei heißt, jedoch mit der Endung gpg versehen ist. In unserem Fall haben wir also eine Datei namens important.gpg erstellt (beziehungsweiße GPG hat
diesen Job für uns erledigt). Wenn wir die Datei öffnen, werden wir sehen, dass
der Inhalt verschlüsselt wurde.
Datei entschlüsseln
Nun wollen wir die eben verschlüsselte Datei wieder entschlüsseln. Dafür müssen wir folgenden Befehl verwenden:
Linux:~# gpg -d [Datei]
Auf unser Szenario bezogen lautet der Befehl also:
Linux:~# gpg -d important.gpg > important.re
Nachdem wir diesen Befehl ausgeführt haben, sollte der Inhalt der Datei important.re dem Inhalt der ursprünglichen Datei important entsprechen. Dies wollen
wir mit dem diff-Kommando testen:
Linux:~# diff important important.re
Linux:~#
Wie Sie sehen können, sind die beiden Dateien identisch.
Signieren
Um eine Datei zu unterschreiben, können Sie folgenden Befehl verwenden.
Bedenken Sie dabei aber, dass die Datei danach nicht mehr lesbar ist.
Linux:~# gpg -s [Datei]
Ein einfaches Listing hierzu:
Linux:~# gpg -s test
You need a passphrase to unlock the secret key for
user: "Josef Brunner (freiberuflicher Sicherheitsberater und
Programmierer) <josef.brunner@triblen.de>"
1024-bit DSA key, ID 8A573357, created 2001-07-14
Enter passphrase:
Sandini Bib
5.1 Gnu PG (GPG)
245
Jetzt haben wir in unserem Verzeichnis eine Datei namens test.gpg, welche signiert und nicht mehr lesbar ist.
Signieren und Datei lesbar lassen
Wie Sie gesehen haben, ist die Datei, die wir signiert haben, nicht mehr lesbar.
Dies ist in vielen Situationen äußerst unpraktisch. In solchen Fällen sollten Sie die
jetzt vorgestellte Option für das Signieren von Dateien wählen, da diese die Datei
lesbar lässt.
Linux:~# gpg --clearsign [Datei]
Auch hierzu ein kleines Beispiel:
Linux:~# gpg --clearsign test2
You need a passphrase to unlock the secret key for
user: "Josef Brunner (freiberuflicher Sicherheitsberater und
Programmierer) <josef.brunner@triblen.de>"
1024-bit DSA key, ID 8A573357, created 2001-07-14
Enter passphrase:
Nach diesem gezeigten Listing erstellt GPG eine neue Datei namens test2.asc, welche folgenden Inhalt hat (der ursprüngliche Text in Datei war »hallo«).
-----BEGIN PGP SIGNED MESSAGE----Hash: SHA1
hallo
-----BEGIN PGP SIGNATURE----Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iEYeaRECAAYFAjtR!Z0Acgko67J64pXM1dqLQCvCrqKi5yWUlg4vqdADBvy94XdTOo
Am
gI59ju11pdyRXLSI2L677FdLVdL
=xTV3
-----END PGP SINGATURE-----
Wie Sie sehen können, ist der Inhalt immer noch problemlos lesbar.
Signatur in externe Datei
Die beiden eben gezeigten Methoden zum Signieren einer Datei eignen sich hervorragend für Textdateien, aber falls Sie ein TAR-Archiv damit signieren wollen,
sieht die Sache schon anders aus.
Für Binärdateien sollen Sie die Option benutzen, die wir jetzt kennen lernen werden. Diese Option schreibt die Signatur nicht in die Datei, die signiert werden
soll, sondern in ein externes File.
Sandini Bib
246
5 Verschlüsselung
Linux:~# gpg -b [Datei]
Auch hier werden wir uns ein kleines Szenario dazu anschauen. Als Erstes erstellen wir ein Archiv. Wir packen unsere Datei test dafür in ein Archiv namens
test.tar.
Linux:~# tar -cf test.tar test
Danach signieren wir dieses Archiv und versuchen es danach wieder zu entpacken. Falls GPG etwas in das Archiv schreiben würde, wäre das Entpacken nicht
mehr möglich.
Linux:~# gpg -b test.tar
You need a passphrase to unlock the secret key for
user: "Josef Brunner (freiberuflicher Sicherheitsberater und
Programmierer) <josef.brunner@triblen.de>"
1024-bit DSA key, ID 8A573357, created 2001-07-14
Enter passphrase:
Wenn wir nun in unser Verzeichnis schauen, finden wir dort eine Datei namens
test.tar.sig. Als Erstes wollen wir aber versuchen, das Archiv wieder zu entpacken
(Wir können vorher auch wieder unseren diff-Test vollziehen).
Linux:~# diff test.tar.sig test.tar
Linux:~#
Wie Sie sehen, sind die beiden Dateien völlig identisch, das Entpacken sollte daher kein Problem darstellen (Wir gehen dazu in ein anderes Verzeichnis, damit
wir die ursprüngliche Datei test nicht überschreiben.)
Linux:~# tar -xf test.tar
Der Blick in das Verzeichnis zeigt uns, dass das Entpacken erfolgreich war.
Verschlüsseln und Signieren
Meistens werden Sie Dateien aber nicht nur signieren, sondern auch verschlüsseln wollen. Wie dies funktioniert, haben Sie bereits kennen gelernt. Wir werden
uns den Befehl trotzdem noch einmal ins Gedächtnis rufen:
gpg [-u Absender] [-r Empfänger] -s -e [Datei]
Sie können auch hier die ASCII-Funktion --armor aktivieren.
Signatur einer unverschlüsselten Datei prüfen
Wir werden in diesem Abschnitt nur die Signaturüberprüfung einer unverschlüsselten Datei besprechen, da GPG die Signatur einer verschlüsselten Datei automatisch prüft.
Sandini Bib
5.1 Gnu PG (GPG)
247
Um die Signatur zu testen, gehen Sie wie folgt vor:
Linux:~# --verify [Datei]
Sehen wir uns zum Abschluss ein kurzes Listing dazu an:
Linux:~# gpg --verify test.gpg
gpg: Signature made Sun Jul 15 19:32:44 2001 CEST using DSA key ID
8A573357
gpg: Good signature from "Josef Brunner (freiberuflicher
Sicherheitsberater und Programmierer) <josef.brunner@triblen.de>"
Wie Sie sehen, handelt es sich um eine »good« (gute) Signatur.
Falls Sie weiterführende Informationen zu den verfügbaren Optionen wünschen,
werden Sie diese mit Sicherheit in Besprechung 2 finden. Falls nicht, können Sie
diese überspringen.
5.1.4
Besprechung 2 (Referenz)
In diesem Teil werden wir uns intensiv mit der Benutzung von GPG und mit den
verfügbaren Optionen auseinander setzen. Da es davon eine ganze Reihe gibt,
werden wir nicht allzu tief auf jeden einzelnen Punkt eingehen können. Sie werden aber jede verfügbare Option kurz beschrieben finden.
Allgemeiner Aufruf
Der allgemeine Aufruf des Programms erfolgt über diese Syntax:
Linux:~# gpg [--homedir Name] [--Optionen Datei] [Optionen] Befehl
[Argumente]
Verfügbare Befehle
Tabelle 5.3 listet alle verfügbaren Befehle auf und gibt zu jedem Punkt eine kleine
Beschreibung.
Befehl
Beschreibung
-s, --sign
Unterschreibt eine Datei. Kann mit --encrypt kombiniert werden. Datei wird danach unlesbar.
--clearsign
Unterschreibt im Klartext. Datei bleibt lesbar.
-b, --detach-sign
Unterschrift wird in externe Datei geschrieben.
-e, --encrypt
Verschlüsselt Daten. Kann mit --sign kombiniert werden.
-c, --symmetric
Verschlüsselt nur symmetrisch. Sie werden nach einer Passphrase gefragt.
Tabelle 5.3 Verfügbare Befehle
Sandini Bib
248
5 Verschlüsselung
Befehl
Beschreibung
--store
Es wird ein RFC1991 Paket erzeugt.
--decrypt [Datei]
Entschlüsselt Datei oder Zeichen aus STDIN, falls Sie keine Datei
angeben, und gibt das Ergebnis auf die Standardausgabe
(STDOUT) aus. Sie können mit der Option --output eine Datei
angeben, in die die Dateien geschrieben werden. Falls die verschlüsselte Datei unterschrieben worden ist, wird die Unterschrift ebenfalls überprüft. Diese Option nimmt keine Dateien
an, die nicht mit einer verschlüsselten Nachricht beginnen.
--verify [[Signaturdatei]
[Signaturdateien]
--verify-files [Dateien]
Dies ist eine besondere Abart des --verify-Befehls und funktioniert nicht mit detached-Signaturen.
--list-keys [Namen]
Listet alle Schlüssel auf oder nur diejenigen, die an der Kommandozeile angegeben wurden.
--list-public-keys [Namen]
Listet alle Schlüssel des öffentlichen Schlüsselbundes auf oder
nur diejenigen, die an der Kommandozeile angegeben wurden.
--list-secret-keys [Namen]
Listet alle Schlüssel des privaten Schlüsselbundes auf oder nur
diejenigen, die an der Kommandozeile angegeben wurden.
--list-sigs [Namen]
Es werden alle Schlüssel und Unterschriften aufgelistet.
--check-sigs [Namen]
Es werden alle Schlüssel aufgelistet und die Unterschriften überprüft.
--fingerprint [Namen]
Listet alle Schlüssel mit den dazugehörigen Fingerabdrücken
auf. Falls Sie diesen Befehl zweimal angeben, werden alle Fingerabdrücke der sekundären Schlüssel ausgegeben.
--list-packets
Listet nur die Sequenz der Pakete auf.
--gen-key
Hiermit können Sie ein neues Schlüsselpaar erzeugen. Für weitergehende Informationen können Sie Besprechung 1 zu Rate ziehen.
--edit-key Name
Mit diesem Befehl gelangen Sie in ein Menü, in dem Sie alle
wichtigen Editierungsaufgaben Schlüssel betreffend übernehmen können. Verfügbare Kommandos in diesem Menü sind:
Sign
Unterschreibt einen Schlüssel. Falls der Schlüssel noch nicht
vom Defaultuser unterschrieben wurde, werden die Informationen über den Schlüssel und die dazugehörigen Fingerabdrücke
erneut ausgegeben und es wird gefragt, ob der Schlüssel unterschrieben werden soll. Diese Prozedur wird für alle mit der
Option -u spezifizierten User durchgeführt.
Lsign
Diese Funktion ist im Grunde dieselbe wie die eben vorgestellte
sign-Option, mit dem Unterschied, dass die Signaturen als nonexportable gekennzeichnet werden und somit von niemand mehr
benutzt werden können. Geeignet für das lokale Netzwerk.
Tabelle 5.3 Verfügbare Befehle (Forts.)
Sandini Bib
5.1 Gnu PG (GPG)
Befehl
249
Beschreibung
revsig
Hiermit widerrufen Sie eine Signatur. Dabei wird bei jeder Signatur danach gefragt, ob ein Widerrufszertifikat erstellt werden soll.
trust
Ändert den Wert des »Ownertrust«. Für eine Beschreibung des
Ownertrust werfen Sie einen Blick in Beschreibung 1. Die trustdb wird sofort auf den neuesten Stand gebracht.
disable
Deaktiviert einen Schlüssel. Ein deaktivierter Schlüssel kann
nicht mehr für die Verschlüsselung benutzt werden.
enable
Aktiviert einen deaktivierten Schlüssel
adduid
Es wird eine alternative UID generiert.
deluid
Es wird eine bestehende UID gelöscht.
addkey
Es wird ein Subschlüssel zu diesem Schlüssel erstellt und hinzugefügt.
delkey
Ein Subschlüssel wird gelöscht.
revkey
Ein Subschlüssel wird widerrufen.
expire
Ändert das Verfallsdatum eines Schlüssels. Falls Sie keinen
Schlüssel ausgewählt haben, wird das Verfallsdatum des primären Schlüssels geändert.
passwd
Ändert die Passphrase des privaten Schlüssels.
uid n
Verbindet die ausgewählte UID mit einem Index n. Mit 0 lösen
Sie alle Bindungen.
key n
Verbindet den ausgewählten Subschlüssel mit einem Index n.
Mit 0 lösen Sie alle Bindungen.
check
Überprüft alle ausgewählten User IDs.
pref
Listet Präferenzen auf.
Tabelle 5.3 Verfügbare Befehle (Forts.)
Sandini Bib
250
Befehl
5 Verschlüsselung
Beschreibung
showpref
Listet Präferenzen mit mehr Details und mehr Informationen
auf.
toggle
Verbindet die Ausgabe der privaten und öffentlichen Schlüssel.
save
Alle Änderungen werden im Schlüsselbund gespeichert. Das
Menü wird beendet.
quit
Beendet das Menü, ohne den Schlüsselbund auf den neuesten
Stand zu bringen.
Im Folgenden sehen Sie eine Liste mit den verschiedenen Stufen
des Ownertrust.
Es wurde kein Ownertrust angegeben bzw. der Ownertrust
wurde noch nicht berechnet.
e
Die Berechnung schlug fehl. Ursache hierfür kann ein abgelaufener Schlüssel sein.
q
Nicht genug Informationen für eine Berechnung vorhanden
n
Vertrauen Sie diesem Schlüssel niemals.
m
Begrenzt glaubwürdig
f
Völlig vertrauenswürdig
u
Unbegrenzt vertrauenswürdig
Ownertrust Format:
trust zugewiesener Ownertrust/berechneter
Ownertrust
--sign-key Name
Hiermit unterschreiben Sie einen öffentlichen Schlüssel mit
Ihrem privaten Schlüssel.
--lsign-key Name
Hiermit unterschreiben Sie einen öffentlichen Schlüssel mit
Ihrem privaten Schlüssel, kennzeichnen ihn aber als non-exportable. Dies ist die Kurzversion des lsign-Kommandos mit Editionsmenü.
Tabelle 5.3 Verfügbare Befehle (Forts.)
Sandini Bib
5.1 Gnu PG (GPG)
251
Befehl
Beschreibung
--trusted-key Schlüssel ID
Mit dieser Option geben Sie dem spezifizierten Schlüssel (Sie müssen für die Spezifikation die 8 Byte Schlüssel-ID angeben) denselben Status, den Sie auch Ihren eigenen privaten Schlüsseln geben.
Das heißt, der Schlüssel wird als vollkommen vertrauenswürdig
eingestuft.
--delete-key Name
Löscht den Schlüssel aus dem öffentlichen Schlüsselbund
--delete-secret-key Name
Löscht den Schlüssel aus dem privaten und öffentlichen
Schlüsselbund
--delete-secret-and-publickey Name
Selbe Funktion wie --delete-key, mit dem Unterschied, dass,
falls ein privater Schlüssel existiert, dieser zuerst gelöscht wird
--gen-revoke
Erstellt ein Widerrufszertifikat für den kompletten Schlüssel.
Um einen Subschlüssel oder eine Signatur zu löschen, müssen
Sie die --edit-Option benutzen.
--export Namen
Falls Sie keine Schlüsselnamen angeben, werden alle Schlüssel
aus dem Schlüsselbund (Defaultschlüsselbunde und die, die Sie
mit der --keyring-Option angegeben haben) exportiert. Falls
Sie aber einen oder mehrere Namen angeben, werden diese
Schlüssel exportiert. Der dabei entstehende Schlüsselbund wird
auf die Standardausgabe weitergeleitet. Falls Sie diese Schlüssel
mailen wollen, sollten Sie die --armor-Option benutzen, um sie
im ASCII-Format zu erstellen und anzuzeigen.
--send-keys Namen
Im Grunde dieselbe Option wie --export, mit dem Unterschied, dass die Schlüssel zu einem Schlüsselserver geschickt
werden. Dabei müssen Sie mit der Option --keyserver einen
Schlüsselserver spezifizieren. Schicken Sie nicht alle Ihre Schlüssel zu diesem Server, sondern nur diejenigen, die neu sind oder
die Sie geändert haben.
--export-all Namen
Eigentlich dieselbe Funktion wie --export, mit dem Unterschied, dass auch Schlüssel, die nicht mit OpenPGP kompatibel
sind, exportiert werden
--export-secret-keys
Namen
Funktioniert wie die --export-Funktion, hierbei werden aber
anstatt der öffentlichen die privaten Schlüssel exportiert. Sie sollten mit dieser Funktion sehr vorsichtig sein!
--export-secret-subkeys
Namen
Rändert den privaten und geheimen Teil des privaten Schlüssels. Andere Programme (außer GNU OpenPGP) können diesen
Schlüssel nicht wieder importieren.
--import Dateien
Importiert Schlüssel. Mit dieser Funktion fügen Sie die spezifizierten Schlüssel Ihrem Schlüsselbund hinzu. Es wird eine trustdb erstellt.
Sie können die Funktionsweise dieser Option durch folgende
Optionen verändern und beeinträchtigen:
--merge-only (Fügt Schlüssel nicht in den Schlüsselbund ein)
--allow-secret-key-import
Tabelle 5.3 Verfügbare Befehle (Forts.)
Sandini Bib
252
5 Verschlüsselung
Befehl
Beschreibung
--fast-import Dateien
Importiert Schlüssel schneller als die Option --import. Mit dieser
Funktion fügen Sie die spezifizierten Schlüssel Ihrem Schlüsselbund hinzu. Es wird keine trust-db erstellt.
Sie können die Funktionsweise dieser Option durch folgende
Optionen verändern und beeinträchtigen:
--merge-only (Fügt Schlüssel nicht in den Schlüsselbund ein)
--allow-secret-key-import
--recv-keys Schlüssel IDs
Importiert die Schlüssel mit der spezifizierten ID von einem
HKP-Schlüsselserver. Sie müssen zusätzlich die Option --keyserver benutzen, um einen Schlüsselserver zu spezifizieren.
--export-ownertrust
Zeigt den angegebenen Ownertrust im ASCII-Format an. Nützlich für Backupzwecke.
--import-ownertrust
Dateien
Hiermit wird die trust-db mit den Ownertrustwerten, die sich in
der angegebenen Datei bzw. Dateien befinden, auf den neuesten
Stand gebracht. Falls Sie keine Datei angeben, werden die Werte
von der Standardeingabe gelesen.
--print-md Algorithmus
Dateien
Gibt eine Nachricht über den angegebenen Algorithmus für alle
spezifizierten Dateien aus. Falls Sie für die Spezifikation des Algorithmus die Wildcard »*« benutzen, werden eine Übersicht und
Informationen über alle verfügbaren Algorithmen ausgegeben.
--gen-random 0|1|2
[count]
0|1|2 gibt das Qualitätslevel an, für das der COUNT ausgegeben
werden soll. Falls Sie keinen COUNT oder 0 angeben, wird eine
endlose Sequenz von Zufallszahlen ausgegeben. Seien Sie mit
dieser Funktion sehr vorsichtig!
--gen-prime Modus Bits
[qbits]
An dieser Funktion wird immer noch gearbeitet, da das Outputformat nicht zufrieden stellend ist.
--version
Gibt die Versionsnummer und die verfügbaren Algorithmen aus
und beendet danach
--warranty
Gibt Informationen über die Garantieleistungen aus
-h, --help
Gibt eine sehr lange Liste von verfügbaren Optionen aus
Tabelle 5.3 Verfügbare Befehle (Forts.)
Optionen
Nun werden wir uns mit den verfügbaren Optionen auseinander setzen. Bevor
wir uns aber an die Besprechung der einzelnen Optionen machen, möchte ich Sie
mit der Optionsdatei von GPG bekannt machen.
Optionsdatei
Sie können in Ihrem GPG-Verzeichnis (zum Beispiel /home/joe/.gnupg) eine Datei
namens options anlegen, in der Sie lange Befehle speichern können. Beachten Sie
dabei aber, dass Sie die beiden anführenden Gedankenstriche weglassen. Schreiben Sie also nur den Namen der Option und die eventuell benötigten Argumente
in die Datei.
Sandini Bib
5.1 Gnu PG (GPG)
253
Verfügbare Optionen
Tabelle 5.4 stellt Ihnen alle verfügbaren Optionen mit einer kurzen Beschreibung
vor.
Option
Beschreibung
-a, --armor
Die Ausgabe wird im ASCII-Format dargestellt.
-o, --output Datei
Schreibt die Ausgabe in eine Datei
-u, --local-user Name
Benutzt den Namen als User-ID um zu unterschreiben. Diese
Option wird bei Listkommandos ignoriert. Sie kann aber in der
Optionsdatei geführt werden.
--default-key Name
Benutzt den angegebenen Namen als Standard-User-ID für
Unterschriften. Falls Sie keinen Namen angeben, wird die im
privaten Schlüsselbund zuerst gefundene User-ID als Standard
benutzt.
-r, --recipient Name
Hiermit geben Sie einen Empfänger an. Falls Sie keinen angeben,
wird GPG Sie danach fragen oder den Standardempfänger
benutzt.
--default-recipient Name
Hiermit können Sie einen Standardempfänger spezifizieren.
--default-recipient-self
Benutzt den Standardschlüssel als Standardempfänger. Der
Standardschlüssel ist der erste Schlüssel des privaten Schlüsselbundes oder ein Schlüssel, den Sie mit der Option --defaultkey angegeben haben.
--no-default-recipient
Löscht die Werte, die Sie mit den folgenden Optionen angegeben
haben.
--default-recipient
--default-recipient-self
Sie müssen nach diesem Reset neue Standardwerte mit den aufgezeigten Optionen übergeben.
--encrypt-to Name
Im Grunde ist diese Funktion mit der Option --recipient
identisch. Diese Option ist jedoch für die Optionsdatei gedacht
und kann mit Ihrer eigenen User-ID benutzt werden. Diese
Schlüssel werden nur benutzt, wenn auch andere Empfänger
angegeben wurden (entweder durch die Beantwortung der Recipientfrage von GPG oder durch die Option --recipient).
Beachten Sie aber, dass hierbei keine Prüfung des Ownertrust
vorgenommen wird und dass Sie sogar deaktivierte Schlüssel
benutzen können.
--no-encrypt-to
Hiermit werden alle --encrypt-to-Schlüssel deaktiviert.
-v, --verbose
Mit dieser Option erhalten Sie während der Arbeit mehr Information. Falls Sie sie zweimal verwenden, werden die Inputdaten
im Detail aufgelistet.
-q, --quiet
Sie bekommen kaum Output.
Tabelle 5.4 Verfügbare Optionen von GPG
Sandini Bib
254
5 Verschlüsselung
Option
Beschreibung
-z n
Hiermit können Sie das Kompressionslevel setzen. Falls Sie den
Wert 0 übergeben, wird Kompression deaktiviert. Normalerweise sollten Sie das Level von zlib benutzt (meistens 6).
-t, --textmode
Initialisiert Textmodus. Um Unterschriften im Klartext zu erreichen, können Sie die -t (aber nicht --textmode) zusammen mit
-a und -s verwenden. Normalerweise würden Sie --sign oder
--clearsign hierfür verwenden. Der hier beschriebene
»Trick« wird aber für die Kompatibilität zu PGP benötigt.
-n, --dry-run
Diese Option veranlasst GPG keine Änderungen vorzunehmen
(ist noch nicht vollständig implementiert, seinen Sie daher also
bei Verwendung sehr vorsichtig).
-i, --interactive
GPG gibt eine Meldung aus, bevor es Dateien überschreibt.
--batch
GPG läuft im Batch-Modus, das heißt, dass Sie keine Meldungen
bekommen werden und keine interaktiven Befehle erlaubt sind.
--no-tty
Vergewissern Sie sich, dass der Terminal nicht für irgendwelche
Ausgaben benutzt wird. Diese Option wird manchmal benötigt,
wenn GPG im --batch-Modus Warnungen ausgibt.
--no-batch
Hierbei wird der --batch-Modus deaktiviert. Sie können diese
Option benutzt, wenn Sie den --batch-Modus über die
Optionsdatei gestartet haben.
--yes
GPG vermutet, dass Sie die meisten Fragen mit »yes« beantworten.
--no
GPG vermutet, dass Sie die meisten Fragen mit »no« beantworten.
--always-trust
Hiermit überspringen Sie den Test der Schlüssel. GPG vermutet,
dass alle Schlüssel immer vollständig vertrauenswürdig sind.
Sie sollten mit dieser Methode äußerst vorsichtig sein, da sie
Ihnen eine Sicherheitsbarriere nimmt.
--keyserver Name
Hiermit geben Sie einen Schlüsselserver an. Sie benötigen diese
Option als Zusatz für einige andere Optionen.
Da sich alle Schlüsselserver miteinander synchronisieren, brauchen Sie Ihre Schlüssel nur zu einem zu senden. Falls Sie eine
Liste mit allen verfügbaren Schlüsselservern erhalten wollen,
geben Sie folgenden Befehl ein:
host -l pgp.net | egrep wwwkeys
--no-auto-key-retrieve
Diese Option deaktiviert das automatische Empfangen von
Schlüsseln von einem Schlüsselserver, solange Sie Signaturen
überprüfen.
--honor-http-proxy
Mit dieser Option erreichen Sie, dass GPG versucht den Schlüsselserver über einen Proxy zu erreichen. Diesen Proxy können
Sie mit der Variable »http_proxy« spezifizieren.
Tabelle 5.4 Verfügbare Optionen von GPG (Forts.)
Sandini Bib
5.1 Gnu PG (GPG)
255
Option
Beschreibung
--keyring Datei
Fügt die Datei zu der Liste von Schlüsselbunden hinzu. Falls die
Datei mit einer Tilde und einem Slash beginnt, wird dies durch
das Homeverzeichnis ersetzt. Falls dies nicht vorhanden ist,
wird angenommen, dass sich die Datei bereits im Homeverzeichnis befindet. Sie können die Datei mit folgenden Werten
beginnen:
gnupg-ring
Default
gnupg-gdbm
Wird für GDBM verwendet. Bedenken Sie aber, dass GDBM
eventuell in den nächsten Versionen nicht mehr vertreten sein
wird.
--secret-keyring Datei
Diese Option bietet dieselben Funktionen wie --keyring, mit
dem Unterschied, dass es sich hierbei um private Schlüsselbunde handelt.
--homedir Verzeichnis
Diese Option überschreibt die Umgebungsvariable GNUPGHOME. Sie können hiermit Ihr Homeverzeichnis angeben. Falls
Sie kein Verzeichnis spezifizieren, wird der Defaultwert benutzt
(./gnupg).
--charset Name
Hiermit können Sie Ihren Zeichensatz spezifizieren. Sie können
diese Option benutzen, um Strings in UTF-8 umzuwandeln.
Mögliche Werte hierfür sind (Platzhalter Name):
iso-8859-1
Latin 1 (Default)
iso-8859.2
Latin 2
koi8-r
Russischer Zeichensatz
utf-8
Umgeht alle Übersetzungen und nimmt an, dass das Betriebssystem UTF-8 encoding benutzt.
--optionsfile Datei
Liest Optionen aus der angegebenen Datei. Damit werden die
Optionen aus der Standardoptionsdatei ignoriert.
--no-utf8-strings,
--utf8-strings
Nimmt an, dass die Argumente bereits als UTF8 Strings übergeben werden. Der Standard besagt, dass Argumente nach dem
Zeichensatz, den Sie mit der Option --charset übergeben
haben, encoded sind (--no-utf8-strings).
--no-options
Hiermit werden alle Optionen im Optionsfile nach /dev/null weitergeleitet.
Tabelle 5.4 Verfügbare Optionen von GPG (Forts.)
Sandini Bib
256
5 Verschlüsselung
Option
Beschreibung
--load-extension Name
Hiermit wird ein Erweiterungsmodul geladen. Falls Sie für den
Platzhalter »Name« kein Verzeichnis angeben (GPG sucht nach
einem Slash), wird das Modul im Verzeichnis /usr/local/lib/gnugp
gesucht.
--debug Flags
Wenn Sie diese Option benutzen, können Sie das Flag in
C-Manier (C-Syntax) für das Debugging setzen.
Zum Beispiel:
0x0042
--debug all
Es werden alle nützlichen und sinnvollen Debugflags gesetzt.
--status-fd n
Es werden besondere Statusstrings in den Filedescriptor n
geschrieben.
--logger-fd n
Schreibt das Logginoutput in den angegebenen Filedescriptor
anstatt nach STDERR
--no-comment
Weist GPG an, keine Kommentarpakete mehr zu schreiben. Nur
für private Schlüssel verfügbar. Das hat nichts mit Kommentaren in Klartextunterschriften zu tun.
--comment String
Was Sie dieser Option anstatt des Platzhalters »String« übergeben, wird als Kommentar in Klartextunterschriften erscheinen.
Falls Sie keinen Kommentar in Klartextunterschriften wünschen,
übergeben Sie dieser Option kein Argument.
--default-comment
Hiermit erreichen Sie, dass der Standardkommentar in Klartextunterschriften eingefügt wird.
--no-version
Falls Sie diese Option verwenden, werden keine Hinweise zur
Version in Klartextunterschriften erscheinen.
--emit-version
Damit wird die Versionsnummer in Klartextunterschriften eingefügt.
-N, --notation-data
Name=Wert
Sie können das Name/Wert Paar als Kommentar in Ihre Signaturen einbauen.
Der String »Name« kann dabei aus alphanumerischen Zeichen,
Zahlen und Unterstrichen bestehen, wobei das erste Zeichen
nicht aus einer Zahl bestehen darf.
Der String »Wert« kann dabei aus jedem druckbaren Zeichen
bestehen und wird in UTF 8 encoded.
Falls Sie Ihren Kommentar als kritisch einstufen haben wollen,
setzen Sie ihm ein Ausrufezeichen vorweg (rfc2440:5.2.3.15).
--set-policy-url String
Bei dieser Option können Sie für den Platzhalter String eine
Policy URL angeben. Auch diese URL können Sie wieder als kritisch einstufen, indem Sie ihr ein Ausrufezeichen vorstellen
(rfc2440:5.2.3.19).
--set-filename String
Geben Sie für den Platzhalter String den Namen der Datei an,
die in Messages gespeichert ist.
Tabelle 5.4 Verfügbare Optionen von GPG (Forts.)
Sandini Bib
5.1 Gnu PG (GPG)
257
Option
Beschreibung
--use-embedded-filename
Versucht eine Datei mit dem Namen der eingebundenen Daten
zu erstellen. Seien Sie hierbei sehr vorsichtig, da es vorkommen
kann, dass Dateien überschrieben werden.
--completes-needed n
Anzahl der »completely trusted« User, um einen neuen Schlüssel einzuführen
Defaultwert liegt bei 1
--marginals-needed n
Anzahl der »marginally trusted« User, um einen neuen Schlüssel
einzuführen
Defaultwert liegt bei 3
--max-cert-depth n
Gibt die maximal erlaubte Tiefe der Zertifikationsketten an
Defaultwert liegt bei 5
--cipher-algo Name
Anstelle des Platzhalters »Name« können Sie einen Verschlüsselungs-Algorithmus angeben. Um eine Liste der unterstützten
Algorithmen zu bekommen, können Sie folgenden Befehl nutzen.
Linux:~# gpg --version | egrep algorithms
--digest-algo Name
Anstelle des Platzhalters »Name« können Sie den »Message Digest
Algorithmus« angeben. Auch hier können Sie mit dem --version-Befehl eine Liste der verfügbaren Optionen anzeigen lassen.
--s2k-cipher-algo Name
Diese Option erlaubt es Ihnen, einen Verschlüsselungs-Algorithmus anzugeben (für den Platzhalter Name), der benutzt wird,
um private Schlüssel zu beschützen.
Der Defaultalgorithmus ist BLOWFISH.
Diese Algorithmus wird auch für konventionelle Verschlüsselung genutzt, falls Sie die Option --cipher-algo nicht angegeben haben.
--s2k-digest-algo Name
Benutzt den angegebenen Algorithmus, um Passphrases zu verschlüsseln.
Der Defaultalgorithmus ist RIPE-MD-160.
Dieser Algorithmus wird ebenfalls für normale Verschlüsselung
benutzt, falls die Option --digest-algo nicht angegeben
wurde.
--s2k-mode n
Mit dieser Option geben Sie an, wie mit den Passphrases verfahren werden soll.
Falls Sie eine 0 für den Wert n einsetzen, so wird eine plain Passphrase benutzt.
Falls Sie eine 1 angeben, wird ein »salt« an die Passphrase angehängt (dies ist der Defaultwert).
Falls Sie eine 3 angeben, wird die Passphase einige Male verdoppelt.
Falls --rfc1991 nicht angegeben wurde, wird dieser Modus
auch für konventionelle Verschlüsselung gebraucht.
Tabelle 5.4 Verfügbare Optionen von GPG (Forts.)
Sandini Bib
258
5 Verschlüsselung
Option
Beschreibung
--compress-algo n
Sie können mit dieser Option den Algorithmus angeben, der für
die Kompression genutzt werden soll.
Bei einer 1 wird die alte Zipversion, die auch von PGP verwendet wird, benutzt.
Bei einer 2 wird die RFC1950-Kompression verwendet (dies ist
der Defaultwert). Dieser Algorithmus hat einen entscheidenden
Vorteil, da die Windowgröße nicht auf 8 K beschränkt ist.
--disable-cipher-algo
Name
Hiermit verbieten Sie GPG den von Ihnen anstatt dem Platzhalter
angegebenen Algorithmus als Cipher-Algorithmus zu benutzen.
--disable-pubkey-algo
Name
Hiermit verbieten Sie GPG den von Ihnen anstatt dem Platzhalter angegebenen Algorithmus als Public-Key-Algorithmus zu
benutzen.
--throw-keyid
Sie können diese Option verwenden, um GPG anzuweisen, die
Schlüssel-ID nicht in verschlüsselten Pakete zu erwähnen (damit
wird der Empfänger geheim gehalten). Dies ist eine gute Gegenmaßnahme, um Trafficanalysen zu verhindern. Beachten Sie
dabei aber bitte, dass die Entschlüsselungszeit damit rapide
ansteigen kann, da jeder verfügbare private Schlüssel durchprobiert wird.
--not-dash-escaped
Hiermit können Sie Klartextunterschriften so abändern, dass Sie
sie für Patchfiles verwenden können. Sie sollten diese Dateien
aber danach nicht als E-Mail verschicken, da auch alle Leerzeichen und Zeilenendungen gehashed sind. Sie können diese
Option nicht für Daten verwenden, die am Anfang einer Zeile
fünf Hashes haben.
Diese Funktion wird durch eine spezielle Zeile im Header der
Unterschrift ermöglicht.
--escape-from-lines
Da einige Mailprogramme die Zeile »From« zu »<From« abändern, ist es eine gute Idee, diese Zeilen in Klartextunterschriften
besonders zu behandeln. (Alle anderen PGP Version verfahren
nach demselben Prinzip.)
Diese Option ist per Default nicht aktiv, da sie RFC2440 verletzen würde.
--passphrase-fd n
Mit dieser Option geben Sie an, dass GPG die Passphrase aus
dem File Descriptor n lesen soll. Falls Sie an diese Stelle für den
Wert n 0 angeben, so wird die Passphrase von der Standardeingabe gelesen. Dies funktioniert nur für eine Passphrase.
Beachten Sie hierbei aber, dass diese Option eventuell ein großes
Sicherheitsrisiko darstellt. So kann ein Mit-User Ihrer Workstation durch die History Ihrer Kommandozeile viele Informationen ergattern, die er besser nicht wissen sollte.
--rfc1991
Hiermit wird versucht, sich an RFC1991 (PGP 2.X) besser anzupassen.
Tabelle 5.4 Verfügbare Optionen von GPG (Forts.)
Sandini Bib
5.1 Gnu PG (GPG)
259
Option
Beschreibung
--openpgp
Falls Sie diese Option initialisieren, werden alle Packet-, Cipherund Digest-Optionen wieder auf Null und somit auf OpenPGPVerhalten zurückgestellt. Davon sind folgende Optionen betroffen:
--rfc1991, --force-v3-sigs, --s2k-*, --cipher-algo,
--digest-algo und --compress-algo
Es werden ebenfalls alle PGP Workarounds deaktiviert.
--force-v3-sigs
Der OpenPGP-Standard besagt, dass v4-Unterschriften zu generieren sind. Leider erkennt PGP v4-Unterschriften nur bei
Schlüsselmaterial. Diese Option bringt GPG dazu, für Datenunterschriften v3 zu benutzen.
--force-mdc
Hiermit bringen Sie GPG dazu, an jede Verschlüsselung »manipulation-code« anzuhängen. Dies wird bei den neueren CipherAlgorithmen stets benutzt (die mit einer Blockgröße größer als
64K versehen sind).
Es könnte sein, dass diese Option bei Ihnen noch nicht implementiert ist.
--allow-non-selfsigned-uid Erlaubt den Import von nicht selbst unterschriebenen Schlüsseln. Die »Key-Validation« wird bei solchen Schlüsseln aber
nicht erfolgreich sein und Sie müssen die Gültigkeit des Schlüssels anders überprüfen. Diese Option sollte normalerweise nicht
benutzt werden, ist aber für einige deutsche Schlüssel, die mit
PGP 2.6.3 erstellt wurden, nötig.
--ignore-time-conflict
Normalerweise überprüft GPG, ob die timestamps bestimmter
Schlüssel und Unterschriften plausible Werte haben. Es kann
aber durchaus einmal vorkommen, dass eine Unterschrift älter
als ein Schlüssel ist (es sollte zwar nicht vorkommen, aber leider
geschieht es doch hin und wieder). Für solche Problem- und
Sonderfälle können Sie diese Option benutzen.
--lock-once
Hiermit wird die Datenbank beim ersten Sperrgesuch gesperrt
und erst wieder entsperrt, wenn der Prozess beendet ist.
--lock-multiple
Entsperrt die Datenbank, sobald die Sperre nicht mehr benötigt
wird.
--lock-never
Mit dieser Option deaktivieren Sie das Sperren von Datenbanken komplett. Sie sollten sie nur verwenden, wenn Sie sich absolut sicher sind, dass dadurch keine Daten beschädigt oder korrumpiert werden können.
--no-random-seed-file
GPG benutzt eine Datei, um seinen internen radom Pool für
Anfragen zu speichern.
--no-verbose
Es wird kein Output mehr gegeben.
--no-greeting
Hiermit wird die Copyrightnachricht unterdrückt. Das Programm befindet sich aber dadurch nicht im Batch-Modus.
--no-secmem-warning
Dadurch können Sie die Warnung »using insecure memory«
abschalten.
Tabelle 5.4 Verfügbare Optionen von GPG (Forts.)
Sandini Bib
260
5 Verschlüsselung
Option
Beschreibung
--no-armor
Sie können diese Option verwenden, falls die Inputdaten nicht
im ASCII-Format verfasst wurden.
--no-default-keyring
Dadurch wird der Defaultschlüsselbund nicht zu der Liste der
Schlüsselbunde hinzugefügt.
--skip-verify
Falls Sie keine Überprüfung der Unterschriften benötigen, können Sie diese Option benutzen, um diesen Schritt zu überspringen. Da keine Bestätigung gebraucht wird, ist die Entschlüsselung wesentlich schneller.
--with-colons
Bei Schlüssellistings werden die einzelnen Einträge durch Kommas getrennt dargestellt.
--with-key-data
Bei Schlüssellistings werden die einzelnen Einträge durch Kommas getrennt dargestellt. Zusätzlich erhalten Sie noch Daten
über den öffentlichen Schlüssel.
--with-fingerprint
Bietet dieselbe Funktionalität wie die Option --fingerprint,
mit dem Unterschied, dass hierbei nur das Ausgabeformat geändert wird und dass Sie diese Option mit anderen Befehlen kombinieren können.
--fast-list-mode
Hiermit können Sie die Ausgabe von Listkommandos wesentlich beschleunigen, da einige Felder ausgelassen werden. Da sich
diese Version in der nahen Zukunft noch des Öfteren ändern
wird, sollten Sie einfach ausprobieren, welche Felder weggelassen werden.
--list-only
Auch diese Option wird in der Zukunft noch verändert. Zurzeit
überspringt sie lediglich eine Funktion und ist daher in der Lage
die Schlüssel schneller aufzulisten.
Tabelle 5.4 Verfügbare Optionen von GPG (Forts.)
5.2
OpenSSH
Wir leben im Kommunikationszeitalter. Das wertvollste (materielle) Gut, das wir
zurzeit haben, ist die Information. Wir alle versuchen mit aller Gewalt (zumindest
sollten wir dies) unsere persönlichen und geheimen Daten und Informationen vor
unerlaubtem Zugriff zu schützen. Um dies zu erreichen, errichten wir Sicherheitsbarrieren, die es einem Angreifer unmöglich machen sollen, unsere Daten zu
erspähen.
In der Praxis dienen uns Usernamen und Passwörter als Sicherheitsbarrieren. Im
konkreten Beispiel loggen wir uns mit diesem Authentifizierungspaar zum Beispiel an einem FTP-Server ein. Da dieser weiß, dass wir unsere Daten schützen
möchten, fragt er nach einem Passwort und einem dazugehörigen Usernamen.
Wir schicken ihm die gewünschten Informationen zu und hoffen uns nicht vertippt zu haben. Der Server empfängt die Daten und weiß somit, dass wir auch
wirklich wir sind, und gibt uns Zugriff auf unsere Daten.
Sandini Bib
5.2 OpenSSH
261
Obwohl dieses System allein schon nicht allzu sicher ist, vertrauen wir darauf, da
wir denken, dass nur wir die richtige Kombination aus Usernamen und Passwort
kennen. Dies mag zwar stimmen, aber leider kümmern wir uns wenig um das
Programm, das wir zur Authentifizierung nutzen. So kommt es leider immer
noch vor, dass Benutzer ihre Passwörter via Telnet oder FTP im Internet hin- und
herschicken, obwohl sie eigentlich wissen sollen, dass die sensitiven Daten, die
dabei ausgetauscht werden, von jedermann eingesehen werden können. Dies
liegt daran, dass der Datenverkehr nicht verschlüsselt wird.
Die OpenSSH-Programm-Suite liefert uns einige Tools, die den ausgetauschten
Datenverkehr verschlüsseln und uns somit vor gemeinen Snifferattacken schützen. Welche Programme uns dabei zur Verfügung stehen und was sie uns bieten,
erfahren Sie im Folgenden:
ssh – ein Client, den Sie benutzen können, um sich an einem Server anzumelden
sshd – der Server, der den Zugriff regelt
ssh-agent – ein Agent für Authentifizierung, der private Schlüssel speichern
kann
ssh-add – mit diesem Tool können Sie Schlüssel zum ssh-agent hinzufügen
sftp – ein FTP Client, der das SSH1- und SSH2-Protokoll versteht und einsetzt
scp – hiermit können Sie Daten sicher kopieren
ssh-keygen – dieses Programm brauchen Sie um Schlüssel zu generieren
sftp-server – ein sicherer FTP-Server, der automatisch mit dem SSH Server ge-
startet wird
ssh-keyscan – Sie können dieses Programm benutzen, um öffentliche Hostschlüssel von verschiedenen Rechnern zusammenzutragen
Wir werden jedes der aufgeführten Tools genau besprechen. Vorab möchte ich Ihnen aber schon raten, diese Programme für den Datenaustausch zu benutzen, um
sicherzugehen, dass Ihre Passwörter und die sensitiven Informationen auch nicht
lesbar übertragen werden.
5.2.1
Installation
Obwohl die meisten Distributionen OpenSSH als Paket mitliefern, sollten Sie sich
die jeweils aktuellste Version aus einer sicheren Quelle besorgen.
Sichere Bezugsquellen
1. Die erste Möglichkeit besteht darin, sich das Paket (Source oder RPM) von der
Buchseite zu besorgen.
2. Sie können das Programm aber
www.openssh.com downloaden.
auch
von
der
offiziellen
Seite
Sandini Bib
262
5 Verschlüsselung
RPM
Falls Sie sich für das RPM-Paket entschieden haben, ist die Installation ein Kinderspiel:
Linux:~# rpm -i openssh-version.rpm
Danach haben Sie ein fertig installiertes OpenSSH-Paket auf Ihrem Rechner.
5.2.2
Der Server
Da ich mir nicht im Geringsten anmaßen will, Ihnen an dieser Stelle die volle
Komplexität dieses Servers und seiner Funktionsweise zu erklären, werde ich
versuchen, Ihnen in wenigen Sätzen darzustellen, was dieser Server überhaupt ist
und was er leisten kann.
Funktionsweise
In diesem Abschnitt werden Sie erfahren, wie ein Login-Prozess über einen SSH
Server abläuft und wie er funktioniert.
Verbindungsaufbau und Protokollaustausch
1. Der Client schickt zum Zielserver einen Verbindungsaufbau auf Port 22. Nachdem der Server der Verbindung zugestimmt hat, tauschen der Client und der
Server die jeweiligen Protokollversionen aus, um sicherzugehen, dass eine
Kommunikation fehlerfrei stattfinden kann (Abbildung 5.1).
Abbildung 5.1 Erster Schritt im Login-Prozess
Wechsel zu Binärprotokoll
Danach wechseln der Server und der Client auf ein Binärprotokoll.
Server sendet RSA-Schlüssel
Der Server sendet seine beiden öffentlichen Schlüssel Hpub (permanenter Hostkey) und Spub (dynamischer Hostkey). Der dynamische Key Spub bedingt eine
zusätzliche Sicherheit, so dass die Kenntnis des statischen Keys nicht ausreicht.
Außerdem wird dem Client noch eine Liste mit den verfügbaren Chiffren übermittelt (Abbildung 5.2)
Sandini Bib
5.2 OpenSSH
263
Abbildung 5.2 Server sendet RSA-Schlüssel
Vergleich der Schlüssel
Der Client vergleicht nun seine lokale Kopie des Hostkeys mit dem vom Server
angegebenen Schlüssel (Hpub) anhand seiner lokalen Dateien. Falls der Rechner
nicht bekannt ist, wird gefragt, ob der Serverschlüssel akzeptiert werden soll.
Falls ja, wird dieser lokal gespeichert und beim nächsten Mal wieder verwendet,
ansonsten wird die Verbindung abgebrochen (Abbildung 5.3)
Abbildung 5.3 Vergleich der Schlüssel
Sitzungsschlüssel wird generiert
Nun generiert der Client einen 256 Bit großen Sitzungsschlüssel und verschlüsselt
diesen mit dem permanenten und dem dynamischen Hostschlüssel. Danach
schickt er das Ergebnis zum Server und übergibt ihm das symmetrische Verfahren, das er gewählt hat.
Authentifizierung
Da der gesamte Datenverkehr nun mit dem Session Key (Sitzungsschlüssel) verschlüsselt wird, kann die Authentifizierung via Passwort usw. erfolgen, ohne
dass die Gefahr des Abfangens besteht.
Abbildung 5.4 Datenverkehr wird verschlüsselt
Sandini Bib
264
5 Verschlüsselung
Da dieses Buch aber hauptsächlich als eine Art großes Howto dienen sollte, werden
wir nicht näher auf die weitere Authentifizierung eingehen, sondern uns gleich mit
der Konfiguration des Servers beschäftigen. Sie brauchen hier aber keine Angst zu
haben, dass Ihnen dabei wichtige Informationen über die Authentifizierung oder
Ähnliches entgehen, da die Besprechung der verschiedenen Tools und der dafür
verfügbaren Optionen alle Einzelheiten der Funktionsweise aufgreifen wird.
Konfiguration über die Kommandozeile
Grundsätzlich gibt es zwei Methoden, um den SSH-Server zu konfigurieren.
1. Über die Kommandozeile
2. Über eine Konfigurationsdatei
3. Wir werden uns als Erstes mit der Konfiguration über die Kommandozeile
beschäftigen. Beachten Sie dabei, dass Sie diese Methode auch verwenden
können, um bestimmte Werte in der Konfigurationsdatei zu überschreiben.
Allgemeine Syntax
Der allgemeine Aufruf für die Konfiguration über die Kommandozeile lautet:
Linux:~# sshd -Optionen
Verfügbare Optionen
Wir werden uns nun mit den verfügbaren Optionen für die Konfiguration des
Servers beschäftigen. Tabelle 5.5 enthält alle Optionen und gibt zu jedem aufgeführten Punkt eine kurze Beschreibung.
Option
Beschreibung
-b Bits
Gibt die Anzahl der Bits im flüchtigen Serverschlüssel an.
Der Defaultwert liegt bei 768 Bit.
-d
Hiermit initialisieren Sie den Debugmodus. Der Server wird viel
Debugausgaben ausgeben und nicht im Hintergrund laufen. Er wird
dabei nur eine Verbindung bearbeiten. Sie können den Level des
Debugmodus erhöhen, indem Sie die Option mehrmals angeben.
Das Maximum liegt bei dreimal.
-e
Wenn Sie diese Option angeben, wird der SSH-Server seine Ausgaben
nach STDERR (standard error) anstatt zum Systemlog schicken.
-f Konfigurationsdatei
Sie können diese Option benutzen, um dem Server die Konfigurationsdatei zu übergeben. Er wird nicht starten, wenn Sie keine
Konfigurationsdatei angelegt haben.
Der Defaultwert liegt bei /etc/ssh/sshd_config.
-g login_grace_time
Mit dieser Option geben Sie an, wie viel Zeit (in Sekunden) einem
Client zur Authentifizierung eines Users zur Verfügung steht. Falls er
es nicht schafft, den User innerhalb der angegebenen Zeit zu authentifizieren, wird die Verbindung beendet.
Tabelle 5.5 Verfügbare Optionen
Sandini Bib
5.2 OpenSSH
Option
265
Beschreibung
Der Defaultwert liegt bei 600 Sekunden.
Falls Sie kein Limit für die Authentifizierung setzen wollen, können
Sie dies erreichen, indem Sie eine 0 angeben.
-h host_key_Datei
Mit dieser Option spezifizieren Sie die host_key_Datei, aus der der
Hostschlüssel gelesen wird. Sie müssen diese Option angeben, falls
der Server nicht als root läuft. Es ist weiter möglich, mehrere Dateien
anzugeben (für verschiedene Protokollversionen und Hostschlüsselalgorithmen).
-i
Falls Sie wollen, dass Ihr SSH-Server unter dem Superserver (inetd)
läuft, können Sie das durch diese Option erreichen. Sie sollten dabei
aber beachten, dass es normalerweise besser ist, wenn der Server nicht
unter inetd läuft, da er einen Serverschlüssel generieren muss. Clients
müssten zu lange warten, wenn der Schlüssel jedes Mal neu generiert
werden müsste. Sie könnten dieses Problem umgehen, indem Sie die
Schlüsselgröße auf 512 begrenzen – dies geht dann aber zu Lasten der
Sicherheit.
-k key_gen_time
Diese Option gibt an, wie oft der flüchtige Schlüssel eines Protokoll-1Servers neu generiert werden muss. Der Defaultwert liegt bei 3600
Sekunden. Wenn Sie den Wert 0 übergeben, so wird der Schlüssel niemals neu generiert.
-p port
Hiermit können Sie den Port, auf dem der Server lauschen soll, angeben.
Normalerweise läuft der Server auf Port 22.
-q
Quiet mode. Falls Sie nicht wollen, dass der Server Ihr Systemlog füllt,
können Sie das mit dieser Option erreichen.
Falls Sie diese Option nicht angeben (empfehlenswert), werden der
Beginn, die Authentifizierung und die Beendigung einer Verbindung
geloggt.
-u len
Um die Größe des Feldes in der UTMP-Struktur, die den Namen des
Remotehosts speichert, zu spezifizieren, können Sie diese Option verwenden. Falls der antwortende Rechner einen Namen hat, der länger
ist als die von Ihnen hier angegebene Länge des Feldes, so wird die IPAdresse als Name verwendet.
Dies hat zur Folge, dass auch Hosts mit sehr langen Namen immer
noch eindeutig identifiziert werden können.
Falls Sie nur IP-Adressen zur Identifizierung wünschen, können Sie
dies erreichen, indem Sie -u0 angeben.
-D
Diese Option erlaubt es Ihnen, Ihren SSH-Server zu überprüfen. Falls
Sie diese Option angeben, wird der Server nicht als Daemon laufen.
-4
Es werden nur IPv4-Adressen verwendet.
-6
Hiermit werden nur IPv6-Adressen verwendet.
Tabelle 5.5 Verfügbare Optionen (Forts.)
Sandini Bib
266
5 Verschlüsselung
Konfiguration über die Konfigurationsdatei
Nun werden wir uns mit der zweiten Konfigurationsmöglichkeit beschäftigen –
der Konfigurationsdatei. Diese besteht aus Schlüsselwörtern, denen Sie bestimmte Werte oder Argumente zuweisen müssen. Kommentare läuten Sie durch
das #-Zeichen ein.
Verfügbare Schlüsselwörter
Tabelle 5.6 stellt Ihnen die verfügbaren Schlüsselwörter vor und gibt zu jedem
aufgeführten Punkt eine kleine Beschreibung.
Schlüsselwort
Beschreibung
AFSTokenPassing
Dieses Schlüsselwort gibt an, ob AFS Token zum Server weitergeleitet
werden sollen oder nicht.
Der Defaultwert steht auf »yes«.
AllowGroups
Hiermit können Sie den Login auf Mitglieder bestimmter Gruppen
beschränken. Falls Sie mehrere Gruppen angeben wollen, können Sie
die einzelnen Namen durch Leerzeichen trennen. Beachten Sie dabei
aber, dass nur Gruppennamen erlaubt sind. Falls Sie die numerische
Gruppen-ID angeben, wird diese nicht erkannt.
Per Default ist keine Gruppe angegeben und der Login somit für jeden
User möglich.
Sie können ebenfalls die Wildcard »*« (all) und »?« (any) benutzen.
AllowTcpForwarding Falls Sie TCP Forwarding verbieten wollen, müssen Sie diesem
Schlüsselwort das Argument »no« übergeben.
Hierbei gilt es aber zu beachten, dass das Verbieten von TCP Forwarding alleine die Sicherheit nicht erhöht, solange ein User Zugriff auf die
Shell hat und dort somit seinen eigenen Forwarder installieren kann.
Der Defaultwert ist »yes« und TCP Forwarding ist somit erlaubt.
AllowUsers
Diese Option erlaubt es Ihnen, den Login auf bestimmte User zu
beschränken. Die User, die Sie diesem Schlüsselwort übergeben können Sie durch Leerzeichen trennen. User, die Sie nicht aufführen,
haben keine Loginberechtigung. Beachten Sie, dass nur Usernamen
erlaubt sind, falls Sie eine numerische User-ID angeben, wird diese
nicht erkannt.
Per Default ist kein User angegeben und der Login somit für jeden
User möglich.
Sie haben die Möglichkeit die Wildcard »*« (all) und »?« (any) zu
benutzen.
Banner
Sie können diesem Schlüsselwort eine bestimmte Datei (zum Beispiel
/etc/ssh/warning) übergeben, deren Inhalt dann vor jeder Authentifizierung an den betreffenden User geschickt wird. Sie sollten diese
Option nutzen, da Sie danach rechtlich besser abgesichert sind.
Diese Option ist allerdings nur für Protokollversion 2 verfügbar.
Tabelle 5.6 Verfügbare Schlüsselwörter
Sandini Bib
5.2 OpenSSH
267
Schlüsselwort
Beschreibung
ChallengeResponseAuthentication
Gibt an, ob »Challenge Response Authentication« erlaubt ist oder
nicht. Zurzeit gibt es nur Unterstützung für skey-Authentifizierung
(werden wir im Verlauf dieses Kapitels noch genauer besprechen).
Der Defaultwert ist »yes«.
Ciphers
Mit Hilfe dieser Option können Sie die erlaubten Cipher-Algorithmen
für Protokoll 2 angeben. Falls Sie mehrere angeben wollen, müssen Sie
diese mit einem Komma voneinander trennen.
Der Defaultwert ist: »aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc,
arcfour«.
CheckMail
Gibt an, ob der SSH Server überprüfen soll, ob neue Mails für interaktive Logins vorhanden sind.
Der Defaultwert ist »no«.
ClientAliveInterval
Hiermit können Sie einen bestimmten Zeitraum (in Sekunden) angeben, in dem der Client keine Daten an den Server schicken muss. Hat
er aber dieses Intervall überschritten, schickt der Server eine Nachricht
zum Client, in der er eine Antwort vom Client erbittet.
Falls Sie diesem Schlüsselwort den Wert 0 übergeben, so wird diese
Nachricht niemals losgeschickt.
Diese Option funktioniert nur unter Protokollversion 2.
Beachten Sie aber bitte, dass diese Option völlig anders agiert als die
Option Keepalive, welche weiter unten beschrieben wird. Die hier
vorgestellte Option schickt die Nachrichten an den Client durch den
verschlüsselten Sitzungskanal und macht es somit unmöglich, dass
diese Nachrichten gefälscht werden.
ClientAliveCountMax
Sie können mit dieser Option angeben, wie viele Client-Alive-Messages
(siehe vorhergehende Option) an den Client geschickt werden, ohne
dass der Server eine Antwort erhält. Falls diese Schwelle überschritten
wird, trennt der Server die Verbindung und beendet die Sitzung.
Der Defaultwert ist 3.
Falls Sie der ClientAliveInterval-Option den Wert 15 übergeben
und den Wert dieser Option auf 3 lassen, so wird ein Client, der nicht
antwortet, nach ca. 45 Sekunden vom Server getrennt.
DenyGroups
Sie können dieser Option Gruppennamen übergeben, deren Mitglieder sich danach nicht mehr am SSH-Server einloggen dürfen. Falls Sie
mehrere Gruppennamen übergeben wollen, können Sie die einzelnen
Einträge durch Leerzeichen voneinander trennen. Beachten Sie dabei
aber bitte, dass Sie nur Gruppennamen übergeben dürfen, falls Sie
eine numerische Gruppen-ID übergeben, wird diese nicht erkannt.
Per Default ist keine Gruppenbeschränkung angegeben.
DenyUser
Auch hierbei können Sie bestimmten Usern den Login auf Ihrem SSHServer verbieten. Falls Sie mehrere User angeben wollen, können Sie
die einzelnen Namen durch Leerzeichen voneinander trennen. BeachTabelle 5.6 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
268
Schlüsselwort
5 Verschlüsselung
Beschreibung
ten Sie dabei aber bitte, dass Sie nur Usernamen angeben dürfen, falls
Sie eine numerische User-ID übergeben, wird diese nicht erkannt.
Per Default darf sich jeder User anmelden.
GatewayPorts
Gibt an, ob sich Remotehosts auf Ports, die vom Client weitergeleitet
werden, verbinden dürfen.
Der Defaultwert liegt bei »no«.
HostbasedAuthentication
Gibt an, ob rhosts oder /etc/hosts.equiv-Authentifizierung zusammen
mit erfolgreicher Public Key Client Hostauthentifizierung erlaubt ist
(hostbased Authentication). Diese Option ist gleichbedeutend mit der
Option RhostsRSAAuthentication und benötigt Protokollversion 2.
Der Defaultwert ist »no«.
HostKey
Dieser Option können Sie die Datei übergeben, welche die privaten
Hostschlüssel, die von SSH Protokoll 1 und 2 genützt werden, enthält.
Beachten Sie dabei aber, dass der Server eine Datei, die von der
Gruppe World (also von jedermann) eingesehen werden kann, ablehnen wird. Sie können dabei auch mehrere Dateien angeben.
RSA1 Schlüssel werden von Protokollversion 1 genutzt, wohingegen
DSA und RSA von Protokollversion 2 genutzt werden.
Der Defaultwert liegt bei /etc/ssh/ssh_host_key.
IgnoreRhosts
Falls Sie dieser Option den Wert »yes« übergeben, werden .rhostsund .shosts-Dateien nicht für RhostsAuthentication, RhostsRSAAuthentication oder HostbasedAuthentication benutzt.
/etc/hosts.equiv und /etc/ssh/shosts.equiv werden weiterhin genutzt.
Der Defaultwert ist »yes«.
IgnoreUserKnownHosts
Durch Verwendung dieser Option geben Sie an, ob die User Known
Hosts in $HOME/.ssh/known_hosts während einer RhostsRSAAuthentication oder HostbasedAuthentication ignoriert werden sollen.
Der Defaultwert ist »no«.
KeepAlive
Hiermit geben Sie an, ob KeepAlive-Nachrichten zur nicht antwortenden Seite geschickt werden sollen. Falls diese Nachrichten geschickt
werden, werden Sie eine Meldung bekommen, ob ein Rechner abgestürzt ist oder die Verbindung getrennt wurde. Dies heißt aber auch,
dass die Verbindung beendet wird, falls die Route zur nicht antwortenden Seite (Server oder Client) zeitweise nicht verfügbar ist. Andererseits verhindern Sie damit, dass Sitzungen unendlich lange auf dem
Server »hängen bleiben«, während die Verbindung schon lange zu
Ende ist. Dies kann Ihnen eine Menge Ressourcen sparen.
Beachten Sie dabei aber, dass diese Nachrichten nicht durch den verschlüsselten Kanal geschickt werden und somit leicht gefälscht werden können.
Tabelle 5.6 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
5.2 OpenSSH
Schlüsselwort
269
Beschreibung
Der Defaultwert ist »yes« (das heißt, Keepalive-Nachrichten werden
verschickt). Falls Sie das Versenden dieser Nachrichten verhindern
wollen, sollten Sie in der Server- und der Client-Konfigurationsdatei
den Wert »no« übergeben.
KerberosAuthentication
Mit diesem Schlüsselwort spezifizieren Sie, ob Kerberos-Authentifizierung erlaubt ist oder nicht. Diese Authentifizierung kann in Form
eines Kerberos-Tickets oder, wenn PasswordAuthentication den Wert
»yes« gesetzt hat, in Form eines Passworts, das durch Kerberos KDC
überprüft wird, stattfinden.
Damit Sie diese Option nutzen können, braucht der Server eine »servtab«, die die Verifizierung von KDC-Identitäten erlaubt.
Der Defaultwert ist auf »yes« gesetzt.
KerberosOrLocalPassword
Wenn die Passwortauthentifizierung durch Kerberos fehlgeschlagen
ist, können Sie mit Hilfe dieser Option eine Überprüfung durch einen
zusätzlichen Mechanismus wie /etc/passwd erreichen.
KerberosTgtPassing
Gibt an, ob ein Kerberos TGT zum Server weitergeleitet werden soll
Per Default ist die Option auf »yes« gesetzt.
Der Defaultwert ist »no«.
Beachten Sie, dass diese Option nur funktioniert, wenn der Kerberos
KDV ein AFS kaserver ist.
KerberosTicketCleanup
Dieses Schlüsselwort bestimmt, ob die Benutzerticketcachedatei nach
einem Logout gelöscht werden soll.
Der Defaultwert ist »yes«.
KeyRegenerationInterval
Hierbei geben Sie an nach wie vielen Sekunden der in Protokoll 1
genutzte flüchtige Schlüssel regeneriert werden soll.
Falls Sie an dieser Stelle den Wert 0 übergeben, wird der Schlüssel niemals regeneriert.
Der Defaultwert liegt bei 3600 (Sekunden).
ListenAddress
Hiermit spezifizieren Sie die lokale Adresse, auf der der SSH-Server
lauschen soll. Sie können die folgenden Formate benutzen:
ListenAddress host | IPv4_addr | IPv6_addr
ListenAddress host | IPv4_addr : Port
ListenAddress [host|IPv6_addr] : Port
Per Default lauscht der Server auf allen lokalen Adressen. Sie können
auch mehrere Adressen angeben. Falls Sie keinen Port angeben, wird
der Port, den Sie dem Schlüsselwort Port (wird weiter unten besprochen) übergeben haben, verwendet.
LoginGraceTime
Dieses Schlüsselwort spezifiziert, nach welchem Zeitintervall der User
getrennt wird, falls er sich nicht erfolgreich einloggen konnte.
Um kein solches Limit anzugeben, übergeben Sie der Option den Wert 0.
Per Default wird der User nach 600 Sekunden getrennt.
Tabelle 5.6 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
270
5 Verschlüsselung
Schlüsselwort
Beschreibung
LogLevel
Mit dieser Option können Sie das Log Level des SSH Servers spezifizieren. Mögliche Werte hierfür sind:
QUIET
FATAL
ERROR
INFO
VERBOSE
DEBUG
Beachten Sie dabei aber bitte, dass das Argument DEBUG die Privatsphäre des Benutzers verletzen könnte und daher nur in gerechtfertigten Situationen eingesetzt werden sollte.
Per Default ist das Log Level INFO.
MACs
Spezifiziert die verfügbaren MAC (Message Authentication Code)Algorithmen, die unter Protokollversion 2 benutzt werden, um die
Integrität von Daten zu schützen.
Falls Sie mehrere Algorithmen angeben wollen, müssen Sie die einzelnen Argumente durch Kommas voneinander trennen.
Der Defaultwert ist:
»hmac-md5, hmac-sha1, hmac-ripemd160, hmacripemd160@openssh.com, hmac-sha1-96, hmac-md5-96«
MaxStartups
Hiermit können Sie die maximale Anzahl von noch nicht authentifizierten Verbindungen zum SSH-Server spezifizieren. Falls nach dem
Erreichen des hier angegebenen Limits weiter Verbindungsanfragen
von Clients durchgeführt werden, werden diese abgelehnt, bis eine
Verbindung authentifiziert wurde oder die LoginGraceTime für eine
Verbindung abgelaufen ist.
Der Defaultwert liegt bei 10.
Es gibt dafür aber noch eine zweite Möglichkeit, bei der die Verbindungsanfragen nach dem Erreichen des Limits zufällig abgelehnt werden. Die Syntax hierfür lautet:
start:rate:full (zum Beispiel 10:50:30)
Der Platzhalter start gibt das Limit für nicht authentifizierte Verbindungen an (10). Rate beschreibt die Wahrscheinlichkeit, dass eine Verbindungsanfrage abgelehnt wird (50%). Falls die Zahl, die Sie dem
Platzhalter full übergeben haben, erreicht wird (60), werden alle
Verbindungsanfragen abgelehnt.
PAMAuthenticationViaKbdInt
Gibt an, ob PAM Challenge Response Authentication erlaubt ist oder
nicht. Falls ja, wird es dadurch ermöglicht, die meisten PAM Challenge Response Authentication-Module zu benutzen. Weiter wird
aber auch die Passwort-Authentifikation erlaubt, egal ob die Option
PasswordAuthentication aktiviert oder deaktiviert ist.
Der Defaultwert ist »no«.
Tabelle 5.6 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
5.2 OpenSSH
271
Schlüsselwort
Beschreibung
PasswordAuthentication
Mit Hilfe dieses Schlüsselwortes können Sie angeben, ob PasswortAuthentifizierung erlaubt sein soll oder nicht.
Der Defaultwert ist »yes«.
PermitEmptyPasswords
Falls Sie die vorhergegangene Option PasswordAuthentication aktivieren, können Sie mit dieser Option hier angeben, ob es dem User
erlaubt ist, sich in Accounts einzuloggen, die nur mit einem leeren
Passwort geschützt sind.
PermitRootLogin
Sie können mit dieser Option angeben, ob sich der Superuser (root)
mit Hilfe des SSH-Clients an Ihrem SSH-Server einloggen darf. Mögliche Werte für dieses Schlüsselwort sind:
Der Defaultwert ist »no«.
yes
no
without-password
forced-commands-only
Der Defaultwert ist »yes«.
Falls Sie das Argument »without-password« übergeben, wird die
Passwortauthentifizierung für den Superuser deaktiviert.
Falls Sie das Argument »forced-commands-only« übergeben, darf sich
der Superuser via Public Key-Authentifizierung einloggen, aber nur
wenn die Option command spezifiziert wurde. Alle anderen Authentifizierungsmethoden werden deaktiviert.
PidFile
Diese Option erlaubt es Ihnen, die Datei, die den Process Identifier
Ihres SSH-Servers enthält, zu spezifizieren.
Der Defaultwert liegt bei »/var/run/sshd.pid«.
Port
Gibt die Portnummer an, auf der der Server lauscht. Sie können auch
mehrere Ports angeben
PrintLastLog
Falls Sie diesem Schlüsselwort das Argument »yes« übergeben, zeigt
der SSH Server das Datum und die Zeit des letzten erfolgreichen
Logins eines Users.
Der Defaultport ist 22.
Der Defaultwert ist »yes«.
PrintMotd
Gibt an, ob der SSH Server die Datei /etc/motd ausgeben soll, wenn sich
ein User interaktiv einloggt
Der Defaultwert ist »yes«.
Protocol
Gibt die Version des Protokolls an, die der SSH-Server benutzen soll.
Verfügbare Protokollversionen sind 1 und 2. Sie können auch beide
Versionen angeben. Dann müssen Sie diese aber durch ein Komma
voneinander trennen.
Der Defaultwert liegt bei »2,1«.
Tabelle 5.6 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
272
5 Verschlüsselung
Schlüsselwort
Beschreibung
PubkeyAuthentication
Hiermit können Sie Public-Key-Authentication erlauben. Beachten Sie
dabei aber, dass dies nur von Protokoll 2 unterstützt wird.
Der Defaultwert liegt bei »yes«.
ReverseMappingCheck
Diese Option stellt eine Art »kleinen Spoofingschutz« des SSH-Servers
dar, da es ihn mit diesem Schlüsselwort dazu anweist, den Namen des
Remotehosts und die dazugehörige IP-Adresse zu verifizieren, indem
es überprüft, ob Antwortpakete zu derselben IP zurückgehen.
Der Defaultwert ist »no«.
RhostsRSAAuthentication
Gibt an, ob rhosts- oder /etc/hosts.equiv-Authentifizierung zusammen
mit erfolgreicher RSA Host-Authentifizierung erlaubt ist.
Der Defaultwert ist »no«.
Diese Option bezieht sich nur auf Protokoll 1.
RSAAuthentication
Gibt an, ob reine RSA-Authentifizierung erlaubt ist.
Der Defaultwert ist »yes«.
Diese Option bezieht sich nur auf Protokoll 1.
ServerKeyBits
Hierbei können Sie die Anzahl der Bits im flüchtigen Serverschlüssel
des Protokoll Version 1 definieren.
Die minimale Anzahl beläuft sich auf 512 Bit. Per Default besteht dieser Key aus 768 Bit.
StrictModes
Mit Hilfe dieser Option können Sie Ihren SSH-Server anweisen, den
Modus und den Ownership der Dateien und des Homeverzeichnisses
des Users, der sich einloggen will, zu überprüfen.
Der Defaultwert hierfür ist »yes«.
Subsystem
Dieses Schlüsselwort konfiguriert ein externes Subsystem (wie zum
Beispiel den File Transfer Daemon – FTPD). So implementiert zum
Beispiel das Argument »stfp-server« den »sftp« File Transfer Server
als Subsystem.
Per Default werden keine Subsysteme gestartet. Beachten Sie bitte,
dass sich dieses Schlüsselwort auf die Benutzung des Protokolls
Version 2 bezieht.
SyslogFacility
Hiermit können Sie den Facility Code für Logging-Nachrichten
angeben. Mögliche Werte für dieses Argument sind:
DAEMON
USER
AUTH
LOCAL0
LOCAL1
LOCAL2
LOCAL3
LOCAL4
Tabelle 5.6 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
5.2 OpenSSH
Schlüsselwort
273
Beschreibung
LOCAL5
LOCAL6
LOCAL7
Der Defauftwert ist AUTH.
UseLogin
Sie können mit dieser Option festlegen, ob das Prgramm login für interaktive Sitzungen verwendet werden soll oder nicht. Bedenken Sie, dass
login niemals für die Ausführung von Remotebefehlen benutzt wird.
X11DisplayOffset
Sie können hiermit die erste für Ihren SSH-Server verfügbare Displaynummer für X11 Forwarding spezifizieren. Damit wird gewährleistet,
dass der SSH Server die »wirklichen« X11-Server nicht stört.
X11Forwarding
Gibt an, ob X11 Forwarding erlaubt ist. Wenn Sie dieses Feature verbieten, heißt das noch lange nicht, dass kein X11 Forwarding stattfindet, da jeder User sein eigenes Forwardingtool installieren kann.
XauthLocation
Gibt an, wo sich das Programm xauth befindet
Der Defaultwert ist »no«.
Der Defaultwert liegt bei 10.
Der Defaultwert ist »no«.
Der Defaultwert ist /usr/X11R6/xauth.
Tabelle 5.6 Verfügbare Schlüsselwörter (Forts.)
Beispielkonfigurationsdatei
Da wir nun alle verfügbaren Schlüsselwörter für die Serverkonfigurationsdatei
kennen und verstehen gelernt haben, sollten wir einen Blick auf eine Beispielkonfigurationsdatei werfen.
# $OpenBSD: sshd_config, v 1.38 2001/04/15 21:41:29 deraadt Exp $
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# This is the sshd server system-wide configuration file. See
sshd(8)
# for more information.
Port 22
Protocol 1,2
ListenAddress 209.100.190.116
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ServerKeyBits 1024
LoginGraceTime 500
KeyRegenerationInterval 7200
PermitRootLogin no
IgnoreRhosts yes
Sandini Bib
274
5 Verschlüsselung
StrictModes yes
X11Forwarding no
X11DislpayOffset 10
PrintMotd yes
PrintLastLog yes
KeepAlive no
#
# Loggingeinstellungen
#
SyslogFacility AUTH
LogLevel INFO
#
# Ende Loggineinstellungen
#
RhostsAuthentication no
RhostsRSAAuthentication no
HostbasedAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
KerberosAuthentication no
KerberosOrLocalPasswd yes
AFSTokenPassing no
KerberosTicketCleanup no
CheckMail yes
UseLogin no
MaxStartups 20:50:100
Banner /etc/ssh/banner
ReverseMappingCheck yes
Subsystemsftp/usr/lib/ssh/sftp-server
Wir werden nun nicht auf die einzelnen Schlüsselwörter eingehen, da diese bereits ausführlich besprochen worden sind.
5.2.3
Wichtige Dateien
Sicherlich haben Sie bemerkt, dass ich bei der Besprechung der Serverkonfigurationsdatei jede Menge anderer Dateien erwähnt habe, die für den erfolgreichen
Betrieb einer SSH-Umgebung ebenfalls wichtig sind. Wir werden uns nun einige
der wichtigsten Dateien etwas genauer anschauen. Die Dateien, deren Syntax
nicht zu wichtig ist, werden wir kürzer besprechen.
Sandini Bib
5.2 OpenSSH
275
AUTHORIZED_KEYS
Diese Datei enthält alle RSA-Schlüssel, die für RSA-Authentifizierung unter Protokoll Version 1 benutzt werden dürfen. Standardmäßig lautet die Adresse dieser
Datei:
$HOME/.ssh/authorized_keys
Unter Protokoll Version 2 enthält diese Datei alle RSA- und DSA-Schlüssel, die
für Public Key-Authentifizierung benutzt werden dürfen. Sie ist unter folgendem
Namen zu finden:
$HOME/.ssh/authorized_keys2
Formatierung
An dieser Stelle werden wir kurz die Formatierung dieser Datei besprechen und
die verfügbaren Optionen dazu kennen lernen.
Jede Zeile in dieser Datei hat einen Schlüssel. Falls es sich bei einem Schlüssel um
einen RSA Public Key handelt, so besteht diese Zeile aus folgenden Feldern, welche durch Leerzeichen voneinander getrennt sind:
options
bits
exponent
modulus
comment
Jeder Public Key unter Protokoll Version 2 besteht wiederum aus diesen Feldern:
options
keytype
base64 encoded key
comment
Die »options«-Felder sind dabei optional. Ob sie erscheinen hängt davon ab, ob
eine Zeile mit einer Zahl beginnt oder nicht (»options«-Felder beginnen niemals
mit einer Zahl). Die Felder »bits«, »exponent«, »modulus« und »comment« ergeben den RSA-Schlüssel für Protokoll Version 1.
Im Falle von Protokoll Version 2 kann das Feld »keytype« die beiden folgenden
Werte annehmen:
1. ssh-dss
2. ssh-rsa
Sandini Bib
276
5 Verschlüsselung
3. Beachten Sie dabei aber bitte die Größe und Länge dieser Zeilen. Da die
benutzten RSA »key modulus« sehr groß sind, sind die einzelnen Zeilen in
dieser Datei mehrere hundert Bytes lang. Weil es schier unmöglich ist, diese
gewaltige Menge an Zeichen abzutippen, sollten Sie folgende Dateien editieren und die gewünschten Einträge in die authorized_key-Datei übertragen:
identity.pub
id_dsa.pub
id_rsa.pub
Falls die erwähnten »options«-Felder vorhanden sind, bestehen Sie aus Optionsspezifikationen, die durch Kommas voneinander abgetrennt sein. Welche Optionsspezifikationen dabei zur Verfügung stehen, können Sie Tabelle 5.7 entnehmen.
Optionsspezifikation
Beschreibung
from=»Patternliste«
Gibt an, dass zusätzlich zur RSA-Authentifizierung der kanonische Name des Remotehosts in einer durch Kommas getrennten
Liste von Pattern vorhanden sein muss. Sie können dabei auch
die Wildcards »*« (all) und »?« (any) benutzen. Diese Liste kann
ebenfalls negierte Pattern erhalten (Eine Negierung erreichen
Sie, indem Sie »!« vor den Pattern stellen.). Falls der kanonische
Hostname auf ein negiertes Pattern zutrifft, wird der betreffende
Schlüssel nicht akzeptiert. Damit wird es für einen Cracker, der
einen akzeptierten Schlüssel gestohlen hat, schwieriger, diesen
einzusetzen, da die Rechner (bzw. die Rechnernamen), die den
Schlüssel benutzen dürfen, durch die eben vorgestellte Liste
begrenzt werden können.
Command=»Befehl«
Hiermit geben Sie an, dass der von Ihnen spezifizierte Befehl
jedes Mal ausgeführt wird, wenn der Schlüssel für eine Authentifizierung genutzt wird. Falls der User einen Befehl übergibt,
wird dieser ignoriert. Wenn die Verbindung einen pty verlangt,
wird der Befehl dort ausgeführt. Andernfalls wird er ohne tty
ausgeführt. Falls Sie jedoch einen sauberen 8 Bit Kanal wünschen, dürfen Sie einen pty verlangen oder sollten no-pty spezifizieren. Sie können auch Anführungszeichen in Ihren Befehl einbauen, wenn Sie diese mit einem Backslash anführen.
Sie können diese Option nutzen, um RSA- Schlüssel davon abzuhalten, bestimmte Operationen durchzuführen.
Environment=
»NAME=Wert«
Falls sich ein User mit Hilfe des betreffenden Schlüssels einloggt,
wird der hier angegebene String seiner ENV hinzugefügt.
Beachten Sie hierbei aber, dass die durch diese Option spezifizierten Variablen die Defaultvariablen der ENV überschreiben.
Tabelle 5.7 Verfügbare Optionsspezifikationen
Sandini Bib
5.2 OpenSSH
277
Optionsspezifikation
Beschreibung
no-port-forwarding
Diese Option verbietet TCP/IP-Weiterleitung, falls der betreffende Schlüssel für die Authentifizierung genutzt wurde. Jede
Weiterleitungsanfrage des Clients wird mit einer Fehlermeldung
beantwortet.
no-X11-forwarding
Hierbei wird X11-Weiterleitung verboten, falls der betreffende
Schlüssel für die Authentifizierung genutzt wurde. Auch hier
erhält der Client einer Fehlermeldung.
no-agent-forwarding
Falls der betreffende Schlüssel für die Authentifizierung genutzt
wurde, wird »authentication agent« Weiterleitung untersagt.
no-pty
Mit dieser Option verhindern Sie, dass dem User ein tty zugewiesen wird.
Permitopen=»Host:Port«
Hiermit können Sie lokale Portweiterleitung (ssh -L) so weit limitieren, dass nur noch zum angegebenen Host und dem spezifizierten Port eine Verbindung aufgebaut werden kann. Falls Sie
diese Option mehrmals aufführen möchten, müssen Sie die einzelnen Einträge durch Kommas voneinander trennen.
Tabelle 5.7 Verfügbare Optionsspezifikationen (Forts.)
SSH_KNOWN_HOSTS
In folgenden Dateien finden Sie Informationen über die öffentlichen Schlüssel der
bekannten Hosts:
/etc/ssh/ssh_known_hosts (Protokoll Version 1)
/etc/ssh/ssh_known_hosts2 (Protokoll Version 2)
$HOME/.ssh/known_hosts (Protokoll Version 1)
$HOME/.ssh/known_hosts2 (Protokoll Version 2)
Formatierung
Jede Zeile in einer dieser Dateien enthält folgende Felder:
hostnames
bits
exponent
modulus
comment
Diese Felder werden durch Kommas voneinander getrennt.
Das Feld »hostnames« besteht aus einer Liste von Pattern, die durch Kommas
voneinander abgetrennt werden. Jedes aufgeführte Pattern trifft abwechselnd auf
den kanonischen Hostnamen (wenn ein Client authentifiziert wird) oder auf einen vom User angegebenen Namen (wenn ein Server authentifiziert wird). Sie
können für die Pattern die Wildcards »*« (all) und »?« (any) benutzen oder sie
Sandini Bib
278
5 Verschlüsselung
durch Voranstellen des !-Operators negieren. Falls ein Hostname auf ein negiertes Pattern zutrifft, wird dieses von der betreffenden Zeile nicht akzeptiert.
Die Felder »bits«, »exponent« und »modulus« werden direkt aus dem RSA-Hostschlüssel entnommen. Das optionale Feld »comment« wird nicht benutzt.
Wenn die Authentifizierung durchgeführt wird, wird die Authentifizierung akzeptiert, sobald eine zutreffende Zeile einen passenden Schlüssel aufweist. Daher
ist es zulässig (aber nicht empfehlenswert), mehrere Zeilen oder unterschiedliche
Hostschlüssel für denselben Namen zu haben. Dies wird unvermeidlich geschehen, falls Sie die Kurzform von verschiedenen Hostnamen aus verschiedenen Domänen in dieselbe Datei stecken.
5.2.4
Alle Dateien
Nachdem wir nun die zwei »wichtigsten« Dateien besprochen haben, werden wir
im Folgenden eine Art Referenz für alle Dateien schaffen. Wir werden dabei nicht
zu tief in die Syntax der jeweiligen Files eingehen, sondern lediglich kurz die
wichtigsten Informationen darüber beschreiben. In dieser Referenz finden Sie alle
Dateien wieder. Auch diejenigen, die wir bereits ausführlich besprochen haben.
/etc/ssh/sshd_config
Dies ist die Serverkonfigurationsdatei. Diese Datei sollte nur für den Superuser
beschreibbar sein.
/etc/ssh/ssh_host_key, ssh_host_dsa_key, ssh_host_rsa_key
In diesen Dateien befindet sich der private Teil der Hostschlüssel. Sie sollten
Eigentum des Superusers sein, der auch der Einzige sein sollte, der diese Dateien
lesen darf.
/etc/ssh/ssh_host_key.pub, ssh_host_dsa_key.pub,
ssh_host_rsa_key.pub
Der öffentliche Teil der Hostschlüssel befindet sich in diesen Dateien. Sie sollten
von jedermann eingesehen, aber nur vom Superuser geändert werden dürfen. Die
Inhalte sollten auf die entsprechenden privaten Teile passen. Sie können diese
Dateien mit dem Programm ssh-keygen generieren, das wir noch ausführlich besprechen werden.
/etc/ssh/primes
Diese Datei enthält »Diffie-Hellman«-Gruppen, welche für den »Diffie-Hellman
Group Exchange« benötigt werden.
Sandini Bib
5.2 OpenSSH
279
/var/run/sshd.pid
In dieser Datei befindet sich die Process ID (PID) des als letzten gestarteten SSH
Servers.
$HOME/.ssh/authorized_keys
Die RSA-Schlüssel, die ein User zum Einloggen in seinen Account benutzten
kann, befinden sich in dieser Datei. Sie sollte nur vom Superuser eingesehen werden dürfen.
$HOME/.ssh/authorized_keys2
Diese Datei listet die öffentlichen Schlüssel (RSA und DSA) auf, die zum Einloggen in einen Useraccount benutzt werden können. Auch dieses File sollte nur
vom Superuser eingesehen werden dürfen.
/etc/ssh/ssh_known_hosts, $HOME/.ssh/known_hosts
Diese Dateien werden befragt, wenn rhosts zusammen mit RSA Hostauthentifizierung benutzt wird, um den öffentlichen Schlüssel eines Hosts zu überprüfen.
Der Schlüssel muss in einer dieser Dateien aufgelistet sein, ansonsten wird er
nicht akzeptiert. Der Client benutzt dieselben Dateien, um sicherzugehen, dass er
sich mit dem richten Remotehost verbindet. Diese Dateien sollten nur vom Superuser verändert werden dürfen.
/etc/ssh/ssh_known_hosts2, $HOME/.ssh/known_hosts2
Diese Dateien werden befragt, wenn Protokoll Version 2 hostbasierende Authentifizierung genutzt wird, um den öffentlichen Schlüssel eines Host zu überprüfen.
Der Schlüssel muss in einer dieser Dateien aufgelistet sein, ansonsten wird er
nicht akzeptiert. Der Client benutzt dieselben Dateien, um sicherzugehen, dass er
sich mit dem richtigen Remotehost verbindet. Diese Dateien sollten nur vom Superuser verändert werden dürfen.
/etc/nologin
Falls diese Datei existiert, ist es nur dem User Root erlaubt, sich einzuloggen. Alle
Verbindungsanfragen, die nicht vom Superuser gestellt werden, werden abgelehnt. dabei bekommt jeder, der sich einzuloggen versucht, den Inhalt dieser Datei angezeigt.
/etc/hosts.allow, /etc/hosts.deny
Wenn Ihr Server mit LIBWRAP-Unterstützung erstellt wurde, können Sie die TCP
Wrapper Zugriffskontrollen in diesen Dateien definieren.
$HOME/.rhosts
Diese Datei enthält in jeder Zeile genau ein »Host-Username« Paar, die durch Kommas voneinander getrennt ist. Der User, der in diesem Paar erwähnt wird, darf sich
Sandini Bib
280
5 Verschlüsselung
an dem angegebenen Host ohne Passwort anmelden. Diese Datei wird auch von den
Servern rlogind und rshd genutzt. Sie können auch netgroups definieren. Entweder der Host- oder der Username können durch ein »+@Gruppenname« angegeben
werden, um alle Hosts oder alle User in einer Gruppe zu spezifizieren.
$HOME/.shosts
Diese Datei ist das SSH-Gegenstück zu $HOME/.rhosts, wird aber nicht von den
Servern rlogind und rshd genutzt. Falls Sie diese Datei also benutzen, ist ein Zugriff nur via SSH möglich.
/etc/hosts.equiv
Dieses File wird während einer .rhosts-Authentifizierung genutzt. Im einfachsten
Fall enthält sie lediglich einen Hostnamen pro Zeile. Die User auf einem der aufgeführten Rechner dürfen Sie ohne Passwort einloggen, falls Sie auch User auf
dem Remotesystem sind. Dieser Hostname kann aber auch von einem Benutzernamen gefolgt werden. Solche Benutzer haben das Recht, sich unter jedem Usernamen (außer root) auf dem Remotesystem einzuloggen. Sie können mit der Syntax +@group auch netgroups definieren. Um Einträge zu negieren, können Sie den
Operator »-« benutzen.
Bedenken Sie aber dabei, dass es sehr gefährlich sein kann, wenn Sie einen Usernamen in dieser Datei aufführen, da sich dieser – wie bereits erwähnt – unter jedem Benutzernamen anmelden kann.
/etc/ssh/shosts.equiv
Diese Datei funktioniert nach demselben Prinzip wie /etc/hosts.equiv mit dem Unterschied, dass hierbei rsh-, rlogin- und ssh-Logins betroffen sind.
$HOME/.ssh/environment
Falls diese Datei existiert, werden die Einträge (NAME=Wert) in die ENV übernommen. Diese Einträge überschreiben bereits vorhandene Umgebungsvariablen.
$HOME/.ssh/rc
Wenn diese Datei existiert, werden die darin aufgeführten Syntaxzeilen von der
Shell /bin/sh ausgeführt. Dies geschieht, nachdem die Umgebungsvariablen gelesen wurden, aber bevor die Shell des Benutzers gestartet wird.
Die Hauptaufgabe dieses Files ist es, Startroutinen, die laufen müssen, bevor das
Homeverzeichnis des Users zugänglich ist, auszuführen.
Ein Beispiel für die Einträge dieser Datei finden wir in dem Manual:
if read proto cookie; then
echo add $DISPLAY $proto $cookie | xauth -q fi
Sandini Bib
5.2 OpenSSH
281
Falls diese Datei nicht existiert, wird stattdessen das File /etc/ssh/sshrc ausgeführt.
Wenn auch diese Datei nicht verfügbar ist, wird xauth benutzt, um den Cookie zu
speichern.
/etc/ssh/sshrc
Diese Datei wird ausgeführt, falls die Datei $HOME/.ssh/rc nicht verfügbar ist,
und kann benutzt werden, um globale Startroutinen zu definieren.
5.2.5
Der Client
Nachdem wir den SSH-Server nun ausführlich besprochen haben und damit in
der Lage sind, einen sicheren Loginserver zu installieren, sollten wir uns den
Client dazu näher anschauen.
Der Client ermöglicht es, sich in einem Remotesystem, auf dem ein SSH Server
läuft, einzuloggen und dort Befehle auszuführen. Falls Sie die Wahl haben, sollten Sie diesen Client auf jeden Fall Programmen wie rsh und rlogin vorziehen, da
die Verbindungen über SSH über einen sicheren, verschlüsselten Kanal laufen.
Obwohl wir die grundsätzlichen Abläufe bei einem Login bereits ausführlich besprochen haben, sollten wir einen Blick auf die Geschehnisse nach dem erfolgreichen Login anschauen.
Sitzung
Nachdem der Benutzer seine Identität gegenüber dem Client bewiesen und der
Server den User akzeptiert hat, führt der Server entweder den übergebenen Befehl aus oder gibt dem Benutzer eine normale Shell. Falls der User einen pty
(Pseudo-Terminal) zugewiesen bekommen hat, hat er die Möglichkeit so genannte Escape Characters zu benutzen.
Falls aber kein pty zugewiesen wurde, ist die Sitzung transparent und kann zur
zuverlässigen Übertragung von binären Daten dienen. Sie haben aber auch die
Möglichkeit durch das Setzen des Escape Characters »none« eine transparente
Sitzung zu erzeugen, obwohl Sie einen Terminal zugewiesen bekommen haben.
Escape Characters
Wie wir bereits gesehen haben, können Sie eine Vielzahl an Funktionen benutzen,
falls Sie einen Pseudo-Terminal zugewiesen bekommen haben. Diese Funktionen
können Sie über die Escape Characters ansprechen, welche Sie mit einer Tilde (~)
einleiten. Falls Sie die Funktionen der Tilde wie bei einer lokalen Shell nutzen
wollen, können Sie dies erreichen, indem Sie die Tilde doppelt aufführen (~~).
Wie wir im Laufe dieses Kapitels noch erfahren werden, können Sie diese Escape
Characters in der Konfigurationsdatei oder durch die Option -e ändern. Tabelle
Sandini Bib
282
5 Verschlüsselung
5.8 listet alle verfügbaren Standard-Escapes auf und gibt Ihnen zu jedem Punkt
eine kurze Beschreibung.
Escape Character
Beschreibung
~.
Verbindung trennen
~^Z
Hintergrund SSH
~#
Listet die weitergeleiteten Verbindungen auf
~&
Hintergrund SSH bei einem Logout, wenn auf weitergeleitete Verbindungen oder zu beendende X11-Sitzungen gewartet wird (Protokoll
Version 1)
~?
Gibt eine Liste von verfügbaren »Escape Characters« aus
~R
Erbittet eine Rejustierung der Verbindung
Tabelle 5.8 Verfügbare »Escape Characters«
X11- und TCP-Weiterleitungen
Wenn der Benutzer X11 benutzt, wird die Verbindung zur X11-Anzeige automatisch zum Remotesystem weitergeleitet, so dass alle X11-Programme, die von der
Shell oder über einen Befehl gestartet werden, durch den verschlüsselten Kanal
gehen. Die Verbindungen zum echten X-Server werden dabei vom lokalen System initialisiert und verwirklicht. Sie können diese Weiterleitungen in der Konfigurationsdatei und über einen Befehl konfigurieren.
Server-Authentifizierung
Obwohl wir die Authentifizierung schon ausführlich besprochen haben, möchte
ich nochmals kurz darauf eingehen.
SSH verfügt über eine Datenbank, die Informationen zur Identifizierung alle bekannten Rechner enthält. In welchen Files diese Informationen untergebracht
sind, werden Sie im Folgenden erfahren, falls Sie mehr Informationen über die
einzelnen Dateien wünschen, werfen Sie einen Blick auf den bereits besprochenen
Abschnitt »Wichtige Dateien«.
$HOME/.ssh/known_hosts, $HOME/.ssh/known_hosts2
Diese Dateien enthalten Informationen über die RSA-Hostschlüssel. Informationen, die für Protokoll Version 1 interessant sind, werden in der Datei known_hosts
gespeichert, wohingegen Informationen zu Protokoll Version 2 in dem File
known_hosts2 zu finden sind.
/etc/ssh/ssh_known_hosts, /etc/ssh/ssh_known_hosts2
Falls SSH die benötigten Daten in den vorhergehenden Dateien nicht finden
kann, werden diese (globalen) Files zusätzlich überprüft. Wobei alle neuen Hosts
automatisch zu den benutzerspezifischen Dateien hinzugefügt werden.
Sandini Bib
5.2 OpenSSH
283
Falls sich die Identifikation eines Hosts jemals ändert, erhält der Benutzer darüber eine Meldung. Außerdem wird die Passwort-Authentifizierung deaktiviert,
damit das Benutzerkennwort nicht von einem Trojanischen Pferd abgefangen
werden kann.
Aufruf
Der allgemeine Aufruf des SSH-Clients erfolgt über folgenden Befehl:
Linux:~# ssh [Optionen] [Hostname | User@Hostname] [Befehl]
Die Optionen zu diesem Befehl werden Sie im folgenden Abschnitt kennen lernen.
Optionen
Der SSH-Client ist ein sehr komplexes und umfangreiches Tool. Um die Features
dieses Programms voll ausschöpfen zu können, sollten Sie alle verfügbaren Optionen kennen. Tabelle 5.9 listet alle verfügbaren Optionen auf und gibt Ihnen
eine kurze Beschreibung zu jeder aufgeführten Option.
Option
Beschreibung
-a
Hiermit verhindern Sie, dass die Verbindung des »Authentication
Agent« weitergeleitet wird.
-A
Diese Option aktiviert die Weiterleitung des »Authentication Agent«.
-c blowfish | 3des
Spezifiziert den Cipher-Algorithmus, der für die Verschlüsselung der
Sitzung benutzt werden soll.
3des (triple-des) gilt als sicher und benutzt drei verschiedene Schlüssel.
blowfish ist ebenfalls ein sehr sichere Algorithmus, aber wesentlich
schneller als triple-des.
Per Default wird der triple-des-Algorithmus verwendet.
-c cipher-spec
Zusätzlich können Sie unter Protokoll Version 2 eine Liste von CipherAlgorithmen übergeben. Dabei müssen Sie die einzelnen Felder durch
Kommas voneinander trennen.
-e ch | ^ch | none
Hiermit können Sie den »Escape Character« setzen (Default: »~«). Dieser wird nur erkannt, wenn er am Anfang der Zeile übergeben wird.
Falls Sie »none« übergeben, wird die Sitzung transparent.
-f
Diese Option bittet SSH kurz vor der Ausführung des Befehls in den Hintergrund zu gehen. Dies kann sehr nützlich sein, falls SSH nach einem
Passwort verlangt, der Benutzer das Programm aber nur im Hintergrund
laufen lassen will. Diese Option impliziert die Option »-n«.
Es wird empfohlen, X11-Programme auf der Remoteseite folgendermaßen zu starten:
ssh -f host xterm
Tabelle 5.9 Verfügbare Optionen
Sandini Bib
284
5 Verschlüsselung
Option
Beschreibung
-g
Erlaubt Remotesystemen, sich zu lokal weitergeleitetem Port zu verbinden
-i Identifikations_
Datei
Diese Option erlaubt es Ihnen, die Datei, aus der der private Schlüssel
für RSA- oder DSA-Authentifizierung gelesen wird, zu spezifizieren.
Per Default ist diese Datei unter folgendem Namen zu finden:
$HOME/.ssh/identity
Sie können diese Datei aber auch über die Konfigurationsdatei angeben.
-k
Hiermit deaktivieren Sie die Weiterleitung von Kerberos Tickets und
AFS Tokens. Auch diese Option lässt sich über die Konfigurationsdatei
angeben.
-l Loginname
Falls Sie sich nicht unter Ihrem eigenen Usernamen am Remotesystem
anmelden wollen, können Sie mit dieser Option den gewünschten Username (unter dem Sie sich anmelden werden) angeben. Auch diese
Option kann in der Konfigurationsdatei spezifiziert werden.
-m mac_spec
Nur für Protokoll Version 2
Hiermit können Sie eine Liste von MAC (message authentication code)
Algorithmen übergeben, wobei Sie die einzelnen Felder durch Kommas
voneinander abtrennen müssen.
-n
Mit dieser Option können Sie verhindern, dass von der Standardeingabe gelesen wird. Sie müssen diese Option benutzen, wenn Sie wollen,
dass SSH im Hintergrund läuft (zum Beispiel für X11 Programme).
-N
Dadurch wird verhindert, dass Remotebefehle ausgeführt werden. Sie
können diese Option nutzen, falls Sie nur Ports weiterleiten wollen.
-o Option
Hiermit können Sie Optionen im Format der Konfigurationsdatei übergeben. Dies ist sehr hilfreich, falls Sie eine Option benötigen, für die es
keinen separaten Kommandozeilenaufruf gibt.
-p Port
Gibt den Port an, auf den Sie sich am Remotesystem anmelden wollen.
-P
Bei Verwendung dieser Option wird für rausgehende Verbindungen
ein nicht privilegierter Port benutzt. Sie können diese Option nutzen,
falls Ihre Firewall den Port bis zur 1024er Grenze sperrt.
-q
Quiet Mode. Nachdem Sie diese Option angegeben haben, werden nur
noch fatale Fehler angezeigt. Alle anderen Meldungen werden unterdrückt.
-s
Sie können diese Option nutzen, um ein Subsystem (zum Beispiel sftpd)
auf einem Remotesystem aufzurufen.
-t
Hiermit bekommen Sie einen Pseudo-Terminal zugewiesen. Falls Sie
diese Option mehrmals übergeben, bekommen Sie einen tty zugewiesen, selbst wenn SSH keinen lokalen Terminal besitzt.
-T
Zeigt die Zuordnung für Pseudo-Terminals
Tabelle 5.9 Verfügbare Optionen (Forts.)
Sandini Bib
5.2 OpenSSH
285
Option
Beschreibung
-v
Verbose Mode. Damit erreichen Sie, dass SSH Debugnachrichten über
die erreichten Fortschritte ausgibt. Falls Sie diese Option mehrmals
übergeben, erhöht sich die Ausgabe noch weiter.
-x
Zeigt X11-Weiterleitungen
-X
Aktiviert X11-Weiterleitungen. Sie können dies aber auch in der Konfigurationsdatei aktivieren.
-C
Falls Sie eine langsame Leitung (zum Beispiel eine Modemleitung), können Sie mit dieser Option alle Daten (STDIN, STDOUT, Dateien für
X11-Weiterleitungen und TCP/IP-Verbindungen) komprimieren. Bei
schnellen Leitungen sollten Sie diese Option aber nicht benutzen, da
dies nur zu einer Verlangsamung führen würde.
-L Port:Host:Hostport
Gibt an, dass der übergebene Port auf dem lokalen Rechner (Client)
zum Rechner und Port auf dem Remotesystem weitergeleitet wird.
Beachten Sie dabei, dass Sie für IPv6-Adressen eine andere Syntax verwenden sollten:
port/host/hostport
-1
Nur Protokoll Version 1 wird verwendet.
-2
Nur Protokoll Version 2 wird verwendet.
-4
Es werden nur IPv4-Adressen benutzt.
-6
Es werden nur IPv6-Adressen benutzt.
Tabelle 5.9 Verfügbare Optionen (Forts.)
Konfigurationsdateien
SSH liest die Konfigurationen aus den folgenden Quellen und in der aufgeführten
Reihenfolge:
1. Kommandozeilenoptionen (Tabelle 5.9)
2. Benutzerkonfigurationsdatei
$HOME/.ssh/config
3. Systemweite Konfigurationsdatei
/etc/ssh/ssh_config
4. Da wir die Kommandozeilenoptionen bereits kennen gelernt haben, können
wir uns nun mit den Konfigurationsdateien beschäftigen.
5. Sie können für jeden Parameter in diesen Dateien mehrere Werte angeben,
wobei immer der erste passende benutzt wird. Sie sollten daher die hostspezifischen Deklarationen am Anfang der Zeile unterbringen.
Syntax
Die Konfigurationsdatei besteht aus Zeilen, die das Format »Schlüsselwort Argumente« haben. Die Dateien enthalten Sektionen, die durch die Spezifikationen des
Sandini Bib
286
5 Verschlüsselung
Schlüsselwortes »Host« eingeschlossen werden. Eine solche Sektion wird nur für
den Hosts, der auf eine der gemachten Spezifikationen zutrifft, angewendet. Tabelle 5.10 stellt Ihnen die verfügbaren Schlüsselwörter vor und gibt zu jedem
Punkt eine kleine Beschreibung.
Schlüsselwort
Beschreibung
Host
Begrenzt die folgenden Deklarationen bis zum nächsten Hostschlüsselwort. Diese Deklarationen gelten nur für einen Host, der auf einen der
nachfolgenden Patterns zutrifft. Sie können für die Deklaration der
Patterns die Wildcard »*« (all) und »?« (any) benutzen.
AFSTokenPassing
Diese Option ist nur für Protokoll Version 1 nutzbar und gibt an, ob ein
AFS Token zum Remotesystem geleitet werden soll oder nicht.
Das übergebende Argument für dieses Schlüsselwort muss »yes« oder
»no« sein.
BatchMode
Hiermit deaktivieren Sie die Abfrage von Passwörtern und Passphrases.
Diese Option ist sehr nützlich, falls Sie ein Skript schreiben wollen.
Das übergebende Argument für dieses Schlüsselwort muss »yes« oder
»no« sein.
Der Defaultwert ist »yes«.
CheckHostIP
Wenn Sie diese Flag setzen, wird SSH zusätzlich die Host IP-Adresse im
known_hosts-File überprüfen. Damit ist SSH in der Lage festzustellen, ob
sich der Hostschlüssel durch DNS Spoofing geändert hat.
Der Defaultwert ist »yes«, das heißt die Überprüfung wird per Default
durchgeführt.
Cipher
Hiermit geben Sie den Cipher-Algorithmus an, mit dem die Sitzungen in
Protokoll Version 1 verschlüsselt werden sollen. Zurzeit werden folgende
Algorithmen unterstützt:
blowfish
3des
Per Default wird der »3des«-Algorithmus benutzt.
Ciphers
Hiermit geben Sie die Cipher-Algorithmen für Protokoll Version 2 an.
Falls Sie mehrere Angaben machen, müssen Sie die einzelnen Felder mit
Kommas voneinander trennen.
Der Default ist: »aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, arcfour,
aes192-cbc, aes256-cbc«
Compression
Durch dieses Schlüsselwort legen Sie fest, ob die Daten komprimiert werden sollen. Das zu übergebende Argument muss »yes« oder »no« sein.
Der Defaultwert ist »no«.
Beachten Sie, dass Sie diese Option nur für extrem langsame Leitungen
(Modem) benutzen sollen, da Sie ansonsten die Prozesse nur künstlich verlangsamen.
Tabelle 5.10 Verfügbare Schlüsselwörter
Sandini Bib
5.2 OpenSSH
287
Schlüsselwort
Beschreibung
CompressionLevel
Falls Sie sich für die Benutzung von Kompression entschieden haben, können Sie mit diesem Schlüsselwort den Level dazu bestimmen.
Das Argument hierzu muss ein Integerwert zwischen 1 und 9 sein, wobei 1
die schnellste Kompression darstellt und 9 die beste (aber auch langsamste).
Das Defaultlevel ist 6.
Diese Option ist nur für Protokoll Version 1 verfügbar.
ConnectionAttempts
Gibt die Anzahl der Verbindungsversuche (einer pro Sekunde) an, bevor
das Programm zu rsh zurückfällt oder abbricht. Das Argument, das Sie
hierbei verwenden, muss ein Integerwert sein.
Der Defaultwert liegt bei 4.
EscapeChar
Mit diesem Schlüsselwort können Sie den »Escape Character« bestimmen
(Default: »~«). Das Argument sollte ein einzelnes Zeichen gefolgt von
einem Buchstaben sein. Falls Sie »none« übergeben, erhalten Sie eine transparente Verbindung.
FallBackToRsh
Falls eine Verbindung mit SSH wegen eines »connection refused error«
(z.B. kein Remoteserver verfügbar) abgelehnt wird, können Sie mit diesem
Schlüsselwort festlegen, ob stattdessen eine Verbindung mit rsh aufgebaut
werden soll.
Der Defaultwert ist »no«. Das heißt, dass keine Verbindung aufgebaut wird.
ForwardArgent
Gibt an, ob die Verbindung zum »authentication agent« zum Remotesystem weitergeleitet werden soll
Der Defaultwert ist »no«.
ForwardX11
Gibt an, ob X11-Verbindungen automatisch über den sicheren und verschlüsselten Kanal weitergeleitet werden sollen
GatewayPorts
Hiermit können Sie bestimmen, ob es Remotesystemen erlaubt ist, sich an
lokal weitergeleitete Ports zu verbinden.
Der Defaultwert ist »no«.
Der Defaultwert ist »no«.
GlobalKnownHostsFile
Mit diesem Schlüsselwort können Sie die Adresse der globalen Hostschlüsseldatenbank für Protokoll Version 1 angeben, falls diese nicht unter
/etc/ssh/ssh_known_hosts zu finden ist.
GlobalKnownHostsFile2
Mit diesem Schlüsselwort können Sie die Adresse der globalen Hostschlüsseldatenbank für Protokoll Version 2 angeben, falls diese nicht unter
/etc/ssh/ssh_known_hosts2 zu finden ist.
HostbasedAuthentication
Sie können mit diesem Schlüsselwort bestimmen, ob rhostsbasierende
Authentifizierung zusammen mit Public Key-Authentifizierung genutzt
werden soll. Diese Option ist gleichbedeutend mit dem Schlüsselwort
RhostsRSAAuthentication und benötigt Protokoll Version 1.
Der Defaultwert ist »yes«.
Tabelle 5.10 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
288
5 Verschlüsselung
Schlüsselwort
Beschreibung
HostKeyAlgorithms
Hiermit geben Sie die Schlüsselalgorithmen für Protokoll Version 2 an,
die der Client benutzen soll.
Der Defaultwert ist »ssh-rsa, ssh-dss«.
HostKeyAlias
Falls Sie nicht wollen, dass bei einem Lookup oder einem Eintrag in den Hostschlüsseldatenbankdateien der echte Hostname auftaucht, können Sie einen
Alias für diesen Hostnamen mit diesem Schlüsselwort spezifizieren. Diese
Option kann sehr hilfreich sein, falls Sie SSH-Verbindungen tunneln wollen.
HostName
Sie können diesem Schlüsselwort den wahren Hostnamen übergeben.
Hiermit können Sie Spitznamen oder Abkürzungen für Ihren Rechner
angeben. Es ist auch erlaubt, dass Sie eine IP-Adresse angeben.
IdentityFile
Gibt die Datei an, aus der die RSA- oder DSA-Authentifizierungsidentität
gelesen werden soll (Default ist $HOME/.ssh/identity). Zusätzlich werden
die Identitäten, die durch den Authentifizierungsagenten repräsentiert
werden, ebenfalls für die Authentifizierung genutzt. Sie können mehrere
Dateien angeben, die dann der Reihe nach durchsucht werden.
KeepAlive
Hiermit geben Sie an, ob das System Keepalive-Nachrichten zu der nicht
antwortenden Seite schicken soll. Beachten Sie aber, dass diese Nachrichten nicht durch den verschlüsselten Tunnel gehen und somit gefälscht
werden können. Falls Sie diese Nachrichten aber nicht verschicken, könnte
es sein, dass eine Verbindung ewig »hängen bleibt«. Falls Sie diese Option
deaktivieren wollen, sollten Sie dies in der Serverkonfigurationsdatei
sowie in der Clientkonfigurationsdatei angeben.
KerberosAuthentication
Dieses Schlüsselwort bestimmt, ob Kerberos-Authentifizierung genutzt
werden soll oder nicht. Falls Sie diese Art der Authentifizierung abschalten wollen, müssen Sie das Argument »no« übergeben, ansonsten »yes«.
KerberosTgtPassing
Gibt an, ob ein Kerberos TGT zum Server weitergeleitet wird oder nicht. Dies
wird nur funktionieren, wenn der Kerberosserver ein AFS kaserver ist.
Der Defaultwert ist »yes«.
Das zu übergebende Argument muss entweder »yes« oder »no« sein.
LocalForward
Gibt an, dass ein TCP/IP Port auf der lokalen Maschine über den sicheren
verschlüsselten Kanal zum angegebenen Port auf dem angegebenen Server (Syntax Host:Port) weitergeleitet wird. Das erste Argument muss folglich eine Portnummer sein, wohingegen das zweite Argument eines Host,
gefolgt von einem Port auf diesem Host sein muss. Diese beiden letzten
Felder sind durch einen Doppelpunkt zu trennen. Sie können auch mehrere Weiterleitungen angeben. Beachten Sie dabei aber, dass nur der
Superuser auf privilegierte Ports weiterleiten kann.
Tabelle 5.10 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
5.2 OpenSSH
289
Schlüsselwort
Beschreibung
LogLevel
Gibt den LogLevel an. Je höher das Level, desto mehr Loggingeinträge
werden Sie bekommen. Verfügbare Levels sind:
QUIET (niedrigstes Level)
FATAL
ERROR
INFO
VERBOSE
DEBUG (höchstes Level)
Der Defaultwert ist INFO.
MACs
Gibt die MAC (message authentication code)-Algorithmen an, welcher
unter Protokoll Version 2 für den Schutz der Datenintegrität genutzt wird.
Falls Sie mehrere Algorithmen angeben wollen, müssen Sie diese durch
Kommas voneinander trennen.
Der Defaultwert ist: »hmac-md5, hmac-sha1, hmacripemd160@openssh.com, hmac-sha1-96, hmac-md5-96«.
NumberOfPasswordPrompts
Spezifiziert die Anzahl der Passwortprompts, bevor aufgegeben wird.
Das Argument für dieses Schlüsselwort muss ein Integerwert sein.
PasswordAuthentication
Gibt an, ob Passwort-Authentifizierung genutzt werden soll
Port
Hiermit können Sie den Port auf dem Remotesystem, an dem sich der
Client anmelden soll, angeben.
Der Defaultwert ist 3.
Der Defaultwert ist »yes«.
Der Defaultwert ist 22.
PreferredAuthentications
Mit diesem Schlüsselwort können Sie die Reihenfolge der verschiedenen
Authentifizierungsmethoden unter Protokoll Version 2 angeben. Somit
können Sie eine bestimmte Methode einer anderen vorziehen.
Der Defaultwert lautet »publickey, password, keyboard-interactive«.
Protocol
Sie haben die Möglichkeit mit diesem Schlüsselwort die Reihenfolge der
zu unterstützenden Protokoll-Versionen anzugeben. Falls Sie nur ein Protokoll (1 oder 2) angeben, wird das nicht angegebene Protokoll auch nicht
unterstützt.
ProxyCommand
Diesem Schlüsselwort müssen Sie den Befehl zur Verbindung zum Server
übergeben. Der Befehlsstring erstreckt sich dabei bis zum Ende der Zeile
und wird mit /bi/sh ausgeführt. In diesem String können Sie folgende
Platzhalter verwenden:
Der Defaultwert ist »2,1«.
%h (wird durch den Hostname des Servers ersetzt)
%p (wird durch den Port ersetzt).
Dieser Befehl kann grundsätzlich alles sein. Beachten Sie dabei aber, dass die
Option CheckHostIP für solche Verbindungen nicht zur Verfügung steht.
Tabelle 5.10 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
290
5 Verschlüsselung
Schlüsselwort
Beschreibung
PubkeyAuthentication
Gibt an, ob die Public Key-Authentifizierung durchgeführt werden soll.
Der Defaultwert ist »yes«.
Dieses Schlüsselwort ist nur für Protokoll Version 2 verfügbar.
RemoteForward
Gibt an, dass ein TCP/IP Port auf dem Remotesystem über den sicheren
verschlüsselten Kanal zum angegebenen Port auf dem lokalen System
(Syntax Host:Port) weitergeleitet wird. Das erste Argument muss folglich
eine Portnummer sein, wohingegen das zweite Argument eines Host
gefolgt von einem Port auf diesem Host sein muss. Diese beiden letzten
Felder sind durch einen Doppelpunkt zu trennen. Sie können auch mehrere Weiterleitungen angeben. Beachten Sie dabei aber, dass nur der
Superuser auf privilegierte Ports weiterleiten kann.
Rhostsauthentication
Gibt an, ob Rhostsbasierende Authentifizierung durchgeführt werden soll.
Beachten Sie, dass diese Deklaration nur die Clientseite betrifft und keine
Auswirkungen auf die Sicherheit hat. Da diese Art der Authentifizierung
sehr unsicher ist, erlauben die meisten Server keine Rhostbasierende
Authentifizierung.
Der Defaultwert ist »yes«.
Beachten Sie, dass sich dieses Schlüsselwort auf Protokoll 1 bezieht.
RSAAuthentication
Hiermit geben Sie an, ob RSA-Authentifizierung durchgeführt werden
soll. Diese Art der Authentifizierung wird jedoch nur unternommen,
wenn ein Authentifizierungsagent läuft oder ein »identity« File existiert.
Der Defaultwert ist »yes«.
Beachten Sie, dass sich diese Option nur auf Protokoll 1 bezieht.
ChallengeResponseAuthentication
Mit diesem Schlüsselwort können Sie festlegen, ob »Challenge ResponseAuthentifizierung« durchgeführt werden soll. Zurzeit ist lediglich Unterstützung für skey-Authentifizierung vorhanden.
Der Defaultwert ist »no«.
StrictHostKeyChecking
Wenn Sie diese Flag auf »yes« setzen, wird SSH niemals Hostschlüssel automatisch zu den Dateien $HOME/.ssh/known_hosts und $HOME/.ssh/
known_hosts2 hinzufügen. Außerdem wird das Programm eine Verbindung
zu Rechnern, deren Hostschlüssel sich geändert haben, ablehnen. Dies bietet
einen sehr guten Schutz vor Trojanischen Pferden. Sie müssen neue Hosts
dadurch allerdings per Hand in die entsprechenden Dateien eintragen.
Falls Sie die Flag aber auf »no« setzen, wird SSH neue Hosts automatisch
in die beiden vorher aufgeführten Dateien eintragen.
Sie können aber auch das Argument »ask« übergeben. In solchen Fällen
wird SSH Sie vor dem Hinzufügen eines neuen Hosts in eine der Dateien
informieren. Nur wenn Sie damit einverstanden sind, wird der neue Host
hinzugefügt. Verbindungen zu Hosts, deren Schlüssel sich geändert hat,
werden weiterhin abgelehnt.
Der Defaultwert ist »ask«.
Tabelle 5.10 Verfügbare Schlüsselwörter (Forts.)
Sandini Bib
5.2 OpenSSH
291
Schlüsselwort
Beschreibung
UsePrivilegedPort
Gibt an, ob für ausgehende Verbindungen ein privilegierter Port benutzt
werden soll
Der Defaultwert ist »no«.
User
Hiermit können Sie den Usernamen spezifizieren, unter dem Sie sich einloggen möchten. Dies ist sehr nützlich falls, Sie auf verschiedenen Servern
unterschiedliche Benutzernamen haben.
UserKnownHostsFile
Hiermit können Sie eine alternative Datei für die Hostschlüssel unter Protokoll Version 1 angeben (normalerweise werden diese aus der Datei
$HOME/.ssh/known_hosts gelesen).
UserKnownHostsFile2
Hiermit können Sie eine alternative Datei für die Hostschlüssel unter Protokoll Version 2 angeben (normalerweise werden diese aus der Datei
$HOME/.ssh/known_hosts2 gelesen).
UseRsh
Hiermit geben Sie an, dass für den betreffenden Host für das Einloggen die
Programme rlogin/rsh benutzt werden sollen. Alle anderen Optionen (außer
HostName) werden ignoriert, falls Sie diese Option aufgeführt haben.
Das Argument, das Sie übergeben, muss entweder »yes« oder »no« sein.
XAuthLocation
Hiermit geben Sie den Speicherort des Programms xauth an.
Der Defaultspeicherort ist /usr/X11R6/bin/xauth
Tabelle 5.10 Verfügbare Schlüsselwörter (Forts.)
Umgebungsvariablen
Tabelle 5.11 zeigt die von SSH gesetzten Umgebungsvariablen und gibt eine
kurze Beschreibung zu den einzelnen Punkten.
Umgebungsvariable
Beschreibung
DISPLAY
Diese Variable enthält die Adresse des X11-Servers. Sie wird automatisch
von SSH gesetzt und hat folgendes Format:
Hostname:n
Wobei das Feld »Hostname« den Host, auf dem die Shell läuft, angibt und
das Feld ein Integerwert >= 1 ist. SSH benutzt diesen Wert, um X11-Verbindungen über einen sicheren Kanal weiterzuleiten.
Sie sollten diese Variable nicht manuell setzen, da dies zu Sicherheitsrisiken führen kann.
HOME
Enthält die Adresse des Homeverzeichnisses des Benutzers
LOGNAME
Enthält den Namen des Benutzers, unter dem sich der User eingeloggt hat
Diese Variable ist ein Synonym zur Variable USER und wurde aus Kompatibilitätsgründen zu anderen Systemen eingeführt.
MAIL
Zeigt auf die Mailbox des Users
Tabelle 5.11 Umgebungsvariablen
Sandini Bib
292
5 Verschlüsselung
Umgebungsvariable
Beschreibung
PATH
Enthält den Default-Pfad, den Sie während der Erstellung von SSH angegeben haben
SSH_AUTH_SOCK
Diese Umgebungsvariable enthält den Pfad zu einem Unix-DomainSocket, der zur Kommunikation mit dem Agenten benötigt wird.
SSH_CLIENT
Identifiziert den Client einer Verbindung. Diese Variable enthält folgende
drei Felder, die durch Leerzeichen voneinander getrennt sind:
Client IP-Adresse
Client Portnummer
Server Portnummer
SSH_ORIGINAL Diese Variable enthält den originalen Befehl aus der Kommandozeile.
_COMMAND
SSH_TTY
Enthält den Namen des Terminals (tty), der mit der aktuellen Shell oder
dem aktuellen Befehl verbunden ist
Falls die aktuelle Sitzung keinen Terminal hat, wird diese Variable nicht
gesetzt.
TZ
Diese Variable enthält die gegenwärtige Zeitzone, falls sie beim Start des
Daemons angegeben wurde.
USER
Enthält den Namen des Benutzers, unter dem sich der User eingeloggt hat
Tabelle 5.11 Umgebungsvariablen (Forts.)
5.2.6
Authentifizierungsagent
Der SSH-Authentifizierungsagent ist ein Programm, das die privaten Schlüssel, die
für Public Key-Authentifizierung genutzt werden, aufbewahrt. Der ssh-agent wird
dabei beim Beginn einer X- oder Login-Sitzung gestartet, so dass alle danach gestarteten Programme als Clients des SSH-Authentifizierungsagenten gestartet werden.
Syntax
Der Aufruf des SSH-Authentifizierungsagenten erfolgt über den anschließenden
Befehl:
Linux:~# ssh-agent [Optionen]
Die verfügbaren Optionen dazu werden Sie im nächsten Abschnitt kennen lernen.
Optionen
Tabelle 5.12 zeigt die verfügbaren Optionen und gibt zu jedem dort aufgeführten
Punkt eine kurze Beschreibung.
Sandini Bib
5.2 OpenSSH
Option
-c
293
Beschreibung
Generiert C-Shell-Befehle auf STDOUT
Dies ist der Defaultwert, falls die Shell dem Typ einer csh ähnelt.
-s
Generiert Bourne Shell-Befehle auf STDOUT
Dies ist der Defaultwert, falls die Shell nicht wie eine csh Shell aussieht.
-k
Killt den aktuellen Agenten
Tabelle 5.12 Verfügbare Optionen
Befehle
Falls dem Authentifizierungsagenten ein Befehl übergeben wurde, wird dieser
als Unterprozess des Agenten ausgeführt. Wenn der Befehl beendet ist, ist auch
der Agent beendet.
Schlüssel hinzufügen
Wenn Sie den Agenten das erste Mal benützen, wird dieser noch keine Schlüssel
besitzen. Sie können ihm bestimmte Schlüssel hinzufügen, indem Sie das Programm ssh-add, welches wir im Laufe dieses Kapitels noch ausführlicher besprechen werden, benutzen. Falls Sie diesem Programm keine Argumente übergeben,
wird es die Datei $HOME/.ssh/identity hinzufügen und gegebenenfalls nach einer
Passphrase fragen. Danach schickt es die Identität zum Authentifizierungsagenten.
Schlüssel anzeigen
Sie haben leider keine Möglichkeit die im Authentifizierungsagenten gespeicherten Schlüssel (der Authentifizierungsagent kann mehrere Schlüssel speichern
und benutzen) anzeigen zu lassen. Sie können aber auf das schon erwähnte Programm ssh-add ausweichen und somit folgenden Befehl übergeben, um die
Schlüssel anzuzeigen, die der Authentifizierungsagent aktuell aufbewahrt:
Linux:~# ssh-add -l
Nutzen
Der Nutzen eines Authentifizierungsagenten liegt klar auf der Hand:
Wenn der Agent auf dem Rechner des Users (oder auf seiner Shell) läuft, müssen
Authentifizierungsdaten auf keinem fremden System mehr gespeichert werden
und somit müssen die Passphrases, die zur Authentifizierung benötigt werden,
nicht mehr über das Netzwerk verschickt werden.
Wichtige Dateien
Auch der Authentifizierungsagent benutzt einige Dateien, deren Nutzen und
Aufgabe Sie kennen sollten. Wir werden uns im Folgenden diese Files anhand einer dazugehörigen Beschreibung genauer ansehen.
Sandini Bib
294
5 Verschlüsselung
$HOME/.ssh/identity
Diese Datei enthält die Protokoll Version 1 RSA-Authentifizierungsidentität des
Benutzers. Dieses File sollte nur vom User gelesen werden können. Es ist dabei
möglich, bei der Erstellung des Schlüssels eine Passphrase zu spezifizieren, welche dann genutzt wird, um den privaten Teil dieser Datei zu verschlüsseln. Diese
Datei wird nicht vom Authentifizierungsagenten selbst genutzt, wird aber zumeist vom Befehl ssh-add hinzugefügt.
$HOME/.ssh/id_dsa
In dieser Datei finden Sie die Protokoll Version 2 DSA-Authentifizierungsidentität des Benutzers.
$HOME/.ssh/id_rsa
Die Protokoll Version 2 RSA-Authentifizierungsidentität des Benutzers wird in
dieser Datei abgespeichert.
/tmp/ssh-XXXXXXXX/agent.<pid>
Dieses File enthält Unix-Domain-Sockets, die die Verbindung zum Authentifizierungsagenten enthalten. Diese Sockets sollte nur der Eigentümer lesen können
und sie sollten entfernt werden, wenn der Agent sich beendet.
5.2.7
SSH-ADD
Mit dem Programm ssh-add können Sie dem eben kennen gelernten Authentifizierungsagenten RSA- und DSA-Identitäten hinzufügen. Wie wir gesehen haben,
wird dabei die Datei $HOME/.ssh/identity hinzugefügt, falls Sie dem Programm
keinen alternativen Speicherort beim Aufruf zuweisen. Da diese zwei Sätze eigentlich schon den kompletten Nutzen und Sinn dieses Programms grob dargestellt haben, können wir uns sofort mit der Syntax beschäftigen.
Syntax
Der Aufruf erfolgt über die anschließende Syntax:
Linux:~# ssh-add [Optionen] [alternativer Speicherplatz bzw.
Datei]
Tabelle 5.13 stellt uns die verfügbaren Optionen kurz vor.
Option
Beschreibung
-l
Hiermit werden alle Fingerabdrücke der Identitäten angezeigt, die im
Moment vom Agenten repräsentiert werden.
-L
Sie können diese Option benutzen, um die Public Key-Parameter der Identitäten, die der Agent zurzeit hält, anzeigen zu lassen.
Tabelle 5.13 Verfügbare Optionen für ssh-add
Sandini Bib
5.2 OpenSSH
295
Option
Beschreibung
-d
Mit dieser Option können Sie eine Identität löschen.
-D
Um alle Identitäten zu löschen, können Sie diese Option benutzen.
Tabelle 5.13 Verfügbare Optionen für ssh-add (Forts.)
Wichtige Dateien
Auch an dieser Stelle werden wir uns die für dieses Programm wichtigen Dateien
kurz anschauen und gegebenenfalls besprechen.
$HOME/.ssh/identity
Diese Datei enthält die Protokoll Version 1 RSA-Authentifizierungsidentität des
Benutzers und sollte daher nur vom betreffenden Eigentümer gelesen werden
dürfen. Falls diese Datei jedoch auch für andere Benutzer lesbar sein sollte, wird
ssh-add es ignorieren.
Beim Erstellen dieser Datei ist es möglich, eine Passphrase zu spezifizieren, die
dann genützt wird, um den privaten Teil dieser Datei zu verschlüsseln.
Dies ist die Defaultdatei bzw. der Defaultspeicherplatz für Identitäten, falls Sie
keine Alternative angeben.
$HOME/.ssh/id_dsa
In diesem File finden Sie die Protokoll Version 2 DSA-Authentifizierungsidentität
des Benutzers.
$HOME/.ssh/id_rsa
In diesem File finden Sie die Protokoll Version 2 RSA-Authentifizierungsidentität
des betreffenden Users.
5.2.8
Hostschlüssel zusammentragen
Wir haben im Verlauf dieses Kapitels schon einige wichtige Informationen über den
praktischen, effektiven und sicheren Gebrauch der Secure Shell erfahren. Vielleicht
haben Sie ja bemerkt, dass das Zusammentragen der Hostschlüssel in einem Netzwerk richtig viel Arbeit bereiten kann. Damit dieser Prozess verkürzt wird, wurde
das Programm ssh-keyscan entwickelt, das die Hostschlüssel eines jeden Hosts in einer Domäne mit mehr als 1000 Rechnern unter einer Minute zusammentragen kann.
Falls Sie Ihre ssh_known_hosts-Files auf diese Art und Weise erstellen, sollten Sie
dabei beachten, dass die Scandurchläufe und damit auch die Antworten nicht
verschlüsselt werden.
Syntax
Der allgemeine Aufruf dieses Programms lautet:
Linux:~# ssh-keyscan [Optionen] Hostname
Sandini Bib
296
5 Verschlüsselung
Optionen
Die für dieses Programm verfügbaren Optionen finden Sie in Tabelle 5.14.
Option
Beschreibung
-t
Mit dieser Option können Sie den Timeout für Verbindungsanfragen setzen. Falls ein Host über den Zeitraum des Timeouts nicht antwortet, wird
der Verbindungsversuch abgebrochen.
Der Defaultwert liegt bei 5 Sekunden.
-f
Diese Option erlaubt es Ihnen, eine Datei anzugeben, aus der ssh-keyscan
die zu scannenden Hosts liest. Dabei liest es jeweils die einzelnen Hosts
(10.209.100.1, 10.209.100.2) oder Adressenlisten-Namenslisten Paare
(joey.testdomain.de, joey) ein.
Falls Sie anstelle des Dateinamens den Operator »-« übergeben, liest sshkeyscan die Werte aus der Standardeingabe.
Tabelle 5.14 Optionen für ssh-keyscan
5.2.9
Schlüssel generieren
In diesem Abschnitt des Buchs werden Sie ein Tool kennen lernen, das es Ihnen
ermöglicht, Ihre Authentifizierungsschlüssel zu generieren, zu verwalten und zu
konvertieren.
Per Default generiert dieses Programm RSA-Schlüssel für Protokoll 1. Wie Sie
Schlüssel für Protokoll 2 erstellen können, erfahren Sie im Abschnitt über die Syntax.
Sie können mit ssh-keygen Schlüssel für die folgenden Dateien (oder die von Ihnen
angegebenen Alternativen dazu) erstellen:
$HOME/.ssh/identity
$HOME/.ssh/id_dsa
$HOME/.ssh/id_rsa
/etc/rc
Funktionsweise
Wenn Sie einen Schlüssel durch ssh-keygen erstellen lassen, werden Sie nach der
Datei, in die der private Schlüssel gespeichert werden soll, gefragt. Der öffentliche Schlüssel wird in einer Datei mit demselben Namen, aber mit der Endung
.pub geschrieben. Danach will das Programm die Passphrase von Ihnen wissen,
falls Sie keine Passphrase angeben wollen, lassen Sie das Feld leer. Beachten Sie
dabei, dass Hostschlüssel eine leere (bzw. keine) Passphrase haben müssen. Sie
können die hier angegebene Passphrase später ändern (mit der Option »-p«).
Falls Sie Ihre Passphrase vergessen haben, müssen Sie einen neuen Schlüssel erstellen. Es gibt keinen Weg eine vergessene Passphrase aus dem Schlüssel auszulesen.
Sandini Bib
5.2 OpenSSH
297
Wenn Sie einen RSA1-Schlüssel erstellen, beinhaltet dieser zusätzlich ein Kommentarfeld, das dem User helfen soll, den Schlüssel zu identifizieren. Dieses Feld
erhält bei der Erstellung automatisch den Wert user@host, kann aber später
durch die Option -c geändert werden.
Syntax
Um einen Schlüssel zu generieren, zu verwalten oder zu konvertieren, benutzen
Sie bitte folgende allgemeine Syntax:
Linux:~# ssh-keygen [Optionen]
Optionen
Tabelle 5.15 stellt Ihnen die für dieses Programm verfügbaren Optionen anhand
einer kurzen Beschreibung vor.
Option
Beschreibung
-b Bits
Hiermit geben Sie die Anzahl der Bits für den zu erstellenden Schlüssel
an. Das Minimum hierfür beträgt 512 Bits. Sie sollten aber eine Bitgröße
von 1024 wählen.
Der Defaultwert ist 1024.
Schlüssel, die größer als der Defaultwert sind, erhöhen das Sicherheitslevel nicht mehr, sondern verlangsamen lediglich den Ablauf.
-c
Mit dieser Option können Sie den Kommentar im privaten und öffentlichen Schlüssel ändern. Hierfür müssen Sie den Speicherort des Schlüssels und gegebenenfalls die Passphrase angeben.
-e
Diese Option liest einen privaten oder öffentlichen OpenSSH-Schlüssel
und gibt diesen Schlüssel im »SECSH Public Key File-Format« auf die
Standardausgabe aus.
-f
Gibt den Dateinamen der Schlüsseldatei an
-i
Diese Option liest ein unverschlüsseltes privates oder öffentliches
Schlüsselfile im SSH2-kompatiblen Format und gibt den OpenSSHkompatiblen Schlüssel dann auf der Standardausgabe aus.
Dies erlaubt Ihnen den Import von verschiedenen kommerziellen SSHSchlüsseln.
-l
Zeigt den Fingerabdruck des angegebenen privaten oder öffentlichen
Schlüsselfiles
-p
Hiermit können Sie die Passphrase einer privaten Schlüsseldatei
ändern. Um dies machen zu können, müssen Sie die alte Passphrase
angeben.
-q
Sie werden danach kaum Ausgaben von ssh-keygen bekommen.
-y
Diese Option liest ein Datei im privaten OpenSSH-Format und gibt
danach ein OpenSSH Public File auf die Standardausgabe aus.
Tabelle 5.15 Verfügbare Optionen für ssh-keygen
Sandini Bib
298
5 Verschlüsselung
Option
Beschreibung
-t type
Mit dieser Option können Sie den Typen des zu erstellenden Schlüssels
angeben. Mögliche Werte hierfür sind:
RSA1 (Protokoll Version 1)
RSA (Protokoll Version 2)
DSA (Protokoll Version 2)
Der Defaultwert ist RSA1.
-B
Zeigt die »bubblebabble« Übersicht des spezifizierten privaten oder
öffentlichen Schlüsselfiles
-C Kommentar
Übergibt den neuen Kommentar
-N
Neue_Passphrase
Übergibt die neue Passphrase
-P Alte_Passphrase
Übergibt die alte Passphrase
Tabelle 5.15 Verfügbare Optionen für ssh-keygen (Forts.)
Wichtige Dateien
Wie Sie es von den vorhergehenden Programmen, die sich auf die SSH-Programmsuite beziehen, schon kennen, werden wir auch zu ssh-keygen die wichtigsten Dateien auflisten und eine kurze Beschreibung dazu liefern.
$HOME/.ssh/identity
In diese Datei wird der Schlüssel, der generiert werden soll, geschrieben.
$HOME/.ssh/identity.pub
Hier finden Sie den passenden öffentlichen Schlüssel. Sie sollten den Inhalt dieser
Datei in die Datei $HOME/.ssh/authorized_keys auf allen Rechnern, auf denen Sie
sich via SSH einloggen wollen, einfügen.
$HOME/.ssh/id_dsa
Diese Datei enthält die Protokoll Version 2 DSA-Authentifizierungsidentität des
Benutzers.
$HOME/.ssh/id_dsa.pub
Dieses File enthält den Protokoll Version 2 RSA-öffentlichen Schlüssel für die Authentifizierung. Sie sollten den Inhalt dieser Datei in die Datei $HOME/.ssh/
authorized_keys2 auf allen Rechnern, auf denen Sie sich via SSH anmelden wollen,
einfügen.
$HOME/.ssh/id_rsa
Sie werden in diesem File die Protokoll Version 2 Authentifizierungsidentität des
Benutzers finden.
$HOME/.ssh/id_rsa.pub
In diesem File finden Sie den öffentlichen Schlüssel für das Protokoll 2, den Sie für
die Authentifizierung benötigen. Sie sollten den Inhalt dieser Datei in die Datei
Sandini Bib
5.2 OpenSSH
299
$HOME/.ssh/authorized_keys2 auf allen Rechnern, auf denen Sie sich via SSH anmelden wollen, einfügen.
5.2.10 Sicheres Kopieren im Netzwerk
Das nächste Programm, das wir in unserer SSH-Reihe besprechen werden, heißt
scp und ermöglicht es Ihnen, Dateien sicher zwischen zwei Rechnern in einem unsicheren Netzwerk zu kopieren. Es wurde als Alternative zu rcp entwickelt, bietet jedoch – da es die Daten über einen verschlüsselten Kanal überträgt – mehr Sicherheit. Sie können damit sogar Dateien von einem Remotesystem zum anderen
kopieren.
Syntax
Ich denke, dass sich die Syntax im Großen und Ganzen selbst erklärt:
Linux:~# scp [Optionen] [[Username@Host1:]Datei1 […] ]
[[Username@Host2:] Datei2
Optionen
Tabelle 5.16 stellt Ihnen die für scp verfügbaren Optionen vor und gibt zu den aufgeführten Punkten eine kurze Beschreibung.
Option
Beschreibung
-c Cipher
Mit dieser Option können Sie den Cipher-Algorithmus auswählen, der
danach für die Verschlüsselung des Datentransfers zuständig ist.
-i identity_Datei
Hiermit geben Sie an, in welcher Datei der private Schlüssel für die RSAAuthentifizierung zu finden ist.
-p
Sie können diese Option benutzen, um folgende Eigenschaften der
Datei(en) zu erhalten:
modification time (letzte Änderung)
access time (letzter Zugriff)
modes (Modi)
-r
Kopiert das gesamte Verzeichnis rekursiv.
-v
Verbose Mode. Hiermit veranlassen Sie scp und ssh Debugnachrichten
über den Fortschritt des Prozesses auszugeben.
-B
Wenn Sie scp in einem Skript verwenden wollen, kann es hilfreich sein,
wenn Sie in den Batchmodus gehen, da dort nicht nach Passwörtern und
Passphrases gefragt wird.
-q
Um die Fortschrittsanzeige zu unterdrücken, können Sie diese Option
übergeben.
-C
Mit dieser Option aktivieren Sie Kompression.
Tabelle 5.16 Verfügbare Optionen für scp
Sandini Bib
300
5 Verschlüsselung
Option
Beschreibung
-P Port
Hiermit können Sie den Port auf dem Remotesystem, an dem Sie sich
anmelden wollen, spezifizieren.
-S Programm
Falls Sie ein Programm für die Verschlüsselung der Verbindung selbst
angeben wollen, können Sie dies mit dieser Option tun. Beachten Sie dabei
aber, dass dieses Programm SSH-Optionen verstehen muss.
-o Option
Damit können Sie eine Option direkt an SSH weiterleiten.
-4
Veranlasst scp nur IPv4-Adressen zuzulassen
-6
Veranlasst scp nur IPv6-Adressen zuzulassen
Tabelle 5.16 Verfügbare Optionen für scp (Forts.)
5.2.11 Sicherer FTP-Server
An sich gibt es über diesen Server nicht allzu viel zu sagen, da er nur ein Subsystem des SSH Servers (sshd) ist und somit auch in der Serverkonfigurationsdatei
konfiguriert wird. Wenn Sie also einen solchen Server betreiben wollen, müssen
Sie einen sicheren SSH Server aufsetzen. Instruktionen dazu finden Sie im Abschnitt »Server« dieses Kapitels.
5.2.12 Sicherer FTP Client
Dieser Client ermöglicht es Ihnen, Dateien von einem SFTP-Subsystem eines SSH
Servers über einen verschlüsselten Kanal zu beziehen. Dabei können Sie auch einige SSH-spezifische Features wie Public Key-Authentifizierung und Kompression nutzen.
Syntax
Bevor wir uns mit der Syntax dieses Programms beschäftigen, sollten wir uns vor
Augen führen, dass es drei verschiedene Möglichkeiten gibt, dieses Programm zu
nutzen. Obwohl das Endprodukt immer gleich ist, sieht die entsprechende Syntax
dafür immer etwas anders aus.
Wir wollen uns also vor der Besprechung der verfügbaren Optionen kurz mit den
drei verschiedenen Methoden beschäftigen.
Interaktiver Befehlsmodus
Die erste Methode ist die wohl bekannteste und am häufigsten genutzte. Hierbei
verbindet sich der SFTP-Client mit einem vorher spezifizierten Host und geht
dann in einen »interaktiven Befehlsmodus«.
Die Syntax zu dieser ersten Methode sieht folgendermaßen aus:
Linux:~# sftp [Optionen] [Host]
Sandini Bib
5.2 OpenSSH
301
Dateien automatisch holen
Diese Methode dürfte für Programmierer interessant sein, da sie sie leicht und
ohne Schwierigkeiten in Skripte einbauen können.
Hierbei werden Dateien automatisch vom Server geholt, falls eine nicht interaktive Authentifizierung benutzt wird. Falls Sie Eingaben bei der Authentifizierung machen müssen, werden die Dateien danach automatisch geladen.
Für diese Methode sieht die zu benutzende Syntax etwas anders aus:
Linux:~# sftp [[User@Host [:Datei [Datei]]]
Start in einem bestimmten Remoteverzeichnis
Die letzte Methode erlaubt es Ihnen, in einem bestimmten Remoteverzeichnis zu
starten. Dies erspart Ihnen etwas Tipparbeit und kann ebenfalls sehr gut in Skripten umgesetzt werden.
Die Syntax hierzu lautet:
Linux:~# sftp [[User@Host [:dir[/]]]
Optionen
Nachdem Sie nun die drei verschiedenen Modi kennen gelernt haben, können wir
uns mit den Optionen beschäftigen. Tabelle 5.17 listet alle verfügbaren Optionen
auf und gibt zu jedem aufgeführten Punkt eine kurze Erläuterung.
Option
Erläuterung
-b Batchdatei
Die hier übergebene Batchdatei wird als Standardinput für den Client
benutzt, das heißt, dass dieser die Befehle aus dieser Datei lesen wird.
Sie sollten diese Option für nicht interaktive Authentifizierungen verwenden. Der Client wird abbrechen, wenn die Ausführung eines der
folgenden Befehle nicht gelingt:
get
put
rename
ln
rm
mkdir
chdir
lchdir
mlkdir
-C
Mit dieser Option können Sie Kompression aktivieren.
Tabelle 5.17 Verfügbare Optionen für sftp
Sandini Bib
302
5 Verschlüsselung
Option
Erläuterung
-o SSH_Option
Diese Option ermöglicht es Ihnen, eine SSH-Option direkt an SSH
weiterzuleiten und ausführen zu lassen.
-v
Hiermit erhöhen Sie das Logginglevel.
Tabelle 5.17 Verfügbare Optionen für sftp (Forts.)
Interaktive Befehle
Wenn Ihr SFTP-Client in den interaktiven Befehlsmodus gegangen ist, können Sie
ihm eine Reihe von Befehlen ähnlich zum normalen FTP-Client übergeben.
Beachten Sie bitte, dass Sie Verzeichnisse, die ein Leerzeichen beinhalten, in
Anführungszeichen setzen.
Tabelle 5.18 stellt Ihnen alle zur Verfügung stehenden Befehle vor und gibt zu
jedem Punkt eine kleine Beschreibung.
Befehl
Beschreibung
cd Pfad
Hiermit wechseln Sie in das Remoteverzeichnis, das Sie mit dem
Argument »Pfad« übergeben haben.
lcd Pfad
Hiermit wechseln Sie in das lokale Verzeichnis, das Sie mit dem Argument »Pfad« übergeben haben.
chgrp Gruppe-Pfad
Diese Option erlaubt es Ihnen, die Gruppe der Datei, die unter Pfad zu
finden ist, zu ändern. Die dabei übergebene Gruppe muss eine numerische Gruppen-ID sein.
chmod Modus-Pfad
Sie können mit dieser Option die Zugriffserlaubnis (Argument Modus)
der Datei, die unter dem angegebenen Pfad zu finden ist, ändern.
chown EigentümerPfad
Falls Sie den Eigentümer einer Datei ändern wollen, können Sie dies
mit dieser Option machen.
Der Eigentümer muss dabei als numerische UID übergeben werden.
Exit
Beendet den SFTP-Client
get [flags] RemotePfad [lokaler Pfad]
Diese Option bewirkt, dass das Remoteverzeichnis, das Sie mit dem
Argument »Remote-Pfad« übergeben, auf dem angegebenen Pfad auf
dem lokalen System (Argument »lokaler Pfad«) gespeichert wird.
Falls Sie den lokalen Pfad nicht spezifizieren, erhält das Verzeichnis
denselben Namen, den es auf dem Remotesystem hat.
Falls Sie zusätzlich die Flag -P setzen, werden auch die Zugriffsberechtigungen und Zugriffszeiten kopiert.
Help
Listet eine kleine Hilfe auf
lls [ls-options [Pfad]]
Gibt ein ls-Listing des angegebenen lokalen Pfades an. Falls Sie den
Pfad nicht weiter spezifiziert haben, erhalten Sie ein Listing des aktuellen lokalen Verzeichnisses.
Tabelle 5.18 Interaktive Befehle
Sandini Bib
5.2 OpenSSH
303
Befehl
Beschreibung
lmkdir Pfad
Diese Option erlaubt es Ihnen, ein lokales Verzeichnis zu erstellen.
Den Namen dieses Verzeichnisses übergeben Sie mit dem Argument
»Pfad«.
ln Pfad_1 Pfad_2
Hiermit erstellen Sie einen symbolischen Link von Pfad_1 nach
Pfad_2.
Lpwd
Wenn Sie diese Option benutzen, wird Ihnen das lokale Verzeichnis
ausgegeben, in dem Sie sich gerade befinden.
ls [Pfad]
Gibt ein ls-Listing des angegebenen Remote-Pfades an. Falls Sie den
Pfad nicht weiter spezifiziert haben, erhalten Sie ein Listing des aktuellen Remote-Verzeichnisses.
lumask umask
Setzt die lokale »umask« auf »umask«.
mkdir Pfad
Diese Option erstellt ein Remoteverzeichnis mit dem Namen, den Sie
mit dem Argument »Pfad« übergeben haben.
put [flags]
lokaler_Pfad
[Remote_Pfad]
Hiermit laden Sie die Datei oder das Verzeichnis, das Sie mit dem
Argument »lokaler_Pfad« übergeben haben, auf das Remotesystem.
Falls Sie den Namen des neuen Remoteverzeichnisses nicht mit dem
Argument »Remote_Pfad« übergeben haben, so erhält der neu
erstellte Ordner oder die neu erstellte Datei denselben Namen, den
er/sie auch auf dem lokalen System hat.
Pwd
Wenn Sie diese Option benutzen, wird Ihnen das Remote-Verzeichnis
ausgegeben, in dem Sie sich gerade befinden
quit
Beendet den SFTP-Client
rename alter_Pfad
neuer_Pfad
Benennt den Pfad, den Sie mit dem Argument »alter_Pfad« übergeben
haben, in den Namen um, den Sie mit dem Argument »neuer_Pfad«
übergeben haben.
rmdir Pfad
Wenn Sie diesen Befehl übergeben, wird das Verzeichnis, das Sie mit
dem Argument »Pfad« übergeben haben, auf dem Remotesystem
gelöscht.
rm Pfad
Wenn Sie diesen Befehl übergeben, wird das File, das Sie mit dem
Argument »Pfad« übergeben haben, auf dem Remotesystem gelöscht.
symlink Pfad1 Pfad2
Hiermit erstellen Sie einen symbolischen Link von Pfad_1 nach
Pfad_2.
! Befehl
Durch die Übergabe dieses Befehls wird der angegebene Befehl auf
der lokalen Shell ausgeführt.
!
Hiermit kommen Sie auf die lokale Shell.
?
Listet eine kleine Hilfe auf.
Tabelle 5.18 Interaktive Befehle (Forts.)
Sandini Bib
Sandini Bib
6 Tools
Ich muss zugeben, der Titel für dieses Kapitel ist nicht besonders geistreich und
lässt kaum auf den Inhalt schließen. Doch leider fiel mir kein besserer Titel für
diesen Abschnitt des Buchs ein, in dem es sich nun mal einfach nur um gute Tools
dreht, die einem genervten Administrator eine Menge Arbeit ersparen können.
Da die hier beschriebenen Programme weit gefächerte Funktionsmöglichkeiten
haben, werde ich nicht viel Zeit mit der Einleitung verschwenden und gleich mit
der Besprechung des ersten Tools beginnen.
6.1
Superuser Do (sudo)
Oftmals ist es so, dass ein Administrator einfach zu viel zu tun hat und sich nicht
um jedes kleine Problem, das einen User bei der Verrichtung der täglichen Arbeit
hindert, kümmern kann. Meistens ringt er sich doch durch, den genervten User
aufzusuchen und ihm zu helfen. Dabei könnte und möchte der gestresste User
dem Administrator viel Arbeit abnehmen, aber leider ist dies nicht möglich, da er
die nötigen Rechte dazu nicht hat. Da gäbe es nun die Möglichkeit dem User einfach die Rechte zu geben (zum Beispiel könnte man ihm das Rootpasswort geben), doch jeder vernünftige Systemverwalter weiß, dass dies mächtig in die Hose
gehen kann! Also bleibt einem da nichts anderes übrig, als jedes Mal zum Benutzer zu laufen? Nein, nicht ganz.
Sie haben die Möglichkeit dem Benutzer genau die Rechte zu erteilen die er braucht.
Nehmen wir an, der User muss einmal am Tag eine bestimmte Arbeit verrichten, damit der Geschäftsablauf gewährleistet bleibt. Man könnte diesem Benutzer nun
durch sudo erlauben, genau die Befehle, die er ausführen muss, auszuführen. Damit
sind der Arbeitsablauf und die Omnipotenz des Rootaccounts gesichert.
6.1.1
Installation
Beschaffen Sie sich die neueste stabile Version aus einer sicheren Quelle, wie zum
Beispiel:
Der Buchseite
Der offiziellen SUDO-Page www.courtesan.com/courtesan/products/sudo
Aus der Paketdatenbank Ihrer Distribution
Nachdem Sie sich das Paket beschafft haben, sollten Sie es folgendermaßen kompilieren und installieren:
Linux:~# tar -xfz sudo-version.tar.gz
Linux:~# cd sudo-version
Linux:~# ./configure --with pam \ --with-timeout=0
Sandini Bib
306
6 Tools
Linux:~# make
Linux:~# make install
Linux:~# cp sample.pam /etc/pam.d/sudo
Mit dieser Befehlskette wird sudo mit pam-Unterstützung und einem Timeout
von 0 kompiliert. Das heißt, dass bei jeder Befehlseingabe über sudo ein Passwort
nötig wird.
6.1.2
Konfiguration und Einsatz
Falls wir nur die Optionen von sudo besprechen müssten, wäre dies innerhalb
weniger Seiten getan. Da wir aber die Konfiguration von sudo ebenfalls besprechen wollen, wird sich dies etwas platzunfreundlicher gestalten.
visudo
Die Konfiguration erfolgt über die Datei /etc/sudoers. Diese Datei können Sie
durch visudo editieren. Dafür müssen Sie logischerweise als root eingeloggt sein.
Falls Sie die Konfigurationsdatei /etc/sudoers also verändern wollen, müssen Sie
folgenden Befehl eingeben:
Linux:~# visudo
Danach wird mit Hilfe des Visual Editors die Konfigurationsdatei geöffnet und
kann editiert werden.
Natürlich könnten Sie die Datei auch direkt über den Editor verändern, doch ich
rate stark davon ab. Die Gründe dafür wären:
1. Die Konfigurationsdatei ist so konzipiert, dass eine zentrale Administration von
verteilten sudo-Zugriffsrechten ermöglicht wird. Nehmen wir an, mehrere Systemverwalter haben das Recht die Konfigurationsdatei zu ändern. Falls nun
zwei Administratoren zur selben Zeit die Datei ändern würden (über einen Editor oder über die Pipe), hätte das fatale Folgen (im worst case). Visudo verhindert
das, da dieses Programm simultane Zugriffe auf /etc/sudoers unterbindet.
2. Falls Sie sudo nur auf einem Rechner ansetzen, ist das gerade eben beschriebene Problem für Sie nicht von allzu großer Bedeutung, da höchstwahrscheinlich nur Sie an der Konfigurationsdatei arbeiten. Dies schützt Sie aber noch
nicht vor Syntaxfehlern. Falls Sie die Konfigurationsdatei mit visudo ändern,
wird die Syntax vor dem Abspeichern noch einmal auf Fehler gecheckt. Wenn
ein Fehler gefunden wird, wird die Datei nicht abgespeichert und visudo zeigt
Ihnen die Zeilen, in denen die Syntaxfehler gefunden wurden, an und bittet
Sie darum, das Problem zu klären (what’s now). Der User hat nun die Möglichkeit über die Option e die Konfigurationsdatei nochmals zu editieren. Er
kann aber die Datei mit Hilfe der Option x verlassen, ohne dass die Änderungen gespeichert werden. Die letzte – und nicht zu empfehlende – Option lau-
Sandini Bib
6.1 Superuser Do (sudo)
307
tet Q. Hierbei wird die Datei ebenfalls verlassen, die Änderungen (inklusive
der falschen Syntax) werden aber gespeichert. Sie sollten diese Option nur in
extremen Ausnahmefällen benutzen!
Syntax
Ich denke, Sie wissen nun, dass es unbedingt empfehlenswert ist, die Konfigurationsdatei nur über visudo zu öffnen. Damit Sie dies auch tun können, werden wir
Ihnen im Folgenden die verfügbaren Optionen für diesen Befehl kurz vorstellen.
Der allgemeine Aufruf sollte keine Überraschungen in sich bergen:
Linux:~# visudo [Optionen]
Tabelle 6.1 zeigt die verfügbaren Optionen und gibt jeweils eine kleine Beschreibung dazu ab:
Option
Beschreibung
-c
Falls Sie diese Option verwenden, wird die Konfigurationsdatei
nicht bearbeitet, sondern auf Fehler in der Syntax überprüft.
Dabei bekommen Sie 0 als Rückgabewert, wenn keine Fehler
gefunden werden. Andernfalls erhalten Sie eine 1.
-f [alternative Konfigurationsdatei]
Mit dieser Option können Sie visudo eine alternative Konfigurationsdatei übergeben. Per Default wird die Datei /etc/sudoers
editiert.
-q
Bei dieser Option werden keine Details über die gefundenen
Syntaxfehler ausgegeben.
-s
Um eine sehr genau Überprüfung der Syntax vorzunehmen,
können Sie sich dieser Option bedienen.
-V
Zeigt die aktuelle Versionsnummer von visudo und bricht ab.
Tabelle 6.1 Optionen für visudo
Fehlermeldungen
Wie bereits besprochen, gibt Ihnen visudo in bestimmen Situationen eine Fehlermeldung zurück. Welche Fehlermeldungen dabei angezeigt werden können und
was sie bedeuten, sollte aus Tabelle 6.2 hervorgehen.
Fehlermeldung
Bedeutung
Sudoers file busy, try
again later
Sie können die Konfigurationsdatei momentan nicht bearbeiten, da
gerade ein anderer Administrator Änderungen daran vornimmt.
/etc/sudoers.tmp:
Permission denied
Sie haben visudo nicht als root aufgerufen. sudoers.tmp ist die Datei,
die erzeugt wird, wenn Sie Änderungen an der Konfigurationsdatei vornehmen wollen. Aus Sicherheitsgründen werden diese
Änderungen nicht direkt an der Datei /etc/sudoers vorgenommen.
Tabelle 6.2 Fehlermeldungen
Sandini Bib
308
6 Tools
Fehlermeldung
Bedeutung
Can't find you in the
passwd database
Ihre User-ID ist nicht in der Passwortdatei zu finden.
Warning: undeclared Alias Entweder benutzen Sie einen {User, Runas, Host, Cmnd}_Alias,
referenced near ...
bevor Sie diesen definiert haben, oder Sie haben einen Usernamen oder einen Hostnamen aufgeführt, der nur aus Großbuchstaben, Ziffern oder einem Unterstrich besteht. Falls Sie die –sOption benutzen, werden diese Meldungen nicht als Warnungen, sondern als Fehler ausgegeben.
Tabelle 6.2 Fehlermeldungen (Forts.)
Nachdem Sie nun wissen, wie Sie die Konfigurationsdatei editieren können, sollen wir uns der Syntax dazu widmen.
Konfigurationsdatei
Vorwort zum Manual
Falls Sie sich denken, dass die Beschreibung in diesem Buch etwas zu knapp geraten ist (was ich nicht hoffe, da ich versuche, jeden einzelnen Punkt genau zu beschreiben), können Sie einen Blick in das Manual werfen. Seien Sie aber nicht
überrascht, falls Sie nicht auf Anhieb alles verstehen werden. Die Erklärungen in
der Manpage sind in Extended Backus Naur Form (EBNF) verfasst.
Falls Sie aber dennoch einen Blick in die Manpage werfen wollen oder eine andere Manpage, die in EBNF verfasst wurde, verstehen wollen, können Sie einen
Blick in den folgenden Exkurs werfen, welcher kurz die Metazeichen dafür erläutert. Danach sollten Sie nach einiger Einarbeitungszeit EBNF lesen können.
Extended Backus Naur Form (EBNF)
Sprachkonstrukt
Sprachkonstrukt der Programmiersprache
<1> ::= <2>
Ableitungsregel: Der linke Teil <1> wird durch den rechten Teil
<2> definiert.
|
Oder-Definition
{ }
Das in Mengenklammern eingeschlossene Konstrukt kann 0-mal
oder mehrfach vorkommen.
[ ]
Das in Intervallklammern eingeschlossene Konstrukt kann 0-mal
oder höchstens 1-mal vorkommen
Für weitergehende Informationen sollten Sie sich die RFC dazu ansehen:
http://www.ietf.org/rfc/rfc2234.txt
Sandini Bib
6.1 Superuser Do (sudo)
309
Bestandteile
Die Syntax der Konfigurationsdatei /etc/sudoers besteht grundsätzlich aus zwei
Einträgen:
Aliase
Benutzerspezifikationen
Aliase
Sudo bietet grundsätzlich vier verschiedene Aliase zur Auswahl an. Tabelle 6.3
stellt Ihnen diese Aliase kurz vor und gibt zu jedem Punkt eine kurze Beschreibung.
Aliase
Beschreibung
User_Alias
Hiermit können Sie einzelne User oder Gruppen zusammenfassen.
Runas_Alias
Hiermit können Sie einzelne User oder Gruppen zusammenfassen, deren UIS durch die »-u«-Option von Sudo angenommen
werden.
Host_Alias
Hiermit können Sie einzelne Hosts, IP-Adressen oder ganze
Netzwerke zusammenfassen.
Cmnd_Alias
Hiermit können Sie einzelne Befehle oder Verzeichnisse, in
denen sich Befehle befinden, zusammenfassen.
Tabelle 6.3 Verfügbare Aliase
Lassen Sie uns dazu ein Beispiel ansehen:
Nehmen wir an, Sie wollen, dass alle Dominoentwickler in Ihrem Haus bestimmte Befehle ausführen dürfen. Dazu müssen Sie als Erstes eine Gruppe erstellen, die alle betreffenden Dominoentwickler enthält. Der Aufruf hierfür sieht
folgendermaßen aus:
User_Alias
DOMINO = roland, joe, aga, aj
Wie Sie sehen können, haben wir die User roland, joe, aga und aj in die Gruppe
DOMINO verfrachtet. Der Gruppenname ist absichtlich in Großbuchstaben verfasst. Sie könnten aber zusätzlich auch Ziffern oder Unterstriche verwenden
(jedoch keine Kleinbuchstaben).
Als Nächstes müssen Sie sich Gedanken machen, auf welchen Hosts diese Entwickler die bestimmten Rechte haben sollten. Sie kommen zu dem Schluss, dass
es reicht, wenn Sie die benötigten Befehle auf den Dominoservern ausführen dürfen (domina1 und domina2).
Host_Alias
DOMINOSERVER = domina1, domina2
Sandini Bib
310
6 Tools
Der letzte Schritt, den wir mit unserem derzeitigen Wissen durchführen können,
besteht in der Befehlsdefinition. Hierbei müssen Sie einen Namen für die Befehle
angeben (ahnlich den beiden zuvor gesehenen Definitionen).
Dafür sollten Sie sich überlegen, welche Befehle die Entwickler benötigen. Nach
einiger Zeit und nach einer intensiven Befragung des Teams kommen Sie zum
Schluss, dass folgende Befehle benötigt werden:
1. /usr/bin/kill
2. /usr/sbin/halt, /usr/sbin/fasthalt
3. /usr/bin/su
4. Jetzt müssen Sie diese Befehle noch zusammenfassen:
Cmnd_Alias
DOM_CMND = /usr/bin/kill, /usr/sbin/halt, /usr/
sbin/fasthalt, /usr/bin/su
5. Die genaue Definition und die Bedingungen für die Ausführung können wir
im Moment noch nicht realisieren.
Defaults
Bestimmte Konfigurationsoptionen können während der Laufzeit von Ihrem Defaultwert geändert werden. Diese Änderung kann dabei jeden Host, jeden User
auf einem bestimmten Host oder einen bestimmten User betreffen. Falls mehrere
Zeilen zutreffen, werden diese der Reihe nach angewendet. Falls bestimmte
Werte im Konflikt zueinander stehen, wird der letzte Wert angewendet.
Sehen wir uns hierzu drei kurze Beispiele an:
Sie wollen alle User aus der Gruppe DOMINA spezifizieren:
Defaults:DOMINA Parameter
Sie wollen den User joe spezifizieren:
Defaults:joeParameter
Sie wollen alle Hosts der Gruppe SERVERS spezifizieren:
Defaults@SERVERSParameter
Aus den Beispielen können Sie die unterschiedliche Verwendung der Syntax gut
erkennen.
Nun sollten wir uns dem Wert Parameter widmen. Dieser kann aus folgenden
Werten bestehen:
flags
Integerwerte
Sandini Bib
6.1 Superuser Do (sudo)
311
strings
lists
Flags Operator
Sie können bestimmte Flags mit dem !-Operator abschalten. Zum Beispiel:
Defaults:joe
!authenticate
Integerwerte, strings- und lists-Operatoren
Auch diese Werte können Sie abschalten (ähnlich zu den Flags). Wenn Sie diesen
Werten mehrere Wörter übergeben wollen, müssen Sie diese in Anführungszeichen setzen. Listen haben jedoch zwei weitere Operatoren zur Verfügung:
Mit Hilfe des +=-Operators können Sie bestimmte Werte zu einer Liste hinzufügen. Um Werte zu entfernen benutzen Sie den -=-Operator.
Platzierung
Am besten platzieren Sie die Defaultspezifikationen zwischen den Aliasen und
Benutzerspezifikationen.
Flags
Tabelle 6.4 zeigt alle verfügbaren Flags und gibt zu jedem Punkt eine kleine Beschreibung.
Flag
Beschreibung
long_otp_prompt
Falls ein One Time Passwort verwendet wird (S/Key oder OPIE),
wird die Abfrage in zwei Zeilen durchgeführt, um Cut and Paste
leichter durchführen zu können. Dieses Flag ist per Default off.
ignore_dot
Mit dieser Option wird der Punkt (aktuelles Verzeichnis) in der
PATH-Variablen ignoriert. Diese Flag ist per Default off.
mail_always
Schickt dem mailto-User jedes Mal eine Mail, wenn Sudo
benutzt wird. Dieses Flag ist per Default off.
mail_badpass
Schickt dem mailto-User jedes Mal eine Mail, wenn der aktuelle User ein falsches Passwort benutzt hat. Dieses Flag ist per
Default off.
mail_no_user
Schickt dem mailto-User jedes Mal eine Mail, wenn der User,
der Sudo aufrufen will, nicht in der Konfigurationsdatei zu finden ist. Dieses Flag ist per Default on.
mail_no_host
Schickt dem mailto-User jedes Mal eine Mail, wenn der User,
der Sudo aufruft, zwar in der Konfigurationsdatei zu finden ist,
aber keine Befehle auf dem aktuellen Host ausführen darf. Dieses
Flag ist per Default off.
Tabelle 6.4 Verfügbare Flags
Sandini Bib
312
6 Tools
Flag
Beschreibung
mail_no_perms
Schickt dem mailto-User jedes Mail eine Mail, wenn der User,
der Sudo aufruft, dazu berechtigt ist, aber der Befehl, den er ausführen will, nicht in der Konfigurationsdatei gefunden werden
kann.
tty_tickets
User müssen sich an einer tty-Basis authentifizieren. Normalerweise benutzt Sudo ein Verzeichnis im Ticketverzeichnis mit
dem Namen des aktuellen Users. Wenn dieses Flag aktiviert ist,
wird Sudo eine Datei mit dem Namen des tty, an dem der User
angemeldet ist erstellen. Dieses Flag ist per Default off.
lecture
Der User erhält beim ersten Benutzen von Sudo einen kurzen
Vortrag. Dieses Flag ist per Default on.
authenticate
Die User müssen sich mit einem Passwort authentifizieren, bevor
sie Befehle ausführen dürfen. Dieser Defaultwert kann mit den
Flags PASSWD und NOPASSWD überschrieben werden. Dieses
Flag ist per Default on.
root_sudo
Root darf ebenfalls Sudo benutzen. Sie sollten diese Option deaktivieren, da sie es Usern ermöglicht, durch die Verkettung von
Befehlen eine Rootshell zu bekommen:
sudo sudo /bin/sh
Dieses Flag ist per Default on.
log_host
Der Hostname wird im Sudologfile festgehalten. Dieses Flag ist
per Default off.
log_year
Das Jahr (vierstellig) wird im Sudologfile festgehalten. Dieses
Flag ist per Default off.
shell_noargs
Wenn Sudo mit keinen Argumenten aufgerufen wird, agiert es,
als wäre das -s-Flag gesetzt. Das heißt Sudo öffnet eine Rootshell. Dieses Flag ist off per Default.
set_home
Wenn Sudo mit der –s-Option aufgerufen wird, setzt Sudo die
HOME-Umgebungsvariable auf das Homeverzeichnis des Zielusers (root, außer es wurde die –u-Option benutzt). Dies bedeutet, dass die –s-Option die –H-Option impliziert. Dieses Flag ist
per Default off.
always_set_home
Sudo setzt die HOME-Umgebungsvariable auf das Homeverzeichnis des Zielusers (root, außer es wurde die –u-Option
benutzt). Dies bedeutet, dass die –s-Option die –H-Option
impliziert. Dieses Flag ist per Default off.
path_info
Normalerweise teilt Sudo dem User mit, wenn ein Befehl nicht in
der PATH-Umgebungsvariable zu finden ist. Sie können dies
deaktivieren, das kann aber zu sehr verwirrenden Ergebnissen
führen. Dieses Flag ist per Default off.
Tabelle 6.4 Verfügbare Flags (Forts.)
Sandini Bib
6.1 Superuser Do (sudo)
313
Flag
Beschreibung
preserve_groups
Per Default initialisiert Sudo den Gruppenvektor zu der Liste der
Gruppe, in der sich der Zieluser befindet. Falls Sie aber diese
Flag setzen, wird der Gruppenvektor nicht verändert. Die richtigen Gruppen IDs werden jedoch weiterhin so gesetzt, dass sie
der ID des Zielusers entsprechen. Dieses Flag ist per Default off.
fqdn
Sie können dieses Flag setzen, um vollständige Hostnamen anzugeben. Anstatt joey können Sie joey.testdomain2.de angeben. Es ist
aber weiterhin erlaubt die Kurzform anzugeben, Sie können
diese beiden Formen sogar mischen. Beachten Sie dabei aber,
dass Sudo nicht mehr lauffähig ist, wenn der DNS stoppt. Weiter
müssen Sie den offiziellen Hostnamen benutzen, den der DNS
auch kennt. Das heißt, dass Sie keinen Hostaliase benutzen können! Dieses Flag ist per Default off.
insults
Sudo wird den User »beleidigen«, wenn Sie ein falsches Passwort
eingeben. Dieses Flag ist per Default off.
requiretty
Sudo läuft nur dann, wenn der User in einen echten tty eingeloggt
ist. Dies verhindert, dass User, die über bestimmte Remotedienste
eingeloggt sind und dadurch keinen tty zugewiesen bekommen,
Sudo ausführen können. Dieses Flag ist per Default off.
env_editor
Falls dieses Flag gesetzt ist, wird visudo den Editor, der in der
Umgebungsvariable EDITOR oder VISUAL angegeben ist, benutzen. Beachten Sie, dass diese Option eine große Sicherheitslücke
aufbricht, da der User jeden beliebigen Befehl als Root ausführen
kann, ohne sich davor einloggen zu müssen. Wir werden dafür
einen sichereren Weg kennen lernen. Dieses Flag ist per Default
off.
rootpw
Sudo wird nach dem Rootpasswort fragen (normalerweise fragt
Sudo nach dem Passwort des aktuellen Users). Dieses Flag ist per
Default off.
runaspw
Sudo wird nach dem Passwort des in runas_default definierten Users fragen, anstatt nach dem Passwort des aktuellen Users.
Dieses Flag ist per Default off.
targetpw
Sudo wird nach dem Passwort des mit der –u-Option angegebenen Users fragen (anstatt des Passwortes des aktuellen Users).
Dieses Flag ist per Default off.
set_logname
Normalerweise setzt Sudo die LOGNAME- und USER-Umgebungsvariablen auf den Wert des Zielusers (meistens root, außer die –
u-Option wurde benutzt). Es gibt jedoch einige Programme, die
die Variable LOGNAME benutzen, um die Identität des Users
festzustellen. Sie sollten daher diese Option deaktivieren, falls
Sie solche Programme auf Ihrem System laufen haben.
Tabelle 6.4 Verfügbare Flags (Forts.)
Sandini Bib
314
6 Tools
Flag
Beschreibung
stay_setuid
Normalerweise setzt Sudo die UID des aktuellen Users auf die
Ziel-Uid (zumeist root), wenn der User einen Befehl ausführt.
Mit diesem Flag erreichen Sie, dass dies nicht mehr so gehandhabt wird. Die UID bleibt auf den Wert des aktuellen Users
gesetzt. Sudo arbeitet also wie ein setuid-wrapper.
env_reset
Falls Sie dieses Flag setzen, wird Sudo die ENV (Umgebungsvariablen) so setzen, dass diese nur noch folgende Variablen beinhaltet:
HOME
LOGNAME
PATH
SHELL
TERM
USER
Dabei müssen Sie weiter beachten, dass nur die Variable TERM
unverändert aus der ursprünglichen ENV übernommen wird. Die
anderen Variablen werden auf Defaultwerte gesetzt. Falls Sudo
mit der SECURE_PATH-Option kompiliert wurde, wird dieser
Wert für die PATH-Variable verwendet. Sie können weitere
Umgebungsvariablen mit der env_keep-Option schützen.
use_loginclass
Falls dieses Flag gesetzt wird, wird der angegebene Defaultwert
für die User Login Class angewendet (falls sie existiert). Diese
Flag ist nur verfügbar, falls Sudo mit der --with-logincapOption kompiliert wurde. Dieses Flag ist per Default off.
Tabelle 6.4 Verfügbare Flags (Forts.)
Integerwerte
Nachdem Sie nun alle verfügbaren Flags kennen, können wir uns den Integerwerten widmen. Sie finden alle dafür verfügbaren Integerwerte in Tabelle 6.5.
Integerwert
Beschreibung
passwd_tries
Gibt an, wie oft ein User sein Passwort falsch eingeben darf,
bevor dies geloggt wird und Sudo beendet.
loglinelen
Gibt die Anzahl der Zeichen pro Zeile in einem Logfile an. Dies
hat keine Auswirkungen auf das Syslogfile! Der Default liegt bei
80. Um diese Option zu deaktivieren, können Sie die 0 wählen.
timestamp_timeout
Gibt an, wie viele Minuten vergehen dürfen, bis Sudo den User
erneut nach einem Passwort fragt. Der Defaultwert liegt bei 5
Minuten. Um immer nach einem Passwort zu fragen, setzen Sie
diese Option auf 0. Falls Sie einen Wert kleiner als 0 angeben,
wird der User niemals nach einem Passwort gefragt.
Tabelle 6.5 Verfügbare Integerwerte
Sandini Bib
6.1 Superuser Do (sudo)
315
Integerwert
Beschreibung
passwd_timeout
Gibt an, wie lange der Passwortprompt angezeigt werden soll.
Der Default liegt bei 5 (also 5 Minuten). Sie können diesen Wert
auf 0 setzen, um keinen timeout zu definieren.
umask
Gibt die umask an, die benutzt werden soll, wenn ein Befehl ausgeführt wird. Setzen Sie den Wert 0777 um die umask des Users
zu bewahren. Der Defaultwert liegt bei 022.
Tabelle 6.5 Verfügbare Integerwerte (Forts.)
Strings
Werfen wir nun einen Blick auf die verfügbaren Strings. Tabelle 6.6 stellt uns alle
verfügbaren Strings kurz anhand einer Beschreibung vor.
String
Beschreibung
mailsub
Gibt das Subject (Betreffzeile) der Mail an, die an den mailto
User geschickt wird.
badpass_message
Gibt die Nachricht an, die angezeigt wird, wenn ein User ein falsches Passwort eingibt. Falls insults nicht aktiviert sind, liegt der
Default bei:
Sorry, try again.
timestampdir
Gibt das Verzeichnis an, in dem Sudo seine Timestampdateien
aufbewahrt. Der Default liegt bei /var/run.
passprompt
Gibt den Defaultprompt an, der gezeigt wird, wenn nach einem
Passwort gefragt werden soll. Dieser Wert kann mit der –p-Option
oder mit der SUDO_PROMPT-Umgebungsvariable überschrieben
werden. Sie können dabei auch zwei Sonderwerte benutzen:
%u gibt den Usernamen an
%h gibt den lokalen Hostnamen an
Der Defaultwert liegt bei:
Password:
runas_default
Gibt den User an, unter dem die Befehle ausgeführt werden (nur
wenn die –u-Option nicht beim Start gewählt wurde). Der
Defaultuser ist root.
syslog_goodpri
Gibt das Sysloglevel an, wenn sich der User erfolgreich angemeldet hat. Defaultwert liegt bei notice. Verfügbare Werte sind:
debug
info
notice
warning
warn
Tabelle 6.6 verfügbare Strings
Sandini Bib
316
String
6 Tools
Beschreibung
err
error
crit
alert
emerg
panic
syslog_babpri
Gibt das Sysloglevel an, wenn sich der User nicht erfolgreich
angemeldet hat. Der Defaultwert liegt bei alert. Verfügbare
Werte sind im vorherigen Punkt aufgeführt.
editor
Eine durch Doppelpunkt getrennte Liste von Editoren, die von
visudo benutzt werden können. Falls in der Umgebungsvariable
USER kein Editor vorhanden ist, der auch in der Liste vorhanden
ist, wählt visudo den ersten Editor der angegebenen Liste. Per
Default wird vi aufgerufen.
logfile
Gibt den Pfad zur Loggingdatei an. Falls ein Pfad angegeben
wird, ist Logging aktiviert, falls nicht, ist es deaktiviert.
syslog
Gibt die Syslogfacility an, die für das Logging benutzt werden
soll. Der Defaultwert liegt bei local2. Mögliche Wert hierfür
sind:
auth
daemon
user
local0
local1
local2
local3
local4
local5
local6
local7
mailerpath
Gibt den Pfad zum Mailprogramm an, das benutzt wird, um
Warnungen zu verschicken. Defaultwerte werden während der
Konfiguration gesucht.
mailerflags
Flags, die beim Aufruf des Mailprogramms gesetzt werden sollen. Default liegt bei -t.
mailto
Gibt die Adresse an, an die Warnungen und Fehlermeldungen
geschickt werden sollen. Dieser Wert sollte in Anführungszeichen angegeben werden, damit Sudo das @-Zeichen nicht falsch
interpretiert. Default User und Mailadresse ist root.
Tabelle 6.6 verfügbare Strings (Forts.)
Sandini Bib
6.1 Superuser Do (sudo)
317
String
Beschreibung
exempt_group
User in dieser Gruppe sind von Passwort und PATH-Bedingungen befreit. Es ist kein Defaultwert gesetzt.
verifypw
Diese Option kontrolliert, wann ein Passwort benötigt wird,
wenn ein User Sudo mit der –v-Option startet. Mögliche Werte
hierfür sind:
all
Alle den aktuellen User betreffenden Einträge müssen das
NOPASSWD-Flag gesetzt haben, um zu verhindern, dass ein Passwort eingegeben wird. Dies ist der Standardwert.
any
Mindestens einen den aktuellen User betreffenden Eintrag muss
das NOPASSWD-Flag gesetzt haben, um zu verhindern, dass ein
Passwort eingegeben wird.
never
Der User braucht niemals ein Passwort einzugeben, wenn er die
–v-Option benutzt.
always
Der User muss immer ein Passwort eingeben, wenn er die
-v-Option benutzt.
listpw
Diese Option kontrolliert, ob ein Passwort benötigt wird, wenn
ein User Sudo mit der -l-Option startet. Mögliche Wert sind:
all
Alle den aktuellen User betreffenden Einträge müssen das
NOPASSWD-Flag gesetzt haben, um zu verhindern, dass ein Passwort eingegeben wird.
any
Mindestens einen den aktuellen User betreffenden Eintrag muss
das NOPASSWD-Flag gesetzt haben, um zu verhindern, dass ein
Passwort eingegeben wird.
Dies ist der Defaultwertnever
Der User braucht niemals ein Passwort einzugeben, wenn er die
–l-Option benutzt.
always
Der User muss immer ein Passwort eingeben, wenn er die
–l-Option benutzt.
env_check
Gibt die Umgebungsvariablen an, die aus der Umgebung (ENV)
des Users gelöscht werden sollen. Diese müssen eines der beiden
Zeichen enthalten:
%
/
Tabelle 6.6 verfügbare Strings (Forts.)
Sandini Bib
318
String
6 Tools
Beschreibung
Trennen Sie mehrere Argumente mit der Leertaste und setzen Sie
sie in Anführungszeichen.
Sie können außerdem folgende Operatoren verwenden:
=
Ersetzt vorhandene Liste
+=
Addiert Wert zur vorhandenen Liste
-=
Löscht Wert aus vorhandener Liste
!
Deaktiviert Liste
Die Defaultliste für die zu überprüfenden Variablen erhalten Sie,
wenn Sie Sudo als root mit der Option -V starten.
env_delete
Gibt die Umgebungsvariablen an, die aus der Umgebung (ENV)
des Users gelöscht werden sollen.
Trennen Sie mehrere Argumente mit der Leertaste und setzen Sie
sie in Anführungszeichen.
Sie können außerdem folgende Operatoren verwenden:
=
Ersetzt vorhandene Liste
+=
Addiert Wert zur vorhandenen Liste
-=
Löscht Wert aus vorhandener Liste
!
Deaktiviert Liste
Die Defaultliste für die zu überprüfenden Variablen erhalten Sie,
wenn Sie Sudo als root mit der Option -V starten.
env_keep
Gibt die Umgebungsvariablen an, die bei der Initialisierung der
env_reset-Option geschützt werden sollen. Sie können eine
Liste von Variablen übergeben, diese müssen Sie dann allerdings
in Anführungszeichen setzen und durch die Leertaste trennen.
Tabelle 6.6 verfügbare Strings (Forts.)
Benutzerspezifikationen
Jetzt kennen Sie die Möglichkeiten und Tücken der verfügbaren Aliase und wir
können uns den Benutzerspezifikationen widmen.
Benutzerspezifikationen bestimmen, welcher User welchen Befehl unter der ID
eines bestimmten Users auf einem bestimmten Host ausführen darf. Der allgemeine Aufruf in der Konfigurationsdatei erfolgt folgendermaßen:
Sandini Bib
6.1 Superuser Do (sudo)
319
USER_ALIAS HOST_ALIAS = [NOPASSWD:] [Wildcards, Metazeichen,
Reservierte Wörter] CMND_ALIAS
RUNAS_SPEC
Mit Hilfe des RUNAS_SPEC können Sie angeben, dass ein bestimmter User den Befehl CMND1 als TARGET1 und Befehl CMND2 als TARGET2 laufen lassen darf. Hierzu
einige kurze Beispiele:
joe
host1 = (operator) /bin/ls, /bin/kill, /usr/bin/who
Die eben gezeigte Syntax gibt an, dass der User joe die Befehle:
/bin/ls
/bin/kill
/usr/bin/who
mit den Rechten des Operators am Host host1 ausführen darf.
Der User kann diese Befehle dann durch einen besonderen Aufruf von Sudo
ausführen:
Linux:~# sudo -u operator /usr/bin/who
Sie können auch mehrere Targetuser in die Syntax einbauen:
joe
host1 = (operator) /bin/ls, (root) /bin/kill, /usr/bin/who
Jetzt darf der User joe den Befehl /usr/ls mit den Rechten des Operators ausführen, die beiden weiteren aber als Root.
PASSWD und NOPASSWD
Bevor ein User einen bestimmten Befehl ausführen darf, muss er sich normalerweise via Passwort authentifizieren. Man kann diesen Mechanismus aber durch
das Setzen des NOPASSWD-Flags abschalten. Die Initialisierung erfolgt dabei ähnlich zu der Syntax der RUNAS_SPEC. So sind nur die Befehle, die nach dem NOPASSWD-Flag aufgeführt sind, von diesem Mechanismus befreit. Durch Setzen des
PASSWD-Flag wird der Mechanismus wieder aktiviert.
Auch hierzu sollten wir uns ein Beispiel ansehen:
joe host1 = NOPASSWD: /usr/bin/who
Die eben vorgestellte Syntax bewirkt, dass der User joe auf dem Rechner host1
den Befehl /usr/bin/who ausführen darf, ohne dass er dabei nach einem Passwort
gefragt wird.
Die nächste Zeile einer Beispielkonfigurationsdatei besagt, dass der User joe den
Befehl /usr/bin/who ohne Passworteingabe ausführen darf. Falls er aber den Befehl
/bin/ls benutzt, wird er aufgefordert ein Passwort einzugeben.
joe
host1 =NOPASSWD:/usr/bin/who, PASSWD: /bin/ls
Beachten Sie dabei aber, dass der User joe sich nicht in der exempt_group befinden darf, da das PASSWD-Flag nicht bei Usern in dieser Gruppe greift.
Sandini Bib
320
6 Tools
Wildcards und Metazeichen
Sudo erlaubt shellähnliche Wildcards für den Aufruf von Pfadnamen genauso
wie für Kommandozeilenargumente in der Konfigurationsdatei. Tabelle 6.7 zeigt
die zusätzlich verfügbaren Sudo-Metazeichen (Wildcards):
Metazeichen
Beschreibung
(Wildcard)
*
Trifft bei jeder möglichen Kombination von einen oder mehreren Zeichen zu
?
Trifft bei einem einzelnen Zeichen zu
[… ]
Trifft auf jedes Zeichen in dem angegebenen Bereich zu
[!...]
Trifft auf jedes Zeichen zu, das sich nicht in dem angegebenen Bereich befindet
\x
Wird benutzt um besondere Zeichen zu escapen (wie zum Beispiel: *, ?...)
Tabelle 6.7 Sudo Metazeichen
Ausnahmen zu Wildcards und Metazeichen
Falls der leere String als einziges Argument in der Kommandozeile in der Konfigurationsdatei übergeben wird, bedeutet dies, dass der Befehl mit keinen Argumenten aufgerufen werden darf.
Beispielkonfigurationsdatei
Zum Abschluss werden wir unser eben erlangtes Wissen umsetzen und eine Konfigurationsdatei erstellen. Ich werde die nötigen Erklärungen als Kommentare in
die Datei einfügen. Das sollte Ihnen eine Menge Sucharbeit ersparen.
Beachten Sie aber, dass diese Datei auf keinen Fall vollständig ist.
# sudoers file
#
# This file MUST be edited with the ‚visudo’ command as root.
#
# See the sudoers man page for the details on how to write a
sudoers file.
#
# Als Erstes definieren wir unsere Aliase
#
# Beginnen wir mit den USER Aliasen
#
User_Alias
ENTWICKLER = brunnerj, neutatza, maiers,
User_Alias
SECURITY = dau, paddy
User_Alias
USERADMIN = goetzs, mosers, schmidtw
User_Alias
WEBMASTER = muellera, meiern
User_Alias
NETZTECHNIK = thomsonb, rueffelf
.
.
.
#
Sandini Bib
6.1 Superuser Do (sudo)
321
# Nun definieren wir die RUNAS Aliase
#
Runas_Alias
OP = root, operator
Runas_Alias
DB = oracle, sybase, mysql
Runas_Alias
RF = redfancy, ownuser
Runas_Alias
FW = firewall, sad
.
.
.
#
# Jetzt kümmern wir uns um die Host Aliase
#
Host_Alias
SOLARIS_SPARC = mail, firewall:\
LINUX_INTEL = net1, net2, net3, dev1, dev2, :\
LINUX_ALPHA = dev5, dev6, dev7, dev9, net6, net7,
:\
SOLARIS_INTEL = backup1, backup2
Host_Alias
ADMINS_WS= 10.209.100.0/255.255.255.0
Host_Alias
TEST = 132.128.24.0/24
Host_Alias
STORAGE = stor1, stor2, stor3, storback
Host_Alias
SEC_DATA = psst1, psst2
Host_Alias
DIALIP = dial1, dial2
.
.
.
#
# Als Letztes definieren wir noch die Befehls-Aliase
#
Cmnd_Alias
FILESHIP = /bin/chown, /bin/chmod
Cmnd_Alias
MOUNT = /bin/mount, /bin/umount
Cmnd_Alias
KILL = /usr/bin/kill
Cmnd_Alias
PRINTING = /usr/sbin/lpc, /usr/bin/lprm
Cmnd_Alias
SHUTDOWN = /usr/sbin/shutdown, /sbin/init
Cmnd_Alias
HALT = /usr/sbin/halt, /usr/sbin/fasthalt
Cmnd_Alias
REBOOT = /usr/sbin/reboot, /usr/sbin/fastboot
Cmnd_Alias
SHELLS = /usr/bin/sh, /usr/bin/csh, /usr/bin/ksh, \
/usr/local/bin/tcsh, /usr/bin/rsh,
/bin/ash, \
/usr/local/bin/zsh
Cmnd_Alias
SU = /usr/bin/su
Cmnd_Alias
DEL = /bin/rm, /bin/rmdir
Cmnd_Alias
COPY = /bin/mv, /bin/cp
.
.
.
#
# Jetzt überschreiben wir einige Defaultwerte
#
Defaults
syslog=auth
Sandini Bib
322
6 Tools
Defaults:WEBMASTER
!lecture, mail_no_perms
Defaults:joe
!authenticate
Defaults@LINUX_INTEL
log_year, log_host, logfile=/var/log/
sudo.log
.
.
.
#
# Jetzt machen wir uns an die eigentliche Arbeit und vergeben
# bestimmte Rechte
#
# Benutzerspezifikationen
#
# Dieser erste Block bedeutet, dass wir dem User Root und jedem
User
# aus den Gruppen
# fastroot und chef jeden Befehl unter jedem Usernamen auf jedem
# Host erlauben.
root
ALL = (ALL) ALL
%fastroot
ALL = (ALL) ALL
%chef ALL = (ALL) ALL
# Jetzt beschäftigen wir uns mit den vorher definierten Gruppen
# Diese Zeile besagt, dass die Benutzer aus
# der Gruppe Security jeden Befehl
# auf jedem Host ausführen dürfen, ohne dass sie dabei
# ein Passwort angeben müssen.
SECURITYALL = NOPASSWD: ALL
# Für die USERADMIN gilt dasselbe mit dem Unterschied,
# dass sie ein Passwort angeben müssen.
USERADMINALL = ALL
# Nun erlauben wir dem User inge auf jedem Host
# der Gruppe LINUX_INTEL jeden Befehl auszuführen.
ingeLINUX_INTEL = ALL
# Jetzt erlauben wir, dass der User franz jedes Userpasswort auf
# Rechnern
# des Aliase Test ändern darf.
franz
TEST = /usr/bin/passwd [A-z]*
# Nun erlauben wir den Usern tom und cherry noch,
# dass sie auf ihren eigenen Rechnern Prozesse
# killen dürfen.
tom
tom_ws = KILL
cherry
cherry_ws = KILL
.
.
.
#
# Jetzt fügen wir noch eine Run_as Zeile ein.
#
# Diese Zeile gibt unserem Chef das Recht die aufgeführten Befehle
Sandini Bib
6.1 Superuser Do (sudo)
323
# auf seinem Rechner auszuführen. Allerdings nur als Operator.
chef
chef_ws= (operator) /bin/ls, /bin/kill, /bin/mv
.
.
.
Wie Sie sehen, ist die Umsetzung der kennen gelernten Argumente und Optionen
nicht schwer. Sie sollten sich aber einige Zeit nehmen, um die Bedürfnisse genauestens zu studieren, so dass Sie eine sichere Sudo-Umgebung schaffen können.
6.1.3
Sudo-Befehl
Nun endlich kommen wir zum eigentlichen Sudo-Befehlsaufruf. Ich denke, wir
brauchen an dieser Stelle nicht mehr allzu viel zu erklären und können sofort mit
der Syntax beginnen:
Linux:~# sudo [Optionen]
Tabelle 6.8 enthält alle verfügbaren Optionen mit einer entsprechenden Beschreibung zu jedem Argument.
Option
Beschreibung
-V
Sudo gibt die Versionsnummer aus und beendet danach. Falls der Benutzer, der
Sudo mit dieser Option aufruft, root ist, bekommt dieser eine Liste von Defaultwerten ausgegeben (wir haben dies bereits bei der Konfigurationsbesprechung gesehen).
-l
Diese Option gibt dem User eine Liste der erlaubten und verbotenen Befehle auf
dem aktuellen Host aus.
-L
Durch Angabe dieser Option wird eine Parameterliste des Defaultabschnittes
(siehe Konfiguration) mit einer kurzen Beschreibung ausgegeben.
-h
Sie können diese Option benutzen, um eine kurze Bedienungsanleitung zu
bekommen.
-v
Hierbei wird der Timestamp des Users auf den neuesten Stand gebracht und –
falls nötig – nach einem Passwort gefragt.
-k
Mit dieser Option neutralisieren Sie den Timestamp des Users. Beim nächsten
Start von Sudo wird nach einem Passwort gefragt. Für die Durchführung dieser
Option wird aber kein Passwort benötigt.
-K
Hiermit löschen Sie den Timestamp des Users vollkommen. Auch hier brauchen
Sie kein Passwort anzugeben.
-b
Sudo wird den angegebenen Befehl im Hintergrund ausführen.
-p
Falls Sie den Defaultpasswortprompt ändern wollen, können Sie dies mit dieser
Option erledigen. Sie können durch den Platzhalter %u den Usernamen angeben.
Zum Beispiel ergibt dieser Aufruf:
Hey %u, gib dein Passwort ein.
Tabelle 6.8 Optionen
Sandini Bib
324
Option
6 Tools
Beschreibung
folgenden Prompt für den User joe:
Hey joe, gib dein Passwort ein.
-c
Dieser Option muss eine Loginklasse folgen. Danach wird Sudo mit den Limitationen dieser Klasse ausgeführt. Dieser Klassenname kann dabei entweder aus
einem einzelnen Zeichen »-« bestehen (gibt an, dass der Befehl strikt nach den
Möglichkeiten des Users, unter dem der Befehl ausgeführt wird, laufen sollen)
oder einem Eintrag aus der Logindatei /etc/login.conf. Falls die angegebene Klasse
eine vorhandene Usergruppe angibt, muss Sudo als root ausgeführt werden.
Beachten Sie dabei, dass für dieses Argument Sudo mit der Option --withlogincab erstellt worden sein muss.
-a
Hierbei können Sie den Authentifizierungstyp auswählen, der benutzt wird um
User zu verifizieren. Sie können eine Liste von möglichen Methoden in der Datei /
ec/login.conf hinterlegen. Dabei leiten Sie diese Liste mit dem Schlüsselwort authsudo. Sudo muss dabei mit der --with-bsdauth-Option erstellt worden sein.
-u
Falls Sie diese Option benutzen, wird Sudo den spezifizierten Befehl nicht unter
dem User root, sondern unter dem von Ihnen angegebenen User laufen lassen.
-s
Diese Option bringt Sudo dazu, die in der Umgebungsvariable SHELL angegebene
Shell laufen zu lassen. Falls diese an dieser Stelle nicht verfügbar ist, wird die Shell
aus /etc/passwd gestartet.
-H
Diese Option setzt die HOME-Umgebungsvariable auf das Homeverzeichnis des
Zielusers (zumeist root). Dabei wird das Verzeichnis gewählt, das in der Passwortdatei /etc/passwd spezifiziert wurde.
-P
Hierbei wird der Groupvektor nicht verändert.
-S
Veranlasst Sudo das Passwort von der Standardeingabe (STDIN) zu lesen
--
Gibt an, dass Sudo mit dem Bearbeiten von Kommandozeilenbefehlen aufhören
soll. Ist sinnvoll in Kombination mit der Benutzung der –s-Option.
Tabelle 6.8 Optionen (Forts.)
Beispiele
Nachdem wir nun fit im Umgang mit Sudo sind, sollten wir uns abschließend
noch einige Befehle anschauen, um unser erlangtes Wissen noch zu vertiefen.
Listing eines geschützten Verzeichnisses
Nehmen wir an, ein User will das Listing eines (für ihn) nicht lesbaren Verzeichnisses erhalten, so muss er folgenden Befehl aufrufen:
Linux:~# sudo ls /verzeichnis
Datei als User root editieren
Das nächste Beispiel zeigt den Befehl, der es einem User ermöglicht, die Passwortdatei als User root zu editieren.
Linux:~# sudo -u root vi /etc/passwd
Sandini Bib
7 Remoteadministration
In diesem Kapitel werden wir uns mit Open-Source-Tools beschäftigen, die es uns
erlauben, unser System remote zu administrieren. Remoteadministration hat in
den letzten Jahren immer mehr an Beliebtheit gewonnen und ist bei der Verwaltung von Serversystemen kaum mehr wegzudenken. Dies hat unter anderem folgende Gründe:
Ein Administrator kann Systeme von jedem Punkt in der Welt (solange es dort
einen für ihn nutzbaren Internetanschluss gibt) verwalten.
Serversysteme brauchen keine Ein- und Ausgabeperipherie wie Monitore,
Tastaturen oder Mäuse mehr, da sie über das Netz konfiguriert werden können.
Der Administrator muss unter Umständen nur das Passwort für das Remoteadministrationstool kennen, um das System zu verwalten.
Wie Sie sehen können, bieten Remoteadministrationstools einige Vorteile gegenüber der normalen Administration vor Ort.
7.1
Webmin
Webmin ist ein Programm, das Ihnen die Administration eines Serversystems
über einen einfachen Browser ermöglicht. Dabei brauchen Sie nicht einmal einen
eigenen Webserver laufen zu haben, da dieser bereits von Webmin gestellt wird.
Die von Ihnen gewünschten Änderungen werden durch die von Webmin mitgelieferten CGI-Skripte ins System übernommen. Falls Sie einmal ein Problem haben, das Sie mit Webmin nicht lösen können oder nicht wissen, wie Sie es mit diesem Programm lösen können, haben Sie die Möglichkeit, auch direkt Befehle an
die Shell auf dem Server zu geben (Dazu wird SSH benutzt).
7.1.1
Installation
Als erstes sollten Sie sich Webmin von der offiziellen Webseite oder der Buchpage
besorgen. Dabei stehen zwei Pakete zur Auswahl bereit, Tar und RPM.
RPM
Wir werden uns zuerst mit der Installation des RPM-Pakets beschäftigen.
Nachdem Sie das Paket geladen haben, können Sie es mit folgendem Befehl
installieren:
Linux:~# rpm -iv webmin-version.rpm
Sandini Bib
326
7 Remoteadministration
Danach sollten die in Tabelle 7.1 gezeigten Module in Ihr System eingebunden sein.
Modul
Beschreibung
Webmin Configuration
Hiermit lassen sich die Einstellungen ändern, die die
Operationen von Webmin steuern.
Webmin Help
Durchsuchbarer Index des Webmin-Hilfesystems
Webmin Servers Index
Lokalisiert und listet alle Webminservers im lokalen Netz
Webmin Users
Verwaltet Webminbenutzer und deren Rechte
Bootup and Shutdown
Kontrolliert die Startup- und Shutdown-Prozesse des
Systems
Disk and Network Filesystems
Nimmt lokale gemountete Filesysteme in Betrieb und listet
sie auf
NFS Exports
Editiert, löscht und fügt neue NFS-exportierte Dateisysteme
ein
Running Processes
Gibt detaillierte Informationen über die laufenden Prozesse
aus
Scheduled Cron Jobs
Zeigt und kontrolliert Cronjobs
Software Packages
Ein grafisches Interface zum RPM-System
Users and Groups
Verwaltet Benutzer und Gruppen
Apache Webserver
Konfiguriert den Apache Webserver
BIND 8 DNS Server
Konfiguriert den Bind 8 DNS
FTP-Server
Konfiguriert den Wu-FTPD Server
Internet Services and Protocols
Verwaltet Internetdienste
Majordomo List Manager
Verwaltet den Majordomo Listserver (grafisch)
PPP Usernames and Passwords Kontrolliert den PPP Server
Samba Windows File Sharing
Bringt den SAMBA-Server und -Client zum Laufen
Sendmail Configuration
Editiert die Sendmail-Konfigurationsdatei
Squid Proxy Server
Konfiguriert Squid
Linux Bootup Configuration
Editiert lilo.conf
Network Configuration
Kontrolliert die Netzwerkkarten und das Netzwerk
Partitions on Local Disks
Editiert, löscht und fügt neue Plattenpartitionen ein
Printer Administration
Verwaltet Druckerwarteschlangen, lokale und RemoteDrucker
System Time
Setzt die Systemzeit und die Hardwareuhr
Custom Commands
Hiermit können Sie benutzerdefinierte Befehle spezifizieren, die Sie dann über Webmin ausführen können
File Manager
Java-basierender Dateimanager
Tabelle 7.1 Perl 5-Module
Sandini Bib
7.1 Webmin
327
Modul
Beschreibung
Telnet Login
Java-basierendes Telnet-Applet
DHCP Server
Konfiguriert den DHCP-Server
Tabelle 7.1 Perl 5-Module (Forts.)
Wie Sie sehen können, bieten Ihnen die Webmin Perl 5-Module eine große Plattform an, die es Ihnen ermöglicht, ein System vollkommen remote zu verwalten.
7.1.2
Start
Um Ihren Webmin-Server zu starten, geben Sie bitte folgenden Befehl ein:
Linux:~# /etc/init.d/init.d/webmin start
Zum Stoppen übergeben Sie stattdessen das Argument stop.
Jetzt können Sie Ihren Webmin-Server über den Port 10000 erreichen. Wenn Sie
sich das erste Mal einloggen, brauchen Sie zur Identifizierung das Rootpasswort.
Später können Sie die Einstellungen abändern, so dass Sie auch ohne das Rootpasswort Zugang zu Ihrem Webmin-Server haben.
Nachdem Sie nun einen laufenden Webmin-Server besitzen, können wir uns daran machen, die nun zur Verfügung stehenden Möglichkeiten ausführlich zu besprechen. Dabei werden wir auf jeden der vorhandenen sechs Oberpunkte genau
eingehen:
1. Webmin
2. System
3. Servers
4. Hardware
5. Cluster
6. Other
Bevor wir mit der Besprechung beginnen, möchte ich Sie darauf hinweisen, dass
wir das Paket Usermin nicht installiert haben, da es dafür bessere Alternativen
(auch in diesem Buch) gibt. Wir werden daher die wenigen Punkte, die Webmin
mit Usermin verbinden, nicht besprechen.
Login
Nachdem Sie die URL Ihres Webminsystems eingegeben haben (IP:Port), haben
Sie die Möglichkeit sich in das System einzuloggen. Da Sie sich das erste Mal anmelden, benötigen Sie dafür das Rootpasswort.
Sandini Bib
328
7 Remoteadministration
Abbildung 7.1 zeigt die Loginseite.
Abbildung 7.1 Loginseite
7.1.3
Webmin
Nachdem Sie sich erfolgreich eingeloggt haben, werden Sie zur Indexseite (Abbildung 7.2) des ersten Oberpunktes »Webmin« weitergeleitet, wo Sie nun die Möglichkeit haben, die folgenden Unterpunkte zu wählen:
Usermin Configuration (Wie bereits erwähnt werden wir Punkte, die im Zusammenhang mit Usermin stehen, nicht besprechen)
Webmin Actions Log
Webmin Configuration
Webmin Servers Index
Webmin Users
Sandini Bib
7.1 Webmin
329
Abbildung 7.2 Webmin
Webmin Actions Log
Dieser Punkt ermöglicht es Ihnen, nach Einträgen in der Logdatei zu suchen. Sie
können die Suche dabei durch drei Angaben verfeinern. Abbildung 7.3 zeigt
diese Seite.
Benutzer
Mit dieser Option können Sie folgende Parameter zur Suche festlegen:
Suche nach bestimmten Usern
Suche ist nicht auf einen bestimmten User begrenzt
Alle User bis auf einen bestimmten Benutzer werden in der Suche mit aufgenommen
Module
Die nächste Möglichkeit die Suchtreffer einzuschränken bzw. ausweiten, besteht
darin, die Module, nach denen gesucht werden soll, zu spezifizieren.
Suche ist nicht auf bestimmte Module eingeschränkt
Suche ist auf ein bestimmtes Modul begrenzt
Sandini Bib
330
7 Remoteadministration
Zeitrahmen
Der letzte Parameter, den Sie für die Suche setzen können, ist der Zeitrahmen. Dabei stehen Ihnen folgende Auswahlmöglichkeiten zur Verfügung:
Eintrag muss zu keiner bestimmten Zeit gemacht worden sein
Eintrag muss von heute stammen
Eintrag muss in einem bestimmten Zeitintervall gemacht worden sein
Abbildung 7.3 Actionslog
Webmin Konfiguration
Dieser Abschnitt ermöglicht es Ihnen, Ihr Webmin-System Ihren Bedürfnissen
entsprechend zu konfigurieren. Wir werden im Folgenden auf die einzelnen
Punkte, die Ihnen dabei zur Verfügung stehen, eingehen.
Abbildung 7.4 zeigt diese Seite.
IP Access Control
Mit Hilfe dieser Seite können Sie den Zugriff auf Ihr Webmin-Serversystem auf
bestimmte Adressen einschränken. Sie sollten dieses Feature auf jeden Fall nutzen, besonders, wenn Ihr System über das Internet erreichbar ist.
Sandini Bib
7.1 Webmin
331
Abbildung 7.4 Webmin Config
Kriterien
Es stehen Ihnen dabei folgende Kriterien zur Zugriffsbeschränkung zur Verfügung (Abbildung 7.5):
Erlaube alle spezifizierten Adressen
Verweigere den Zugriff für alle angegebenen Adressen
Erlaube Zugriff von allen Adressen
Dabei steht es Ihnen frei, eine IP-Adresse, ein Subnet oder einen Hostnamen zu
übergeben.
Port und Adressen
Falls Sie den Standardport, auf dem Webmin horcht, ändern wollen (empfehlenswert), können Sie dies unter diesem Menüpunkt erledigen. Des Weiteren ist es möglich dem Server eine bestimmte IP-Adresse zuzuweisen. Wenn Sie dies nicht tun,
wird Webmin auf allen IP-Adressen des Servers erreichbar sein (Abbildung 7.6).
Sandini Bib
332
7 Remoteadministration
Abbildung 7.5 IP Access Control
Abbildung 7.6 Port and Addresses
Sandini Bib
7.1 Webmin
333
Logging
An dieser Stelle können Sie das Logging für bestimmte Aktionen (actions) aktivieren. Wenn Sie das Logging aktiviert haben, werden Sie die Einträge in den beiden
folgenden Dateien finden (Abbildung 7.7):
1. /var/webmin/miniserv.log
2. /var/webmin/webmin.log
Optionen
Sie haben bei der Aktivierung des Loggings die Möglichkeit zwischen folgenden
Optionen auszuwählen:
Aufgelöste Hostnamen werden mitgeloggt
Zeitdauer, nach der die Einträge gelöscht werden
Aktionen eines bestimmten Users werden mitgeloggt
Aktionen aller User werden mitgeloggt
Alle Aktionen in allen Modulen werden geloggt
Nur Aktionen in bestimmten Modulen werden mitgeloggt
Abbildung 7.7 Logging
Sandini Bib
334
7 Remoteadministration
Proxy Server
Falls der Webmin-Server hinter einer Firewall oder einem Proxy steht, können Sie an
dieser Stelle die entsprechende Adresse angeben, so dass Module, die Zugriff auf Seiten im externen Netz haben müssen (Software Packages), fehlerfrei laufen können.
Sie haben dabei die Möglichkeit folgende Angaben zu machen:
HTTP Proxy
FTP Proxy
Kein Proxy für …
Benutzername für den Proxyzugriff
Passwort für den Proxyzugriff
Sie finden diese Seite in Abbildung 7.8.
User Interface
Falls Sie mit der farblichen Gestaltung Ihres Webmin-Interfaces nicht zufrieden
sind, können Sie hier für die folgenden Punkte andere RGB-Farben (Hexwerte
von 00 bis ff sind erlaubt) definieren.
Hintergrundfarbe der Seite
Normaler Text
Hintergrundfarbe von Tabellen
Farbe für Tabellenüberschriften
Farbe für Links
Des Weiteren können Sie hierbei definieren, wo der Login- und Hostname erscheinen soll.
Webmin-Module
Diese, in Abbildung 7.9 zu sehende Seite erlaubt es Ihnen, Webmin-Module nach
der Installation in das System einzubinden. Meistens haben diese Module die Endung .wbm, wobei eine Datei auch mehrere Module enthalten kann.
Diese Dateien können Sie entweder vom internen oder vom externen Netzwerk
beziehen. Daher ist es auch möglich, Dateien von einer http- oder FTP-Adresse
ins System einzubinden.
Weiter ist es möglich, ein Modul mit mehreren Konfigurationen in einem System
unterzubringen, dabei muss sich lediglich der Name unterscheiden (diese Module nennt man Klone).
Logischerweise können Sie Module auch aus Ihrem Webmin-System löschen.
Dies ist aber nur dann möglich, wenn die betreffenden Module in keiner »Abhängigkeit« zu anderen Modulen stehen. Falls Sie ein Modul löschen, das vorher
»geklont« wurde, so werden die Klone ebenfalls gelöscht.
Sandini Bib
7.1 Webmin
335
Abbildung 7.8 Proxy
Abbildung 7.9 Webmin Module
Sandini Bib
336
7 Remoteadministration
Operating System
Die in Abbildung 7.10 gezeigte Seite ermöglicht es Ihnen, Webmin ein anderes Betriebssystem zu übergeben. Das heißt, dass ab dem Änderungsdatum Webmin
das von Ihnen angegebene OS als vorhanden und aktuell ansieht.
Sie können diese Option nutzen, wenn Sie Ihr Betriebssystem tatsächlich auf den
neuesten Stand gebracht haben. Beachten Sie aber, dass die Konfigurationen der
installierten Module sich dabei nicht ändern werden.
Außerdem haben Sie hierbei die Möglichkeit den Pfad ($PATH), den Webmin bei
der Ausführung von Programmen und Prozessen benutzt, zu ändern. Zusätzlich
können Sie ebenfalls den Library Search Path ändern.
Abbildung 7.10 Operating System
Language
Falls Sie die Sprache, die Webmin benutzt, ändern wollen, können Sie dies mit der
in dieser Seite zur Verfügung gestellten Option machen (Abbildung 7.11). Wir
werden bei unserer Besprechung Englisch verwenden, da viele Unternehmen international agieren.
Sandini Bib
7.1 Webmin
337
Abbildung 7.11 Language
Index Page Options
Hiermit können Sie die Eigenschaften der Indexseite ändern. Zu diesem Zweck
können Sie folgende Eigenschaften definieren:
Anzahl der Spalten
Module kategorisieren
Defaultkategorie
Alternativen Header benutzen
Direkt zum Modul gehen, falls der User nur eines installiert hat
Einen Screenshot der Seite zeigt Abbildung 7.12.
Upgrade Webmin
Mit dieser Seite, die Sie in Abbildung 7.13 sehen, können Sie Ihr Webmin-System
auf den neuesten Stand bringen. Grundsätzlich bietet diese Seite drei Features,
die wir nun besprechen werden:
1. Webmin aktualisieren
2. Module sofort aktualisieren
3. Module nach einem definierten Zeitplan aktualisieren
Sandini Bib
338
7 Remoteadministration
Abbildung 7.12 Index Page Options
Webmin aktualisieren
Diese Option erlaubt es Ihnen, mit der Upgradefunktion von RPM Ihr WebminSystem auf den neuesten Stand zu bringen. Dabei können Sie zwischen einer lokalen oder heraufgeladenen Datei wählen. Es ist auch möglich, die Aktualisierungsdateien direkt von der offiiziellen Webminseite zu beziehen.
Module sofort aktualisieren
Diese Seite erlaubt es Ihnen, bestimmte Module, die Sicherheitslöcher aufweisen
oder nicht mehr aktuell sind, zu aktualisieren. Da das Update von der offiziellen
Webminseite kommt, wird vor der Aktualisierung überprüft, für welche Module
ein Update verfügbar ist.
Sie können dabei auch angeben, dass Module, die zwar verfügbar sind, aber auf
Ihrem System nicht installiert wurden, ebenfalls in Ihr System eingebunden werden.
Module nach einem definierten Zeitplan aktualisieren
Hiermit können Sie Webmin auffordern, dass es zu einem bestimmten wiederkehrenden Zeitpunkt überprüft, ob für die installierten Module ein Update verfügbar ist. Falls dies der Fall ist, wird dieses installiert. Auch hier haben Sie die
Möglichkeit nicht installierte Module automatisch installieren zu lassen.
Sandini Bib
7.1 Webmin
339
Wenn ein Modul aktualisiert wurde, bekommen Sie dies per E-Mail mitgeteilt
(falls Sie diese Option aktiviert haben).
Abbildung 7.13 Upgrade Webmin
Authentication
Hier können Sie Authentifizierungsoptionen und Timeouts für Passwörter definieren. Sie sollten dieses Feature unbedingt nutzen und einen solchen Timeout
setzen, da Sie sich damit gut vor Brute-Force-Attacken schützen können. Abbildung 7.14 zeigt einen Screenshot.
Timeout
Für die eben beschriebenen Timeouts stehen folgende Optionen zur Verfügung:
Passwort-Timouts deaktivieren
Passwort-Timeouts aktivieren
Rechner, die eine bestimmte Anzahl von Fehllogins verursacht haben, für
eine bestimmte Zeitspanne blockieren.
Geblockte Hosts, Logins und Authentifizierungsfehler loggen (syslog)
Sandini Bib
340
7 Remoteadministration
Authentifizierung
Die Authentifizierungsmechanismen können Sie durch folgende Optionen an
Ihre Bedürfnisse anpassen:
Authentifizierung deaktivieren (absolut nicht empfehlenswert)
Authentifizierung aktivieren
Benutzer abmelden, falls er über einen bestimmten Zeitraum keine Eingaben gemacht hat.
»Kennung speichern« anbieten.
Den Hostnamen auf dem Loginbildschirm zeigen.
Benutzername und Passwort immer fragen.
Anmeldung ohne Passwort für Benutzer des Rechners »localhost«.
Abbildung 7.14 Authentication
Reassign Modules
In dieser Seite (Abbildung 7.15) können Sie alle installierten Systeme nach Kategorien ordnen. Die verfügbaren Kategorien dafür lauten wie folgt:
Sandini Bib
7.1 Webmin
341
Cluster
Hardware
Information
Networking
Others
Servers
Syslets
System
Webmin
Abbildung 7.15 Reassign Modules
Edit Categories
Wie Sie in den vorhergegangenen Beschreibungen gesehen haben, können Sie die
Webmin-Module in bestimmte Kategorien einteilen. Diese Seite (Abbildung 7.16)
bietet Ihnen nun die Möglichkeit diese bereits vordefinierten Kategorien zu editieren oder neue hinzuzufügen.
Sandini Bib
342
7 Remoteadministration
Abbildung 7.16 Edit Categories
Webmin Themes
An dieser Stelle können Sie das Erscheinungsbild (die so genannten Themes) von
Webmin ändern. Dabei haben Sie die Auswahl aus vier vordefinierten Themes:
MSC.Linux Theme
Caldera Theme
KDE-style Icon Theme
Standard Webmin Theme
Falls Ihnen diese vier vorhandenen Erscheinungsbilder noch nicht ausreichen,
können Sie neue Webmin-Themes installieren. Abbildung 7.17 zeigt die entsprechende Seite.
Trusted Referers
Auf dieser Seite (Abbildung 7.18) können Sie Weiterleitungen auf Ihr WebminSystem überprüfen lassen. Damit können Sie bösartige Links anderer Seiten abwehren, die Ihren Browser dazu veranlassen könnten, unkontrollierte Aktionen
mit Webmin durchzuführen.
Weiter können Sie Websites, denen Sie vertrauen (die zum Beispiel von Ihren Systemen kommen), als »vertrauenswürdig« definieren.
Sandini Bib
7.1 Webmin
343
Abbildung 7.17 Webmin-Themes
Abbildung 7.18 Trusted Referers
Sandini Bib
344
7 Remoteadministration
SSL Encryption
Falls auf Ihrem Rechner das SSL-Perl-Modul installiert ist, können Sie SSL-Verschlüsselung für Ihr Webmin-System aktivieren. Sie sollten dieses Feature unbedingt nutzen, wenn Ihr Webmin-System Zugriff aus dem Internet erhalten kann,
da ansonsten die Gefahr besteht, dass Angreifer bestimmte Daten (Kennwörter
etc.) abfangen.
Nachdem Sie SSL aktiviert haben, ist Ihr Server nicht mehr unter der gewohnten
Adresse erreichbar. Die neue Adresse lautet nun:
http://IP-Adresse | Hostname : Portnummer
Abbildung 7.19 SSL Encryption
Certificate Authority
Hier können Sie Ihren Webmin-Server als Zertifizierungsauthorität einrichten. Falls
Sie dies bereits getan haben, können Sie das erstellte Zertifikat bearbeiten oder ein
neues erstellen. Dabei müssen Sie allerdings beachten, dass die Zertifikate, die Sie
bereits an die Benutzer verteilt haben, nicht mehr funktionieren werden.
Wenn Sie ein neues CA (Certificate Authority) erstellen wollen, müssen Sie folgende Angaben machen:
Sandini Bib
7.1 Webmin
345
Autoritätsname
E-Mailadresse
Abteilung
Organisation
Bundesland
Ländercode
Abbildung 7.20 zeigt einen Screenshot des Fensters.
Abbildung 7.20 Certificate Authority
Webmin Servers Index
Falls Sie einen neuen Server registrieren wollen, können Sie das hier tun. Dafür
stehen Ihnen zwei Methoden zur Verfügung:
Broadcast for servers
Wenn Sie sich für diese Option entscheiden, wird Ihr gesamtes lokales Netzwerk
nach Webminservern durchsucht.
Scan for servers
Um nur ein bestimmtes Netzwerk nach Webminservern zu durchsuchen, können
Sie diese Option benutzen.
Einen Screenshot des Fensters zeigt Abbildung 7.21.
Sandini Bib
346
7 Remoteadministration
Abbildung 7.21 Webmin Servers Index
Webmin Users
Diese Seite (Abbildung 7.22) bietet Ihnen folgende Möglichkeiten:
Neue Webmin User zu erstellen
Unix User in Webmin User zu konvertieren
Unix User-Synchronisation zu konfigurieren
Unix User-Authentifizierung zu konfigurieren
Neue Webmin-Gruppen zu erstellen
Modulkonfigurationen (benutzerdefiniert) zu ändern
Neuen Webmin User anlegen
Wie Sie aus Abbildung 7.23 erkennen können, müssen Sie, um einen neuen
Benutzer anlegen zu können, folgende Angaben machen:
Benutzername
Gruppe
Passwort
PAM-Authentifizierung
Unixpasswort
Kein Passwort
Sandini Bib
7.1 Webmin
347
SSL Zertifikatsname
Sprache
Sollen Module in Kategorien aufgeteilt werden?
Benutzerdefiniertes Erscheinungsbild (Theme)
IP-Zugangskontrolle
Zugriff von allen Adressen gestatten
Zugriff nur von aufgelisteten Adressen aus erlaubt
Zugriff von aufgelisteten Adressen nicht erlaubt
Sollen zu den Gruppenmodulen noch weitere benutzerdefinierte hinzugefügt
werden?
Abbildung 7.22 Webmin Users
Neue Webmin-Gruppe anlegen
Wenn Sie eine neue Gruppe anlegen möchten, müssen Sie den Gruppennamen
spezifizieren und die Module für die Gruppe definieren. Danach können Sie Benutzer in diese Gruppe »verfrachten«.
Sandini Bib
348
7 Remoteadministration
Abbildung 7.23 Neuer User
Abbildung 7.24 Neue Gruppe
Sandini Bib
7.1 Webmin
349
Unix User zu Webmin User konvertieren
Diese Seite erlaubt es Ihnen, bestehende Unixbenutzer in Webmin User zu konvertieren. Die Rechte eines Users werden dabei von der gewählten Gruppe bestimmt.
Neben der Gruppenzugehörigkeit müssen Sie noch weitere Angaben machen:
Sollen alle Benutzer konvertiert werden?
Sollen nur bestimmte User konvertiert werden?
Sollen alle User bis auf die angegebenen Ausnahmen konvertiert werden?
Sollen alle Benutzer aus der angegebenen Gruppe konvertiert werden?
Sollen alle User, die zwischen den definierten GIDs liegen, konvertiert werden?
Soll das Unixpasswort verwendet werden?
Abbildung 7.25 zeigt die Seite.
Abbildung 7.25 Unix User konvertieren
Unix User Synchronisation
Falls Sie grundsätzlich jedem Unix User Zugriff auf Webmin geben wollen, kann
es ziemlich mühselig sein, jeden neuen Unix User per Hand als Webmin User zu
definieren. Mit dem in Abbildung 7.26 gezeigten Formular wird es möglich, jeden
neu angelegten Unix User sofort in einen Webmin User zu konvertieren. Dieses
Sandini Bib
350
7 Remoteadministration
Feature kann Ihnen eine Menge Arbeit sparen, sollte aber mit Vorsicht genossen
werden, da eigentlich nicht jeder Unix User sofort Zugriff auf Webmin haben
sollte.
Dieses Formular benötigt folgende Angaben von Ihnen:
Soll jeder neue Unix User sofort in einen Webmin User konvertiert werden?
Wenn ein Unix User gelöscht wird, soll dann auch der entsprechende Webmin
User gelöscht werden?
Welcher Gruppe sollen auf diese Weise entstandene Webmin User zugeteilt
werden?
Abbildung 7.26 User synchronisieren
Modulkonfiguration ändern
Um eine benutzerdefinierte Modulkonfiguration zu ändern, klicken Sie einfach
auf das entsprechende Modul.
User-Authentifizierung
Falls Sie jedem Unix User Zugriff auf Ihr Webmin-System geben wollen und dieser dazu die Rechte eines bestimmten Benutzers bekommen soll, können Sie das
mit dem Formular aus Abbildung 7.27 erreichen.
Sandini Bib
7.1 Webmin
351
Abbildung 7.27 User Authentifizierung
7.1.4
System
Nachdem wir nun den Menüpunkt »Webmin«, der sich mit der Konfiguration Ihres Webminservers auseinander setzt, ausführlich besprochen haben, können wir
uns mit der Konfiguration Ihres Systems beschäftigen.
Die dazu zur Verfügung stehenden Unterpunkte finden Sie unter dem Register
SYSTEM (Abbildung 7.28).
Bootup and Shutdown
Um bestimmte Dienste beim Systemstart hochzufahren, können Sie dieses Formular benutzen (Abbildung 7.29). Die Startseite zeigt an, welche Dienste beim
Start gestartet werden. Sie haben weiter die Möglichkeit das komplette System
neu zu starten oder es einfach herunterzufahren.
Sandini Bib
352
7 Remoteadministration
Abbildung 7.28 Register System
Wenn Sie auf den entsprechenden Link für einen bestimmten Serverdienst klicken,
kommen Sie in ein neues Formular, das Ihnen die folgenden Möglichkeiten bietet:
Name des Dienstes ändern
Skript editieren
Beim Systemstart starten
Sofort starten
Jetzt neu starten
Status anzeigen
Sofort stoppen
Change Passwords
Falls Sie das Unixpasswort eines Benutzers ändern wollen, können Sie dies unter
diesem Menüpunkt machen. Dazu klicken Sie auf den entsprechenden User und
übergeben danach zweimal das neue Passwort (Abbildung 7.30).
Sandini Bib
7.1 Webmin
353
Abbildung 7.29 Bootup and Shutdown
Abbildung 7.30 Change Passwords
Sandini Bib
354
7 Remoteadministration
Disk Quotas
Unter diesem Punkt können Sie Ihr Quotasystem konfigurieren.
Disk and Network Filesystems
Hier bekommen Sie eine Übersicht über die in Ihrem System vorhandenen Platten- und Netzwerkdateisysteme. Sie können ebenfalls neue Dateisysteme mit den
unterschiedlichsten Typen hinzufügen (Abbildung 7.31).
Abbildung 7.31 Disk and Network Filesystems
NFS Exports
Dieser Unterpunkt erlaubt es Ihnen, Ihre NFS-Verzeichnisse zu verwalten oder
neue anzulegen (Abbildung 7.32).
Falls Sie ein neues NFS-Verzeichnis anlegen wollen, haben Sie folgende Angaben
zu machen:
Das zu exportierende Verzeichnis
Soll der NFS-Export aktiv sein oder nicht?
Wer soll auf das Verzeichnis zugreifen dürfen?
Jeder, der sich mit Ihrem System verbinden kann
Nur bestimmte Hosts
Nur Clients, die WeBNFS Protokoll von Sun benutzen
Sandini Bib
7.1 Webmin
355
Alle Mitglieder einer NIS-Netzgruppe
Ein bestimmtes Netzwerk
Sollen symbolische Links relativ gemacht werden?
Soll der NFS Client einen UDP Port unter 1024 benutzen?
Welcher Zugriffsmodus soll aktiviert werden?
Schreibgeschützt
Lese- und Schreibberechtigung
Welchen Remoteusern soll vertraut werden?
Jedem
Jedem außer Root
Niemandem
Soll bestimmten Usern (spezifiziert durch ihre UID) nicht vertraut werden?
Unter welcher UID sollen User, denen Sie nicht vertrauen wollen, in Webmin
laufen?
Zugriff auf Unterverzeichnisse verbieten
Soll bestimmten Gruppen (spezifiziert durch ihre GID) nicht vertraut werden?
Unter welche GID sollen Gruppen, denen Sie nicht vertrauen wollen, in Webmin laufen?
Abbildung 7.32 NFS-Export
Sandini Bib
356
7 Remoteadministration
NIS Client and Server
Unter diesem Menüpunkt finden Sie einige weitere Punkte, unter denen Sie Formulare finden, die Ihnen bei der Konfiguration Ihres NIS-Servers bzw. -Clients
helfen können:
NIS Client
Client Services
NIS Server
NIS Tables
Server Security
PAM-Authentication
Die hier enthaltenen Formulare können genutzt werden, um die vorhandenen
PAM Dienste zu verwalten oder neue hinzuzufügen. Um einen bereits vorhandenen Dienst zu editieren, müssen Sie nur auf den entsprechenden Link klicken
(Abbildung 7.33).
Abbildung 7.33 PAM Authentication
Sandini Bib
7.1 Webmin
357
Running Processes
Dieses Registerblatt enthält Informationen über die gerade laufenden Prozesse
auf Ihrem System. Wenn Sie auf einen der angezeigten Prozesse klicken, erhalten
Sie folgende Informationen:
Befehl
Prozess-ID
Besitzer
Größe
Nicelevel (Sie können das Nicelevel -also die Priorität- an dieser Stelle ändern)
Gruppe
Prozessgruppen-ID
Echte Gruppe
Übergeordneter Prozess
CPU-Beanspruchung
Laufzeit
Echter Benutzer
TTY
Sie haben weiter die Möglichkeit den Prozess zu beenden oder zu killen. Außerdem können Sie einige verfügbare Signale an den Prozess schicken. Einen
Screenshot zeigt Abbildung 7.34.
Abbildung 7.34 Running Processes
Sandini Bib
358
7 Remoteadministration
Prozesse ordnen
Falls Ihnen die vordefinierte Anzeige nicht gefällt, können Sie die laufenden Prozesse auch nach folgenden Kriterien ordnen:
PID (Standard)
Benutzer
Speicher
CPU
Prozesse suchen
Um einen bestimmten Prozess suchen zu lassen folgen Sie dem Link »suchen«.
Danach erscheint ein neues Formular, das folgende Daten benötigt:
Prozesse finden, die einem bestimmten User gehören
Prozesse finden, die einen bestimmten String enthalten (z.B. ftpd)
Prozesse finden, die mehr als einen bestimmten Prozentsatz an Rechenkapazität benötigen
Prozesse finden, die eine Datei oder ein Verzeichnis in einem bestimmten
Dateisystem benutzen
Prozesse finden, die eine bestimmte Datei benutzen
Prozesse finden, die einen bestimmten Port (protokollabhängig) benutzen
Befehl ausführen
Sie können in dieser Maske bestimmte Befehle ausführen, dazu müssen Sie dem
Register »Ausführen« folgen. In der jetzt geöffneten Maske können Sie folgende
Felder ausfüllen:
Auszuführender Befehl
Modus
Soll Befehl im Hintergrund laufen?
Soll bis zur Beendigung gewartet werden?
Parameter, die an das Programm übergeben werden sollen (Wenn der Befehl
vi war, können Sie in diesem Feld die zu öffnende Datei spezifizieren)
Scheduled Commands
Um zeitgesteuerte Befehle zu erstellen, können Sie die Maske aus Abbildung 7.35
benutzen (Falls Sie Befehle regelmäßig ausführen wollen, benutzen Sie bitte
Cronjobs.), welche folgende Angaben von Ihnen benötigt:
User, unter dem der Befehl ausgeführt werden soll
An welchem Tag soll der Befehl ausgeführt werden?
Wann soll der Befehl ausgeführt werden?
In welchem Verzeichnis soll er ausgeführt werden?
Welcher Befehl soll ausgeführt werden?
Sandini Bib
7.1 Webmin
359
Abbildung 7.35 Scheduled Commands
Scheduled CronJobs
Mit dieser Maske können Sie die vorhandenen CronJobs überprüfen, neue erstellen oder den Benutzerzugriff regeln (Abbildung 7.36).
Neuen CronJob erstellen
Um einen neuen Job zu erstellen müssen Sie folgende Angaben machen:
Unter welchem User soll der Job ausgeführt werden?
Soll der Job aktiviert werden?
Auszuführender Befehl?
Parameter für den spezifizierten Befehl?
Wann soll der Befehl ausgeführt werden?
Minuten?
Stunden?
Tage?
Monate?
Wochentage?
Sandini Bib
360
7 Remoteadministration
Abbildung 7.36 Scheduled Cron Jobs
Benutzerzugriff regeln
Mit diesem Formular können Sie angeben, welche Benutzer Cron Jobs erstellen
dürfen.
Software Packages
Sie können dieses Formular benutzen, um nach bereits installierten RPM Paketen
zu suchen, neue zu installieren oder die RPM-Datenbank nach bestimmten Dateien zu durchsuchen (um Dateien zu identifizieren).
SysV Init Configuration
Um die vorhandenen Initprozesse zu verwalten oder neue zu erstellen, können
Sie dieses Formular benutzen. Dabei werden die Einträge aus der Datei /etc/inittab
entnommen (Abbildung 7.38).
Wenn Sie einen neuen Prozess erstellen wollen, müssen Sie folgende Angaben
machen:
ID
Runlevel
Aktion
Prozess
Sandini Bib
7.1 Webmin
361
Abbildung 7.37 Software Packages
Abbildung 7.38 SysV Init
Sandini Bib
362
7 Remoteadministration
System Documentation
Dieses Formular erlaubt es Ihnen, die auf Ihrem System vorhandenen Manpages
zu durchsuchen. Dafür stehen Ihnen folgende Filter zur Verfügung:
Suchbegriff
Nur nach Titel suchen
Nach allem suchen
Suchen in
Manpages
Webmin Hilfe
Paketdokumentation
Howto-Dokumente
Perl-Modul-Dokumentation
Google
Abbildung 7.39 System Documentation
Falls Sie nach Dokumenten in anderen Modulen suchen lassen wollen, können
Sie ebenfalls festlegen, was alles durchsucht werden soll:
Manpages
Webmin Hilfe
Sandini Bib
7.1 Webmin
363
Paketdokumentation
Howto-Dokumente
Perl-Modul-Dokumentation
Google
System Logs
Dieser Menüpunkt erlaubt es Ihnen, die vorhandenen Logdateien zu verwalten
und neue hinzuzufügen.
Users and Groups
Die hier zur Verfügung gestellte Maske erlaubt es Ihnen, die lokalen Benutzer
und Gruppen zu verwalten und neue zu erstellen. Um die Konfiguration eines
bestimmten Benutzers zu editieren, klicken Sie einfach auf den entsprechenden
Benutzernamen (dasselbe gilt auch für lokale Gruppen).
Neuer Benutzer
Wenn Sie einen neuen User erstellen wollen, haben Sie folgende Angaben zu
übergeben:
Benutzername
Echter Name
Shell
UID
Homeverzeichnis
Kennwort
Kein Kennwort
Keine Anmeldung erlaubt
Klartextkennwort
Verschlüsseltes Kennwort
Zeit zwischen dem Ändern des Passworts (Minimum und Maximum)
Tage, nach denen der User eine Warnung erhalten soll
Inaktive Tage
Ablaufdatum
Primäre Gruppe
Sekundäre Gruppe
Soll Homeverzeichnis erstellt werden?
Sollen Dateien ins Homeverzeichnis kopiert werden?
Soll der Benutzer in anderen Modulen erstellt werden?
Sandini Bib
364
7 Remoteadministration
Benutzerverwaltung via Skript
Falls Sie mehrere Benutzer auf einmal editieren (erstellen, verwalten oder löschen) wollen, kann die eben gezeigte Methode sehr zeitaufwändig und fehleranfällig sein. Webmin bietet Ihnen ein Feature an, das es Ihnen erlaubt, diesen Job
von einem Skript erledigen zu lassen. Für dieses Skript stehen drei Schlüsselwörter zur Verfügung (Tabelle 7.2).
Schlüsselwort
Beschreibung
Create
Erstellt einen neuen Benutzer
Modify
Editiert einen bestehenden Benutzer
Delete
Löscht einen bestehenden Benutzer
Tabelle 7.2 Schlüsselwörter für Benutzerverwaltungsskript
Die Syntax für das Schlüsselwort create sieht wie folgt aus:
create:username:passwd:uid:gid:realname:homedir:shell:min:max:warn
:inactive:expire
Tabelle 7.3 erklärt Ihnen die eben vorgestellten Argumente zum Schlüsselwort
create anhand einer kurzen Beschreibung.
Argument
Beschreibung
username
Gibt an, welchen Benutzernamen der neue User haben soll
passwd
An dieser Stelle können Sie das Passwort für den neuen User übergeben
(verschlüsselt oder noch nicht verschlüsselt).
Wenn Sie kein Passwort übergeben, kann sich der User ohne Passwort
einloggen. Falls Sie ein x übergeben, wird das Konto für Logins gesperrt.
uid
Spezifiziert die UID des entstehenden Benutzers
Falls dieses Feld nicht ausgefüllt ist, wird Webmin eine UID zuweisen.
gid
Gibt an, in welcher Gruppe der neue Benutzer Mitglied sein soll
Falls dieses Feld nicht ausgefüllt ist, wird Webmin eine neue Gruppe mit
dem Namen des Benutzers erstellen und den User in diese Gruppe
verfrachten.
realname
Wie lautet sein richtiger Name?
shell
Welche Shell soll ihm beim Login zur Verfügung gestellt werden?
homedir
Hier können Sie das Homeverzeichnis des Benutzers angeben (dieses
Verzeichnis kann bereits existieren, muss aber nicht unbedingt).
min
Minimum der Tage bis zur Passwortänderung
max
Maximum der Tage bis zur Passwortänderung
Tabelle 7.3 Argumente zu create
Sandini Bib
7.1 Webmin
365
Argument
Beschreibung
warn
Wann soll der User gewarnt werden?
inactive
Wann ist das neu erstellte Benutzerkonto inaktiv?
expire
Wann läuft es aus?
Tabelle 7.3 Argumente zu create (Forts.)
Um einen bereits bestehenden Benutzer zu modifizieren, können Sie das Schlüsselwort modify benutzen. Die Syntax hierzu lautet:
modify:oldusername:username:passwd:uid:gid:realname:homedir:shell:
min:max:warn:inactive:expire
Tabelle 7.4 erläutert die im eben aufgeführten Listing vorkommenden Argumente anhand einer kurzen Beschreibung.
Argument
Beschreibung
oldusername
Um welchen User handelt es sich?
username
Welchen neuen Benutzernamen soll der User erhalten?
passwd
Gibt das neue verschlüsselte oder noch nicht verschlüsselte Passwort an
uid
Die neue UID
gid
Soll der User Mitglied in einer anderen Gruppe werden?
realname
Hat sich sein Name geändert (z.B. durch eine Hochzeit)?
homedir
Spezifiziert das neue Homeverzeichnis des Benutzers
shell
Hier können Sie dem User beim Login eine neue Shell zur Verfügung
stellen.
min
Minimum an Tagen bis zur Passwortänderung
max
Maximum an Tagen bis zur Passwortänderung
warn
Nach wie vielen Tagen soll der Benutzer eine Warnung erhalten?
inactive
Wann soll das Benutzerkonto inaktiv sein?
expire
Wann läuft es aus?
Tabelle 7.4 Argumente zu modify
Falls Sie eines der in Tabelle 7.4 erwähnten Felder leer lassen, so wird der bereits
vorhandene Wert weiterhin verwendet.
Um einen User zu löschen, können Sie das Schlüsselwort delete benutzen. Die
Verwendung ist – wie Sie sehen – äußerst einfach:
delete:username
Sandini Bib
366
7 Remoteadministration
Sie brauchen lediglich den zu löschenden Benutzernamen an das Schlüsselwort
zu übergeben. Abbildung 7.40 zeigt den Screenshot des Fensters.
Abbildung 7.40 User and Groups
Nachdem Sie das Skript erstellt haben, müssen Sie noch einige abschließende Angaben machen:
Wo befindet sich das Skript?
Sollen Benutzer in anderen Modulen bearbeitet werden?
Soll das Homeverzeichnis erstellt werden?
Sollen Dateien in das Homeverzeichnis kopiert werden?
Soll der Name des Homeverzeichnisses geändert werden, wenn sich der Benutzername geändert hat?
UID anpassen
GID anpassen
Soll das Homeverzeichnis gelöscht werden, wenn der Benutzer gelöscht worden ist?
Sind die angegebenen Passwörter bereits verschlüsselt?
Sandini Bib
7.1 Webmin
367
Neue Gruppe erstellen
Um eine Gruppe anzulegen haben Sie wesentlich weniger Angaben zu übergeben. Welche genau zu übergeben sind, erfahren Sie im Folgenden:
Gruppenname
Kennwort (Sie können dieses Feld ignorieren, da Kennwörter für Gruppen
nicht mehr aktuell sind)
Gruppen-D
Mitglieder
7.1.5
Server
Das dritte Registerblatt, das wir jetzt besprechen werden, beschäftigt sich mit den
Servern, die auf Ihrem System laufen. Sie erhalten dadurch die Möglichkeit Ihren
Dienst schnell, sauber und einfach zu konfigurieren. Da ein Großteil der Konfiguration grafisch erfolgt, sind Tippfehler als Fehlerquelle nahezu ausgeschlossen.
Die Startseite zeigt Abbildung 7.41.
Sie werden in dieser Besprechen auf viele Tools treffen, die für Sie uninteressant
sind (es werden zum Beispiel mehrere FTP und Mailserver besprochen, auf normalen Systemen hingegen werden Sie nur jeweils einen solchen Dienst finden).
Abbildung 7.41 Servers Startseite
Sandini Bib
368
7 Remoteadministration
Es kann durchaus auch der Fall sein, dass Sie Dienste einsetzen, die per Default
nicht über Webmin konfigurierbar sind. Wenn dies der Fall ist, ist es leider nicht
so ohne weiteres möglich, diese Server über Webmin verfügbar zu machen. Wenn
Sie dies wünschen -und die nötige Zeit mitbringen- können Sie aber die entsprechenden vorhandenen Perlmodule auf Ihre spezielle Software umschreiben. Bedenken Sie dabei aber den enormen Zeitaufwand und machen Sie auf jeden Fall
zuvor eine Aufwand/Nutzen-Rechnung.
Apache Webserver
Wenn Sie Ihren Apache-Server nach der Installation von Webmin installieren und
er noch nicht konfiguriert ist, werden Sie die in Abbildung 7.42 gezeigte Seite erhalten. Dort können Sie die unterstützenden und zu verwendenden Module auswählen und diese konfigurieren.
Danach werden Sie auf die in Abbildung 7.43 gezeigte Seite weitergeleitet, die Sie
ab jetzt immer hinter dem Link »Apache Webserver« finden werden.
Wie Sie sehen stehen Ihnen dort zwei weitere Registerkarten zur Verfügung:
1. Modulkonfiguration
2. Apache starten
Modulkonfiguration
Hier können Sie grundsätzliche Einstellungen für Ihren Webserver treffen. Welche dies genau sind, erfahren Sie in der folgenden Aufzählung:
Apache Server Root-Verzeichnis
Pfad für ausführbare httpd-Datei
Pfad zum apachectl-Kommando
Kommando für Apachestart
Kommando für Apachestopp
Wie sollen virtuelle Server angezeigt werden?
Wie sollen diese sortiert werden?
Wie viele Server dürfen maximal angezeigt werden?
Pfad zur Konfigurationsdatei httpd.conf
Pfad zu srm.conf
Pfad zu access.conf
Pfad zu mime.types
Datei, der virtuelle Server hinzugefügt werden sollen
Soll die Konfigurationsdatei getestet werden, bevor die Werte übernommen
werden?
Sandini Bib
7.1 Webmin
369
Apache starten
Startet logischerweise den Webserver.
Nachdem Sie den Server gestartet haben, ändern sich die gezeigten Registerkarten in:
1. Änderungen zuweisen
2. Apache stoppen
Änderungen zuweisen
Dieser Punkt übergibt dem laufenden Apache Webserver die von Ihnen vorgenommenen Werte.
Nachdem wir uns jetzt die vorhandenen Registerkarten angesehen und besprochen haben, können wir uns mit den Links zu den »großen« Konfigurationsformularen beschäftigen, die man grundsätzlich in zwei Teile unterteilen kann:
1. Globale Konfiguration
2. Virtuelle Server
3. Wir werden uns mit diesen beiden Oberpunkten nun ausführlich beschäftigen.
Abbildung 7.42 Startseite beim erstmaligen Aufruf
Sandini Bib
370
7 Remoteadministration
Abbildung 7.43 Neue Apache Startseite
Globale Konfiguration (Apache)
Nun werden wir uns mit dem ersten Teil der Apache-Konfiguration genauer beschäftigen und zu diesem Zwecke die einzelnen verfügbaren Menüpunkte besprechen.
Processes and Limits
Über das Formular aus Abbildung 7.44 können Sie für folgende Prozesse Grenzwerte konfigurieren bzw. setzen:
Maximum headers in request
Maximum request header size
Maximum request line size
Maximum concurrent requests
Maximum requests per server process
Maximum spare server processes
Minimum spare server processes
Initial server processes
Display extended status information
Sandini Bib
7.1 Webmin
371
Abbildung 7.44 Processes and Limits
Networking and Addresses
Mit dieser Maske (Abbildung 7.45) können Sie Netzwerkeinstellungen für Ihren
Apache spezifizieren. Wie zum Beispiel:
Defaultport, auf dem Ihr Apache läuft und horcht
Auf welchen Adressen und Ports Ihr Webserver verfügbar sein soll
Wie viele Anfragen pro Verbindung erlaubt sind
Länge der Warteschlange
Die TCP »send buffer size«
Request Timeouts
Keep Alive Timeouts
Apache Modules
An dieser Stelle können Sie bestimmte Module aktivieren bzw. deaktivieren (Abbildung 7.46).
Mime-Typen
Hier können Sie allgemeine Angaben zu Ihren MIME-Typen machen, die bereits
vorhandenen editieren oder neue hinzufügen (Abbildung 7.47). Um einen vorhandenen MIME-Typ zu ändern, klicken Sie auf den entsprechenden Typ.
Sandini Bib
372
7 Remoteadministration
Abbildung 7.45 Networking and Addresses
Abbildung 7.46 Apache Modules
Sandini Bib
7.1 Webmin
373
Abbildung 7.47 MIME Typen
Miscellaneous
Wie der Name schon sagt, können Sie an dieser Stelle verschiedene Konfigurationsangaben zu Ihrem Apache-Webserver machen (Abbildung 7.48):
Core dump-Verzeichnis
Server PID-Datei
Angaben zum HTTP Header
Lockdatei
Scoreboarddatei
Servertyp (Standalone oder vom Superserver gestartet)
CGI Programs
Diese Maske (Abbildung 7.49) nimmt bestimmte Angaben CGI-Programme
betreffend entgegen. Dazu gehören:
CGI Skriptlog
Maximale Größe des CGI Skriptlogs
Maximale Datensatzgröße für Skriptlogs
Sandini Bib
374
7 Remoteadministration
Abbildung 7.48 Miscellaneous
Abbildung 7.49 CGI Programs
Sandini Bib
7.1 Webmin
375
Per-Directory Options Files (.htaccess)
Dieses Formular nimmt Werte für die berühmten .htaccess-Dateien, die zumeist
für Passwortabfragen genutzt werden, aber zu weitaus mehr fähig sind, entgegen
(Abbildung 7.50).
Abbildung 7.50 Per-Directory Options Files
Re-Configure Known Modules
Wie aus Abbildung 7.51 hervorgeht, erhalten Sie in dieser Seite Informationen
über die von Webmin unterstützten Apache-Module. Falls Sie dynamische Module verwenden, können Sie diese an dieser Stelle aktivieren.
Diese Seite verfährt ähnlich wie die Startseite, die Sie beim ersten Aufruf der Apachekonfiguration über Webmin erhalten haben.
Edit Defined Parameters
An dieser Stelle können Sie dem Apache-Webserver eine Liste von Parametern,
die beim Start berücksichtigt werden sollen, übergeben. Diese Parameter können
mit den <IfDefine> und </IfDefine> Sektionen in der Konfigurationsdatei benutzt werden (Abbildung 7.52).
Sandini Bib
376
7 Remoteadministration
Abbildung 7.51 Re-Configure Known Modules
Abbildung 7.52 Edit Defined Parameters
Sandini Bib
7.1 Webmin
377
Edit Config Files
Abbildung 7.53 Edit Config Files
Diese Maske (Abbildung 7.53) erlaubt es Ihnen Änderungen, »per Hand« in den
verschiedenen Konfigurationsdateien vorzunehmen.
Virtuelle Server
Der zweite Teil der Apache-Konfigurationsmaske ist für die Konfiguration und
Verwaltung der virtuellen Server in Ihrem System vorgesehen. So können Sie hier
sofort einen neuen virtuellen Server anlegen. Dazu müssen Sie folgende Argumente übergeben:
Auf welcher Adresse bzw. auf welchen Adressen ist der Server erreichbar?
Welcher Port soll benutzt werden?
Wo liegt der Document Root?
Servername?
Wenn Sie das Logo für die »Virtual Server Options« anklicken, gelangen Sie auf
eine neue Seite, die es Ihnen erlaubt, die Standardeinstellungen für Ihre virtuellen
Server zu treffen (Abbildung 7.54).
Sandini Bib
378
7 Remoteadministration
Abbildung 7.54 Virtual Server Options
Processes and Limits
Folgende Grenzwerte und Prozesse können Sie als Standard für Ihre virtuellen
Server spezifizieren:
Maximum request body size
bytes CPU resource limit
Memory resource limit
Process limit
Abbildung 7.55 zeigt einen Screenshot.
Networking and Addresses
Diese Maske (Abbildung 7.56) erlaubt Ihnen folgende Defaultwerte zu setzen:
Soll ein Lookup für Hostnamen gemacht werden?
Soll ein RFC 1413 User Lookup gemacht werden?
E-Mail-Adresse des Serververwalters
Name des Servers
Soll der Name, der vom Browser übergeben wird, benutzt werden?
Sandini Bib
7.1 Webmin
379
Abbildung 7.55 Processes and Limits
Abbildung 7.56 Networking and Addresses
Sandini Bib
380
7 Remoteadministration
Log Files
In dieser Maske (Abbildung 7.57) können Sie die Angaben, die das Logging betreffen, machen. Folgende Argumente können Sie dabei zum Beispiel übergeben:
Wo sollen die Fehler protokolliert werden?
Wo befindet sich das Browserlogfile?
Welches Format soll verwendet werden?
Angaben zum Zugriffslogfile (access log file)
Abbildung 7.57 Log Files
Document Options
Auch an dieser Stelle können Sie Angaben zu den Default-Einstellungen Ihres
Servers machen. Diese Einstellungen beziehen sich hierbei hauptsächlich auf Dateien und Verzeichnisse und die dafür vorgesehenen Verwaltungs- und Sicherheitsmechanismen (Abbildung 7.58).
Ein kleiner Auszug daraus:
Document-Root Verzeichnis
User WWW-Verzeichnis
Zugriffsrechte auf dieses Verzeichnis
Sandini Bib
7.1 Webmin
381
Per-Directory Options Datei (.htaccess)
Optionen für diese Verzeichnisse
Falsch geschriebene URLs korrigieren
Abbildung 7.58 Document Options
MIME-Typen
Diese Maske (Abbildung 7.59) erlaubt die Konfiguration und Verwaltung der
vorhandenen und verfügbaren MIME-Typen für die Standardeinstellungen Ihrer
virtuellen Server.
Sie können an dieser Stelle folgende Angaben machen (ein kleiner Auszug):
Extra MIME Typen
Content Encodings
Content Handlers
Content Sprachen
Extra Zeichensatz
Default MIME Typ
usw.
Sandini Bib
382
7 Remoteadministration
Abbildung 7.59 MIME Types
Error Handling
In dieser Maske (Abbildung 7.60) können Sie die folgenden Werte für die Erzeugung einer Standardfehlermeldung übergeben:
Error-Code
Antwort
URL
Nachricht
User and Groups
Dieses Formular nimmt Werte entgegen, die dem Server angeben unter welchem
User- und Gruppenname er laufen soll (Abbildung 7.61).
Aliase and Redirects
In diesem Formular können Sie die Weiterleitungen und Aliases für Ihre virtuellen Server spezifizieren (Abbildung 7.62). So können Sie hier zum Beispiel folgende Werte übergeben:
Aliase für Verzeichnisse
URL-Weiterleitungen
permanent
zeitlich begrenzt
und so weiter
Sandini Bib
7.1 Webmin
383
Abbildung 7.60 Error Handling
Abbildung 7.61 User and Groups
Sandini Bib
384
7 Remoteadministration
Abbildung 7.62 Aliases and Redirects
CGI Programs
In diesem Formular können Sie die Spezifikationen für das Common Gateway
Interface machen (Abbildung 7.63). Zum Beispiel:
Aliase für CGI-Verzeichnis
Umgebungsvariablen für CGI Skripts
Browserabhängige Variablen
und vieles mehr
Directory Indexing
Angaben zur Verzeichnisindizierung können Sie diesem Formular übergeben
(Abbildung 7.64). Hierbei können Sie einige bekannte Werte spezifizieren:
Verzeichnisindizierungsoptionen
Verzeichnisindexdatei (zumeist index.html)
Verzeichnisindexheader
Verzeichnisindexstandardbild
Wie soll das Verzeichnis sortiert werden?
Verzeichnisindexbeschreibungen
Sandini Bib
7.1 Webmin
385
Abbildung 7.63 CGI Programs
Abbildung 7.64 Directory Indexing
Sandini Bib
386
7 Remoteadministration
Proxying
Die Angaben zum Proxying für Ihren Defaultserver können Sie in dieser Maske
machen (Abbildung 7.65). So werden hier zum Beispiel folgende Daten verlangt:
Soll der Server als Proxy agieren?
Wo liegt das Cacheverzeichnis?
Sollen Anfragen zu bestimmten Domains geblockt werden?
Sollen Anfragen an andere Proxy weitergeleitet werden?
Sollen bestimmte Anfragen nicht weitergeleitet werden?
Auf welchen Ports darf man sich verbinden?
Größe des Cache?
Welche Domains sollen nicht gecached werden?
und noch einiges mehr
Abbildung 7.65 Proxying
Automatic Virtual Hosts
In der Maske aus Abbildung 7.66 können Sie Angaben zum Root und zum CGIBIN-Verzeichnis machen und angeben, ob anstatt des Hostnamens die IPAdresse verwendet werden soll.
Sandini Bib
7.1 Webmin
387
Abbildung 7.66 Automatic Virtual Hosts
Show Directives
An dieser Stelle erfahren Sie alles über die von Ihnen gemachten Direktiven in
den verschiedenen Konfigurationsdateien (Abbildung 7.67).
Per-Directory Options
Im zweiten Abschnitt der »Virtual Server Options« können Sie weitere Angaben
zu den Per-Directory Options machen. Da wir diese aber bereits besprochen haben, werden wir sie an dieser Stelle nicht besprechen.
Bind 4 DNS Server
Falls Sie Ihren Bind 4 DNS Server vor der Installation von Webmin noch nicht benutzt haben, werden Sie die in Abbildung 7.68 gezeigte Seite erhalten, die Sie daran erinnert, dass die Konfigurationsdatei noch nicht existiert. Sie haben dann die
Möglichkeit diese unter verschiedenen Gesichtspunkten erstellen zu lassen. Danach werden Sie auf die in Abbildung 7.69 gezeigte Seite weitergeleitet, wo Sie
folgende Optionen wählen können:
Neue Masterzone erstellen
Neue Slavezone erstellen
Defaultwerte für die Masterzone ändern
Sandini Bib
388
7 Remoteadministration
Abbildung 7.67 Show Directives
Abbildung 7.68 Bind 4 DNS beim erstmaligen Betreten
Sandini Bib
7.1 Webmin
389
Abbildung 7.69 Seite, auf die Sie weitergeleitet werden
Neue Masterzone erstellen
Wenn Sie eine neue Masterzone erstellen wollen, müssen Sie folgende Angaben
für die entstehende Zone machen:
Zonentyp
Domänenname/Netzwerk
Aufzeichnungsdatei
Masterserver
E-Mail-Adresse des Besitzers
Zeit bis zum Refresh
Ablaufzeit
Neue Slavezone erstellen
Hier sind folgende Spezifikationen zu treffen:
Zonentyp
Domänenname / Netzwerk
Aufzeichnungsdatei
Masterserver
Sandini Bib
390
7 Remoteadministration
Defaultwerte für die Masterzone ändern
Im unteren Abschnitt dieser Seite können Sie folgende Defaultwerte ändern:
Zeit bis zum Refresh
Zeit bis zum Ablauf
Zeitspanne bis zu einem neuen Transferversuch
Default ttl (time to live)
Bind 8 DNS Server
Wenn Sie die Seite zur Konfiguration des Bind 8 DNS Servers öffnen, erhalten Sie
eine Seite, die in zwei Teile aufgeteilt ist (Abbildung 7.70):
1. Globale Servereinstellungen
2. Existierende DNS-Zonen
Abbildung 7.70 Bind 8 DNS Server
Other DNS Servers
Dies ist der erste Punkt der globalen Serveroptionen und erlaubt Ihnen die Konfiguration weiterer DNS Server (Abbildung 7.71).
Sandini Bib
7.1 Webmin
391
Abbildung 7.71 Other DNS Servers
Logging and Errors
1. Unter diesem Menüpunkt können Sie alle vorhandenen Protokollierungskanäle einsehen und neue hinzufügen. Des Weiteren können Sie hier die Protokollierungskategorien verwalten (Abbildung 7.72).
2. Um einen neuen Protokollierungskanal hinzuzufügen müssen Sie folgende
Angaben machen:
Name des Kanals
Protokolldatei
Maximale Größe
Syslog Level
Minimale Meldestufe
Soll die Kategorie in der Protokolldatei vermerkt werden?
Sollen das Datum und die Uhrzeit in der Protokolldatei aufgeführt werden?
usw.
Sandini Bib
392
7 Remoteadministration
Abbildung 7.72 Logging and Errors
Access Control Lists
Diese Maske (Abbildung 7.73) ist für die Einrichtung der so genannten Zugriffskontrollen zuständig. Um eine neue Zugriffskontrolle zu spezifizieren müssen Sie
folgende Daten an das Formular übergeben:
ACL-Name
zutreffende Adressen, Netzwerke und Zugriffskontrollen
Files and Directories
Diesem Formular können Sie die globalen Datei- und Verzeichniseinstellungen
übergeben (Abbildung 7.74). Die vier folgenden Felder können Sie dabei vom
Standard abweichend definieren:
Ausgabedatei für Statistiken
Datenbanksicherungsdatei
Prozess-ID-Datei
Pfad zum Zonentransferprogramm
Sandini Bib
7.1 Webmin
393
Abbildung 7.73 Access Control Lists
Abbildung 7.74 Files and Directories
Sandini Bib
394
7 Remoteadministration
Forwarding and Transfers
Um die globalen Weiterleitungs- und Transfereinstellungen zu definieren müssen Sie dieses Formular benutzen. So können Sie hier zum Beispiel folgende Parameter setzen:
Server, an die Anfragen weitergeleitet werden sollen
Direkter Lookup, wenn keine Antwort von der Weiterleitung erhalten wird
Maximale Zonentransferzeit
Zonentransferformat
Maximale Anzahl gleichzeitiger Zonentransfers
Einen Screenshot zeigt Abbildung 7.75.
Abbildung 7.75 Forwarding and Transfers
Addresses and Topology
Hier können Sie die folgenden globalen Adressen- und Topologieeinstellungen
vornehmen (Abbildung 7.76):
Abzuhörende Anschlüsse und Adressen
Quell-IP für Anfragen
Quellanschluss für Anfragen
Nameserver Wahltopologie
Sandini Bib
7.1 Webmin
395
Abbildung 7.76 Addresses and Topology
Miscellaneous Options
Wie Sie aus der folgenden Auflistung und Abbildung 7.77 erkennen können, können Sie in dieser Maske weitere verschiedenartige Optionen setzen:
Maximale Core-Dump-Größe
Maximale Datenspeicherbenutzung
Maximale Anzahl geöffneter Dateien
Maximale Benutzung des Stapelspeichers
Intervall zwischen Löschen abgelaufener Datensätze
Intervall zwischen dem Überprüfen auf neue Schnittstellen
Intervall zwischen der Protokollierung der Statistik
Vollen rekursiven Lookup für die Clients ausführen?
Mehrfache CNAME-Aliase für einen Namen erlauben?
Glue-Datensätze holen?
Maßgebliches AA-Bit bei Antworten einstellen?
Sandini Bib
396
7 Remoteadministration
Abbildung 7.77 Miscellaneous Options
Control Interface Options
Wie aus Abbildung 7.78 hervorgeht, können Sie in diesem Formular die so
genannten »Control Interface«-Optionen setzen.
Zone Defaults
Dieses Formular ist in zwei Teile aufgeteilt:
1. Defaults für neue Masterzonen
2. Standardzoneneinstellungen
3. Im Bereich für neue Masterzonen können Sie folgende Werte setzen:
Zeit aktualisieren
Wiederholungszeit transferieren
Ablaufzeit
Standard-Time-To-Live
Vorlagendatensätze
Default-E-Mail-Adresse
Sandini Bib
7.1 Webmin
397
Abbildung 7.78 Control Interface Options
Folgende Felder können Sie im Bereich »Standardzoneneinstellungen« setzen:
Erlaube Transfers von..
Erlaube Anfragen von..
Überprüfe Namen in Master-Zonen?
Überprüfe Namen in Slave-Zonen?
Überprüfe Namen in Antworten?
Slaves über Änderungen benachrichtigen?
Einen Screenshot zeigt Abbildung 7.79.
Nun ist es an der Zeit, den zweiten Teil der Konfigurationsseite für den Bind DNS
Server zu besprechen, der es Ihnen erlaubt, die bereits existierenden Zonen zu
verwalten und neue Zonen anzulegen.
Bereits existierende Zone verwalten
Um eine existierende Zone zu editieren klicken Sie einfach auf das entsprechende
Symbol und nehmen Sie in der darauf erscheinenden Seite die zu treffenden Änderungen vor.
Sandini Bib
398
7 Remoteadministration
Abbildung 7.79 Zone Defaults
Dabei können Sie je nach Masterzonen folgende Werte abändern:
Reverse-Adresse
Nameserver
Namensaliase
Datensatzdatei
Zonenparameter
Zoneneinstellungen
Mailserver
Hostinformationen
Text
Bekannte Dienste
Verantwortliche Person
Location
Sandini Bib
7.1 Webmin
399
Neue Masterzone anlegen
Wenn Sie eine neue Masterzone anlegen wollen, klicken Sie auf den entsprechenden Link am unteren Ende der Seite und übergeben Sie dem dann aufgerufenen
Formular folgende Werte:
Zonentyp
Domänenname/Netzwerk
Datensatzdatei
Master-Server
E-Mail-Adresse
Zonenvorlage benutzen?
IP-Adresse für Vorlagendatensätze
Zeit aktualisieren
Wiederholungszeit transferieren
Ablaufzeit
Standard-Time-To-Live
Neue Slavezone anlegen
Nachdem Sie dem entsprechenden Link für die Erstellung einer neuen Slavezone
gefolgt sind, müssen Sie die nun aufgelisteten Felder ausfüllen:
Zonentyp
Domänenname/Netzwerk
Datensatzdatei
Master-Server
Serverport
Neue Subzone anlegen
Auch hier haben Sie vor der Erstellung der Zone noch einige Angaben zu treffen:
Zonentyp
Domänenname/Netzwerk
Datensatzdatei
Master-Server
Serverport
Neue Weiterleitungszone anlegen
Hier haben Sie folgende Werte zu übergeben:
Zonentyp
Domänenname/Netzwerk
Master-Server
Sandini Bib
400
7 Remoteadministration
DHCP Server
Abbildung 7.80 DHCP Server
Unter diesem Menüpunkt können Sie die Subnets und freigegebene Netzwerke
konfigurieren und die Hosts und Hostgruppen verwalten (Abbildung 7.80).
Des Weiteren stehen Ihnen folgende Features zur Verfügung:
Clienteinstellungen bearbeiten
Server starten
Aktive Vergaben auflisten
Neues Subnet hinzufügen
Um ein neues Subnet hinzuzufügen müssen Sie dem entsprechenden Link folgen
und diese Daten übergeben:
Netzwerkadresse
Netzmaske
Adressbereiche
Dynamisches BOOTP?
Freigegebenes Netzwerk
Sandini Bib
7.1 Webmin
401
Standardvergabezeit
Boot-Dateiname
Maximale Vergabezeit
Boot-Datei-Server
Server-Name
Vergabelänge für BOOTP-Clients
Vergabeende für BOOTP-Clients
Hosts directly in this subnet
Groups directly in this subnet
Neues freigegebenes Netzwerk hinzufügen
Wenn Sie ein neues freigegebenes Netzwerk hinzufügen wollen, braucht die
dafür aufzurufende Maske folgende Angaben von Ihnen:
Netzwerkname
Standardvergabezeit
Boot-Dateiname
Maximale Vergabezeit
Boot-Datei-Server
Server-Name
Vergabelänge für BOOTP-Clients
Vergabeende für BOOTP-Clients
Hosts directly in this shared network
Groups directly in this shared network
Subnets in this shared network
Einen neuen Host hinzufügen
Dafür müssen Sie folgende Felder ausfüllen:
Host-Name
Hardware Address
Feste IP-Adresse
Standardvergabezeit
Boot-Dateiname
Maximale Vergabezeit
Boot-Datei-Server
Server-Name
Vergabelänge für BOOTP-Clients
Vergabeende für BOOTP-Clients
Sandini Bib
402
7 Remoteadministration
Neue Hostgruppe hinzufügen
Die Spezifizierung der Hostgruppendetails erfolgt über die aufgelisteten Parameter:
Hosts in dieser Gruppe
Benutze Name als Client-Host-Name?
Standardvergabezeit
Boot-Dateiname
Maximale Vergabezeit
Boot-Datei-Server
Server-Name
Vergabelänge für BOOTP-Clients
Vergabeende für BOOTP-Clients
Client-Einstellungen bearbeiten
Unter diesem Menüpunkt finden Sie eine Maske, die es Ihnen erlaubt, die DHCP
Client-Einstellungen zu ändern und diese auf alle Subnetze, alle freigegebenen
Netzwerke, Hosts und Hostgruppen anzuwenden.
Dafür sind folgende Angaben an das dafür zuständige Formular zu übergeben:
Client-Host-Name
Standard-Router
Subnet-Maske
Broadcast-Adresse
Domänenname
DNS-Server
Zeit-Server
Protokoll-Server
Swap-Server
Stammverzeichnispfad
NIS-Domäne
NIS-Server
Font-Server
XDM-Server
Statische Routen
NTP-Server
NetBIOS-Nameserver
NetBIOS-Scope
Sandini Bib
7.1 Webmin
403
NetBIOS-Verbindungstyp
Benutze Name als Client-Host-Name?
Standardvergabezeit
Boot-Dateiname
Maximale Vergabezeit
Boot-Datei-Server
Server-Name
Vergabelänge für BOOTP-Clients
Vergabeende für BOOTP-Clients
Aktive Vergaben auflisten
Wenn Sie den Button »Liste aktive Verbindungen auf« drücken, werden alle Vergaben aus der Datei /var/lib/dhcp/dhcpd.leases aufgelistet.
Server starten
Sie können diesen Button benutzen, um den Server zu starten.
Fetchmail Mail Retrieval
Abbildung 7.81 Anfängliche Fetchmailseite
Sandini Bib
404
7 Remoteadministration
Falls Sie Fetchmail vor Ihrer Webmininstallation noch nicht genutzt haben (bzw.
falls es von keinem User auf Ihrem Server genutzt wurde), erhalten Sie die in Abbildung 7.81 gezeigte Seite, die es Ihnen erlaubt, für einen bestimmten Benutzer
die Datei .fetchmailrc anzulegen.
Nachdem Sie den User, für den die Datei angelegt werden soll, spezifiziert haben, müssen Sie noch die folgenden Angaben übergeben:
Mailserver-Optionen
Mailservername
Abholung aktiviert?
Identisch mit Mailserver Name
Protokoll
Mailserver Port
Mailserver Benutzerdetails
Benutzername auf Mailserver
Passwort auf Mailserver
Lokaler Benutzer
Nachrichten auf dem Server belassen?
Alle Nachrichten abholen?
Befehl, der vor dem Verbindungsaufbau ausgeführt werden soll
Befehl, der nach dem Verbindungsaufbau ausgeführt werden soll
Wenn Sie die von Ihnen übergebenen Angaben durch Drücken des Buttons
»Erstellen« bestätigen, wird die Datei für den angegebenen Benutzer erstellt.
Internet Services and Protocol
Diese Maske ist in zwei Teile aufgeteilt:
1. Internetdienste
2. RPC-Programme
Internetdienste
Im ersten Teil der Seite können Sie die vorhandenen Internetdienste konfigurieren oder neue hinzufügen (Abbildung 7.82). Da die dabei zu treffenden Angaben
für beide Features gleich sind, werden wir uns auf die Besprechung über das Hinzufügen neuer Internetdienste beschränken.
Um neue Dienste hinzuzufügen sind folgende Angaben zu übergeben:
Servicename
Portnummer
Protokolle
Aliase
Sandini Bib
7.1 Webmin
405
Serverprogramm
Wartemodus
Maximum pro Minute
Unter welchen Usernamen soll das Programm ausgeführt werden?
Unter welcher Gruppe soll das Programm ausgeführt werden?
Abbildung 7.82 Internet Services and Protocols
RPC-Programme
Für die Erstellung eines neuen RPC-Programms müssen folgende Parameter
übergeben werden:
Programmname
Programmnummer
Aliase
Serverprogramm
RPC-Versionen
Sockettyp
Protokolle
Serverprogramm
Sandini Bib
406
7 Remoteadministration
Kommando
Wartemodus
Ausführen als User
Max pro Minute
Ausführen als Gruppe
Jabber IM Server
Hier können Sie Ihre Jabber IM Server über Webmin konfigurieren. Leider unterstützt die von uns hier verwendete Version von Webmin den neuen Jabber Server
nicht, so dass wir ihn an dieser Stelle leider nicht besprechen können. Wir werden
dies aber auf der Buchseite nachholen.
MySQL Database Server
An dieser Stelle können Sie den MySQL Datenbankserver konfigurieren. Die Erfahrung hat aber gezeigt, dass es durchaus des Öfteren von Nöten ist, die MySQL
Modulkonfiguration zu ändern, deshalb werden wir dies nun besprechen.
Dafür haben Sie folgende Angaben zu übergeben:
Pfad zum mysqlshow-Befehl
Pfad zum mysqladmin-Befehl
Pfad zum mysql-Befehl
Pfad zum mysqldump-Befehl
Pfad zum mysqlimport-Befehl
Befehl zum Start des MySQL Servers
Befehl um den Server zu stoppen
Pfad zu den »mysql shared libraries«-Verzeichnissen
Administration login
Administration password
Anzahl der Reihen, die auf einer Seite angezeigt werden sollen
Wie sollen die Datenbanken und Tabellen dargestellt werden?
Soll das »vertical row editing« Interface benutzt werden?
Zu welchem Host soll verbunden werden?
Socketdatei
Soll zur Verbindung DBI genutzt werden?
PPP Accounts
Hinzufügen eines PPP-Kontos, wenn ein Unix-Benutzer für den nebenstehenden Server hinzugefügt wird:
Ändern des PPP-Kontos, wenn ein Unix-Benutzer geändert wird
Löschen des PPP-Kontos, wenn ein Unix-Benutzer gelöscht wird
Sandini Bib
7.1 Webmin
407
Hier können Sie angeben, dass die Änderungen, die Sie an den Benutzerkonten der
Linuxuser vorgenommen haben, direkt auf Ihr PPP-System übernommen werden.
Postfix Configuration
Hier können Sie die nötigen Einstellungen für Ihren Postfixserver treffen.
General Options
Unter dieser Maske (Abbildung 7.83) können Sie die nötigen allgemeinen Einstellungen für Ihren Server treffen. Dabei sei aber vorab gleich einmal darauf hingewiesen, dass Sie lange nicht alle Konfigurationsparameter über die Oberfläche
von Webmin treffen können. Die wichtigsten und am häufigsten genutzten Parameter können Sie aber bequem über das Netz konfigurieren.
Im Folgenden sehen Sie einige der Parameter, die Sie online setzen können:
Domäne für ausgehende Mails
Domänen für E-Mail-Empfang
Probleme, die an den Postmaster gemeldet werden
Soll bei der Auslieferung von Mails ein Host zwischengeschaltet werden?
Sollen Kopien der Nachrichten an eine bestimmte Adresse geschickt werden?
Timeout beim Bearbeiten von Anfragen
und so weiter
Abbildung 7.83 General Options
Sandini Bib
408
7 Remoteadministration
Address Rewriting and Masquerading
Um die Adressumschreibung und Maskierung zu definieren können Sie die
Maske aus Abbildung 7.84 verwenden.
Somit lassen sich zum Beispiel folgende Angaben treffen:
Soll »Benutzer%Domäne« in »Benutzer@Domäne« umgeschrieben werden?
Soll »Benutzer« in »Benutzer@$MeineDomäne« geändert werden?
Soll »Benutzer@Host« durch »Benutzer@Host.$MeineDomäne« ersetzt werden?
Soll statt »Site!Benutzer« »Benutze@Site« verwendet werden?
Sollen Mails ohne Empfänger an den Mailer Daemon geschickt werden?
Adressmaskierung
Maskierungsausnahmen
Abbildung 7.84 Address Rewriting and Masquerading
Mail Aliases
Wenn Sie Ihre vorhandenen Mail Aliase bearbeiten oder neue hinzufügen wollen,
können Sie dies mit dieser Maske erledigen (Abbildung 7.85).
Diese Seite ist in zwei Teile unterteilt. Im oberen Teil sehen Sie die allgemeinen
Einstellungen zu den Aliasen und im unteren die vorhandenen und bereits eingerichteten Mail Aliase, die Sie mit einem einfachen Klick konfigurieren können.
Sandini Bib
7.1 Webmin
409
Abbildung 7.85 Mail Aliases
Canonical Mapping
In dieser Maske (Abbildung 7.86) können Sie folgende Punkte bearbeiten:
Adressenverknüpfungstabellen
Tabellen für Empfängeradressen
Tabellen für Senderadressen
Virtual Domains
Hier können Sie die vorhandenen Verknüpfungen für virtuelle Domains einsehen, bearbeiten und neue hinzufügen (Abbildung 7.87).
Transport Mapping
Ähnlich zu den eben kennen gelernten virtuellen Domains können Sie hier die
Verknüpfungstabellen für den Transport definieren (Abbildung 7.88).
Relocated Mapping
Falls sich Adressen bestimmter Hosts oder Personen etc. geändert haben, können
Sie dies in dieser Maske mit den so genannten Lookup-Tabellen spezifizieren
(Abbildung 7.89).
Dabei ist es auch hier möglich, neue Tabellen anzulegen oder die vorhandene zu
editieren. Normalerweise sollte dieses Feature deaktiviert bleiben.
Sandini Bib
410
7 Remoteadministration
Abbildung 7.86 Canonical Mapping
Abbildung 7.87 Virtual Domains
Sandini Bib
7.1 Webmin
411
Abbildung 7.88 Transport Mapping
Abbildung 7.89 Relocated Mapping
Sandini Bib
412
7 Remoteadministration
Local Delivery
Nachdem wir nun einige Formulare kennen gelernt haben, deren Bearbeitung
eher simpel ist, können wir uns nun mit einer Maske beschäftigen, die etwas komplexer und umfangreicher ist.
Abbildung 7.90 Local Delivery
Wie Sie in Abbildung 7.90 sehen können, enthält dieses Formular die für die lokale Auslieferung von E-Mails nötigen Informationen. Um einen besseren Eindruck der zu treffenden Informationen zu bekommen, können Sie einen Blick in
die folgende Aufzählung werfen:
Name des Transports für lokale Lieferungen
Shell, die bei Lieferung zu externem Befehl benutzt wird (keine direkte Ausführung von Befehlen)
Suchliste zur Weiterleitung
Auslieferung gültiger E-Mail an externe Befehle
Gültige Mail in externe Datei schreiben
Standardrechte des Auslieferungsagenten
Pfadname der Mailbox-Datei relativ zum Home-Verzeichnis
Zieladresse für unbekannte Empfänger
Sandini Bib
7.1 Webmin
413
Verzeichnis für E-Mails in Warteschlange
Externer Befehl, der anstelle Lieferung an Mailbox benutzt wird
Optionaler tatsächlich zu benutzender Transport
Optionaler Transport für unbekannte Empfänger
Maximale Anzahl simultaner Auslieferungen an denselben lokalen Empfänger
Maximale Anzahl von Empfängern je ausgelieferter lokaler Mail
General Resource Control
Hier können Sie Einstellungen zur allgemeinen Ressourcenkontrolle treffen.
Einige der zu treffenden Einstellungen können Sie im folgenden Listing sehen.
Die Maske zeigt Abbildung 7.91.
Abbildung 7.91 General Resource Control
Maximale Größe zurückgesandter Nachrichten
Maximale Zeit bei Auslieferung an externe Programme
Maximale Anzahl von untergeordneten Postfix-Prozessen
Maximale Anzahl von Adressen, die der Duplikatfilter behält
Maximale Anzahl Versuche, um Dateisperrung zu erhalten
Sandini Bib
414
7 Remoteadministration
Zeit in Sekunden zwischen Dateisperrungsversuchen
Maximale Anzahl der Versuche, um einen Prozess zu erzeugen
Maximale Zeit zwischen den Versuchen
Maximal benutzter Speicher zur Bearbeitung von Headers
Maximal benutzter Speicher zur Bearbeitung von Eingabezeilen
Maximale Größe einer Nachricht
Maximale Anzahl von Nachrichten in der aktiven Warteschlange
Maximale Anzahl von Empfängern im Speicher
Minimaler freier Speicher im Dateisystem der Warteschlange
Maximale Zeit, nach der eine alte Sperrung freigegeben wird
Zeit in Sekunden zwischen Versuchen, einen defekten MDT zu erreichen
SMTP Server Options
Sie können diesem Formular (Abbildung 7.92) folgende Parameter übergeben:
SMTP-Grußbanner
Maximale Anzahl der Empfänger für die Auslieferung
Deaktiviere Befehl SMTP VRFY
Timeout in Sekunden für SMTP-Transaktionen
Timeout bis Senden von 4xx/5xx-Fehlerantwort
Fehlerzahl, ab der ein Client vorübergehend ignoriert wird
Fehlerzahl, nach der eine Verbindung getrennt wird
Wird HELO benötigt?
Erlaube nicht vertrauenswürdigen Benutzern das Routing
Schränke Befehl ETRN ein auf ...
Einschränkungen der Client-Host-Namen/-Adressen
Einschränkungen beim Senden des Befehls HELO
Einschränkungen der Absenderadressen
Einschränkungen der Empfängeradressen
DNS-Domänen, die auf einer schwarzen Liste nachgeschlagen werden
Schränke Mail-Weiterleitung ein
SMTP-Server-Antwort bei Zugangsverletzung
SMTP-Server-Antwort bei Ablehnen eines ungültigen Host-Namen
SMTP-Server-Antwort bei RBL-Domänenverletzung
SMTP-Server-Antwort bei Ablehnen eines Clients
SMTP-Server-Antwort bei verbotenem Weiterleiten
SMTP-Server-Antwort bei Ablehnen einer unbekannten Domäne
Sandini Bib
7.1 Webmin
415
SMTP-Server-Antwort bei Ablehnen eines unbekannten Clients
SMTP-Server-Antwort bei Ablehnen wegen unbekanntem Host-Namen
Abbildung 7.92 SMTP Server Options
SMTP Client Options
Das Gegenstück zu den gerade gezeigten SMTP Server Options bilden die SMTP
Client Options, wo Sie folgende Optionen setzen können (Abbildung 7.93):
SMTP-Server-Einstellungen
Aktion, wenn aufgelistet als bester MX-Host
Hosts/Domänen, an die Mail gegeben wird, falls Ziel ungültig
Ignoriere MX-Lookup-Fehler
Überspringe 4xx-Gruß
Überspringe Warten auf Befehl QUIT
Maximale Anzahl simultaner Auslieferungen an das gleiche Ziel
Maximale Anzahl von Empfängern je Auslieferung
Timeout um TCP-Verbindungen zu beenden
Timeout beim Warten auf den Grußbanner
Sandini Bib
416
7 Remoteadministration
Timeout beim Warten auf Antwort auf MAIL FROM
Timeout beim Warten auf Antwort auf RCPT TO
Timeout beim Warten auf Antwort auf DATA
Timeout für Antwort beim Senden des Nachrichteninhalts
Timeout beim Warten auf Antwort auf beendenden "."
Timeout beim Warten auf Antwort auf QUIT
Abbildung 7.93 STMP Client Options
Delivery Rates
In dieser Maske (Abbildung 7.94) können Sie die zu treffenden Auslieferungsraten dazu setzen (siehe Aufzählung).
Maximale Anzahl simultaner Auslieferungen an das gleiche Ziel
Maximale Anzahl von Empfängern je Nachrichtenauslieferung
Anfänglicher Übereinstimmungs-Level beim Liefern an gleiches Ziel
Maximale Zeit (Tage), die eine Nachricht in der Warteschlange verbleibt,
bevor sie nicht zustellbar ist
Minimale Zeit (Sek) zwischen Versuchen, eine aufgeschobene Nachricht zu
versenden
Sandini Bib
7.1 Webmin
417
Maximale Zeit (Sek.) zwischen Versuchen, eine aufgeschobene Nachricht zu
versenden
Zeit (Sek) zwischen dem Scannen der Warteschlange für aufgeschobene Nachrichten
Transporte, die nicht ausgeliefert werden sollen
Abbildung 7.94 Delivery Rates
Debugging Features
Diese für die Fehlersuche enorm wichtigen Funktionen können Sie unter der in
Abbildung 7.95 gezeigten Maske vornehmen.
Liste von Domänen-/Netzwerkmustern, für die ausführliche Protokollierung
aktiviert ist
Ausführliche Protokollierung für Übereinstimmung mit oben angegebener
Liste
Sandini Bib
418
7 Remoteadministration
Abbildung 7.95 Debugging Features
ProFTPD Server
Diese Maske ermöglicht die Konfiguration des ProFTPD-Servers und ist in 2 Teile
unterteilt, die wir jeweils getrennt voneinander besprechen werden:
1. Globale Konfiguration
2. Virtuelle Server
Globale Konfiguration (ProFTPD)
Hier können Sie die globalen Einstellungen Ihren ProFTPD-Server betreffend
spezifizieren.
Networking Options
In dieser Maske (Abbildung 7.96) können Sie die für Sie notwendigen Netzwerkoptionen setzen. Die folgende Aufzählung zeigt Ihnen einen Ausschnitt aus den
verfügbaren Feldern dieser Maske:
Anzahl der zur gleichen Zeit laufenden Sitzungen
Sollen RFC 2228 Antworten geschickt werden?
Leerlaufzeit, bevor die Verbindung beendet wird
Zeit, die vor dem ersten Transfer gewartet werden soll
Sandini Bib
7.1 Webmin
419
Servertyp
Zeit bis zur Authentifizierung
Transfermodus (ASCII oder binär)
Maximale Länge des FTP-Befehls
Soll der Willkommensgruß erst nach dem Login gezeigt werden?
Anzahl der zur gleichen Zeit stattfindenden Logins
und vieles mehr
Abbildung 7.96 Networking Options
Logging Options
Dieses Formular (Abbildung 7.97) nimmt Einstellungen für Ihr Logging entgegen. So werden Sie hier zum Beispiel nach folgenden Parametern gefragt:
System Log Facility
Format
Errorlogdatei
System Log Level
Sandini Bib
420
7 Remoteadministration
Abbildung 7.97 Logging Options
Files and Directories
Um Einstellungen Dateien und Verzeichnisse betreffend zu übergeben, müssen
Sie die Maske aus Abbildung 7.98 aufrufen. Dort haben Sie die Möglichkeit unter
anderem folgende Optionen zu definieren:
Loginverzeichnis
Chroot-Verzeichnisse
Sollen abgebrochene Uploads gelöscht werden?
Sollen Uploads versteckt werden?
Sollen symbolische Links gezeigt werden?
Sollen Dateien, die mit einem Punkt beginnen, gezeigt werden?
Zusätzliche ls-Optionen
Sollen die Rechtsverhältnisse in einem Verzeichnis gefaked werden?
Sandini Bib
7.1 Webmin
421
Abbildung 7.98 Files and Directories
Access Control
Um die Zugriffskontrollen für Ihren ProFTPD-Server zu definieren müssen Sie in
diesem Formular (Abbildung 7.99) unter anderem die folgenden Werte spezifizieren:
Wenn der Login nicht erlaubt ist, soll trotzdem nach einem Passwort gefragt
werden
Nachricht, die nach einem erfolgreichen Login erscheint
Dürfen Dateien überschrieben werden?
Ist der »chmod«-Befehl erlaubt?
Nachricht, die nach einem nicht erfolgreichem Login erscheint
Erlaubte FTP-Befehle
Nicht erlaubte FTP-Befehle
Sandini Bib
422
7 Remoteadministration
Abbildung 7.99 Access Control
Miscellaneous
Hier können Sie verschiedene Werte für Ihr LDAP-Verzeichnis, die maximale
CPU-Auslastung etc. definieren (Abbildung 7.100). Die folgende Auflistung gibt
Ihnen einen kleinen Vorgeschmack auf die zu treffenden Parameter:
PID-Datei
CPU-Auslastungslimit
Speicher-Auslastungslimit
Maximum von geöffneten Dateien
Zeitangabe
LDAP-Informationen
und vieles mehr
Sandini Bib
7.1 Webmin
423
Abbildung 7.100 Miscellaneous
Authentication
Falls Sie die Standard-Authentifizierungsparameter ändern wollen, müssen Sie
diese Seite aufrufen (Abbildung 7.101). Hier können Sie unter anderem folgende
Werte setzen:
Darf sich der Superuser einloggen?
Gruppen, deren Mitglieder als »anonymous« behandelt werden sollen
Datei, in der die Nachricht, die vor dem Login gezeigt werden soll, steht
Datei, in der die Nachricht, die gezeigt werden soll, wenn zu viele Verbindungen bestehen, steht
Nachricht, die nach dem Login gezeigt werden soll
Logoutnachricht
Gruppenpasswörter
Maximum der missglückten Loginversuche pro Sitzung
Soll nur denjenigen Usern der Login erlaubt werden, die eine gültige Shell besitzen
Soll Usern, die in der Datei /etc/fptusers stehen, der Zugriff verweigert werden?
Sandini Bib
424
7 Remoteadministration
Soll PAM für die Authentifizierung genutzt werden?
Alternative Unixgruppendatei
Alternative Unixpasswortdatei
Abbildung 7.101 Authentication
Per-Directory Options File
Sie können diese Maske (Abbildung 7.102) benutzen um eine .ftpaccess-Datei zu
erzeugen, welche weitere Parameter für das betreffende Verzeichnis spezifiziert.
Beachten Sie dabei, dass alle Restriktionen, die Sie mit dieser Datei definieren,
auch auf alle Unterverzeichnisse übergreifen.
Denied FTP Users
Wie Sie sich vielleicht noch erinnern können, hatten Sie unter dem Menüpunkt
Authentication die Möglichkeit zu spezifizieren, ob Usern in der Datei /etc/ftpusers der Login verwehrt wird.
Unter dieser Maske haben Sie nun die Möglichkeit Einträge in dieser Datei vorzunehmen und somit bestimmten Benutzern den Zugriff auf Ihr System zu verwehren (falls Sie die entsprechenden Parameter in der Authentication-Maske richtig
gesetzt haben).
Sandini Bib
7.1 Webmin
425
Abbildung 7.102 Per-Directory Options File
Dabei brauchen Sie eigentlich auf nichts Besonderes zu achten, löschen Sie einfach
die Kommentarzeilen aus der Datei (optional) und fügen Sie die vorgesehenen Benutzer ohne weitere Parameter ein. Sie sollten Benutzern wie den Superusern etc.
den Zugriff auf Ihr System definitiv verwehren. Die Maske zeigt Abbildung 7.103.
Virtuelle Server (ProFTPD)
Im zweiten Teil der Startseite haben Sie die Möglichkeit Einstellungen zu den vorhandenen virtuellen Servern zu treffen oder einfach einen neuen virtuellen Server
hinzuzufügen.
Um einen neuen Server hinzuzufügen haben Sie folgende Angaben zu machen:
Adresse
FTP Port
Servername
Nachdem Sie den Link zu den Einstellungen für Ihren virtuellen Defaultserver
gefolgt sind, kommen Sie zu der in Abbildung 7.104 gezeigten Seite. Wie Sie unschwer erkennen können, haben wir die meisten der dort zu konfigurierenden
Punkte bereits in der globalen Konfiguration besprochen. Wir werden daher nur
die für Sie im Moment neuen Oberpunkte kurz erläutern.
Sandini Bib
426
7 Remoteadministration
Abbildung 7.103 Denied FTP Users
Abbildung 7.104 Virtuelle Server
Sandini Bib
7.1 Webmin
427
Users and Groups
Hier können Sie spezifizieren, unter welchem User und unter welcher Gruppe die
virtuellen Server grundsätzlich laufen sollen (Abbildung 7.105).
Abbildung 7.105 Users and Groups
Anonymous FTP
Um einen Anonymous-FTP-Server einzurichten, bedarf es etwas Konfigurationsarbeit. Diese Konfigurationen können Sie problemlos unter diesem Menüpunkt
vornehmen. Da die meisten dort zu findenden Unterpunkte jedoch den bereits
vorgestellten Punkten sehr ähneln, werden wir an dieser Stelle nur eine weitere
(neue) Maske besprechen (Abbildung 7.106).
Configure FTP Options
Wie Sie in Abbildung 7.107 sehen können, müssen Sie hier lediglich die drei folgenden Punkte spezifizieren:
Chroot-Verzeichnis
Unter welchem Usernamen soll der Dateizugriff stattfinden?
Unter welchem Gruppennamen soll der Dateizugriff stattfinden?
Sandini Bib
428
7 Remoteadministration
Abbildung 7.106 Anonymous FTP
Abbildung 7.107 Configure Anonymous FTP
Sandini Bib
7.1 Webmin
429
SSH Server
Auch hier bietet Webmin ein Webinterface zur Konfiguration, das Ihnen das Leben wirklich erleichtern kann. Wir werden uns nun mit den in Abbildung 7.108
zu sehenden Unterpunkten auseinander setzen.
Abbildung 7.108 Start
Authentication
Um die Optionen für Anmeldung und Echtheitsbestätigung zu treffen, können
Sie dieser Maske (Abbildung 7.109) folgende Werte übergeben:
Benachrichtigung, wenn neue Mails vorhanden sind
Erlaube Echtheitsbestätigung durch Passwort
Erlaube das Anmelden mit leerem Passwort
Erlaube Anmeldung als root?
Erlaube RSA Echtheitsbestätigung?
Prüfe Berechtigungen auf Dateien der Schlüssel
Anzeigen von /etc/motd beim Anmelden
Ignoriere Datei known_hosts des Benutzers
Meldungsdatei vor dem Anmelden
Sandini Bib
430
7 Remoteadministration
Erlaube das Anmelden nur durch hosts.equiv und .rhosts
Prüfe hosts.equiv und .rhosts für RSA-Echtheitsbestätigung
Ignoriere .rhosts-Datei
Abbildung 7.109 Authentication
Networking
In dieser Maske (Abbildung 7.110) können Sie folgende Parameter für Ihr Netzwerk setzen:
Adresse, auf der Verbindungen angenommen werden sollen
Port, auf dem Verbindungen angenommen werden sollen
Akzeptierte Protokolle
Verbindung trennen, wenn Client abgestürzt ist?
Wartezeit für Anmeldung
TCP-Weiterleitung erlauben?
Verbindung auf weitergeleiteten Ports erlauben?
Sandini Bib
7.1 Webmin
431
Abbildung 7.110 Networking
Access Control
Zur Kontrolle der Zugriffssteuerung stehen Ihnen folgende vier Felder zur Konfiguration zur Verfügung (Abbildung 7.111):
Nur bestimmte Benutzer erlauben
Nur bestimmte Gruppen erlauben
Bestimmte Benutzer verbieten
Bestimmte Gruppen verbieten
Miscellaneous Options
Weitere nicht zuordenbare Optionen können Sie in diesem Feld setzen (Abbildung 7.112):
Erlaube Weiterleitung von X11-Verbindungen
X11 display offset
Vollständiger Pfad zum xauth-Programm
Syslog-Möglichkeiten
Protokoll Level
Schlüssellänge Server
Erneuerungsinterval für Serverschlüssel
PID-Datei
Sandini Bib
432
7 Remoteadministration
Abbildung 7.111 Access Control
Abbildung 7.112 Miscellaneous Options
Sandini Bib
7.1 Webmin
433
Client Host Options
In diesem Formular können Sie für jeden Client unterschiedliche Optionen setzen. Um einen bereits vorhandenen Client zu bearbeiten, folgen Sie einfach dem
Link im Namen des Hosts. Falls Sie einen neuen Client anlegen wollen, benutzen
Sie den Button »Optionen für Client-Rechner hinzufügen« (Abbildung 7.113).
Egal welche dieser beiden Konfigurationsmöglichkeiten Sie nutzen, Sie können
auf jeden Fall folgende Felder neu definieren:
Optionen für Host (Adresse, Name)
Anmelden als Benutzer
Verbindung trennen, wenn Server abgestürzt ist
Echter Hostname, zu dem verbunden werden soll
Frage nach einem Passwort, falls benötigt
Port, zu dem verbunden werden soll
SSH-Verkehr komprimieren?
Escape-Zeichen
Grad der Kompression
Anzahl Versuche eine Verbindung herzustellen
Benutze privilegierten Quell-Port?
Versuche RSH, falls SSH fehlschlägt?
Nur RSH-Verbindungen herstellen?
Forward authentication agent?
X11-Verbindungen weiterleiten?
Host zur known_hosts-Datei hinzufügen?
Prüfe IP-Adressen in known_hosts-Datei?
SSH-Protokolle
Lokale Ports, die an den Server weitergeleitet werden
Server Ports, die nach lokal weitergeleitet werden
Using SSH Key Setup
In dieser Maske (Abbildung 7.114) können Sie die Einstellungen für neue Unix
User im Zusammenhang mit SSH KEYGEN (siehe Kapitel 5) vornehmen.
Änderungen annehmen
Wie bei jedem Serverdienst, den Sie über Webmin konfigurieren, können Sie auch
hier Ihre Änderungen sofort wirksam machen, indem Sie auf den entsprechenden
Link klicken (»Apply Changes«).
Sandini Bib
434
7 Remoteadministration
Abbildung 7.113 Client Host Options
Abbildung 7.114 Using SSH Key Setup
Sandini Bib
7.1 Webmin
435
SSL Tunnels
Bevor wir uns an die Besprechung dieser Maske machen, möchte ich SuSE-Benutzer darauf hinweisen, dass sie höchstwahrscheinlich ihre Modulkonfiguration
von /usr/local/sbin/stunnel auf /usr/sbin/stunnel zu ändern haben (falls sie das Paket
über den Paketmanager installieren).
Wenn Sie diese Seite betreten, erhalten Sie eine Übersicht aller von Ihnen angelegten SSL-Tunnels und können diese dann konfigurieren oder aber auch neue hinzufügen (Abbildung 7.115).
Neue Tunnel hinzufügen
Nachdem Sie dem Link zum Erstellen neuer SSL-Tunnels gefolgt sind, müssen
Sie der darauf folgenden Maske die nun aufgelisteten Optionen übergeben:
Name des Dienstes
Ist dieser aktiv oder nicht
TCP Port
Zieldefinitionen für den Tunnel
SSL-Zertifikat und Schlüssellänge
TCP Wrappers
Tunnelmodus
Ausgehende Quelladresse
Samba Windows File Sharing
Ich bin mir sicher, dass die meisten Leser das Problem der Windowsintegration in
ein Unixnetzwerk kennen werden. Dank Samba hat sich die Lösung dieses Problems in den letzten Jahren zwar stark vereinfacht, aber es ist immer noch eine
Menge Arbeit Windows Rechner geschickt in das Netzwerk einzubinden.
Um diese Arbeit etwas zu vereinfachen, können Sie die Konfigurationsmasken
von Webmin benutzen, welche wir im Folgenden beschreiben werden (siehe Abbildung 7.116).
Wie Sie in Abbildung 7.116 sehen können, ist die Startseite in zwei Teile aufgeteilt. Der Teil vor der »globalen Konfiguration« beschäftigt sich mit den vorhandenen Homeverzeichnissen und den verfügbaren Druckern.
Sie haben dabei die Möglichkeit folgende Aktionen durchzuführen:
Neue Dateifreigabe erstellen
Neue Druckerfreigabe definieren
Freigaben kopieren
Geöffnete Verbindungen anzeigen lassen
Sandini Bib
436
7 Remoteadministration
Abbildung 7.115 SSL Tunnels
Abbildung 7.116 Samba Startseite
Sandini Bib
7.1 Webmin
437
Neue Dateifreigabe erstellen
Um eine neue Dateifreigabe zu erstellen, müssen Sie dem dafür vorgesehenen
Link folgen und in der danach erscheinenden Maske folgende Optionen definieren:
Freigabename
Freigegebenes Verzeichnis
Verfügbar?
Sichtbar (im Netz)?
Freigabekommentar
Neue Druckerfreigabe erstellen
Wenn Sie eine neue Druckerfreigabe erstellen, werden Sie merken, dass die dafür
zu übergebenden Parameter denen der Dateifreigaben sehr ähneln:
Freigabename
Unix-Drucker
Spoolverzeichnis
Verfügbar?
Sichtbar (im Netz)?
Freigabekommentar
Freigabe kopieren
Oftmals ist es notwendig (oder schlichtweg einfacher), eine bereits vorhandene
Freigabe einfach zu kopieren. Beachten Sie dabei aber, dass alle Änderungen, die
Sie am Original vornehmen, auch an der Kopie angewandt werden.
Um eine Freigabe zu kopieren, müssen Sie lediglich den Namen der zu kopierenden Freigabe und den Namen der dabei neu entstehenden Freigabe spezifizieren.
Geöffnete Verbindungen
Unter dieser Rubrik können Sie alle angemeldeten Benutzer auflisten lassen.
Unix Networking
Der erste Menüpunkt der globalen Einstellungen erlaubt es Ihnen, die Einstellungen für Ihr Unixsystem/Netzwerk zu treffen (Abbildung 7.117). Im Folgenden sehen Sie eine kleine Aufstellung der anzugebenden Optionen:
Inaktivität bis zum Verbindungsabbau
Datei mit vertrauenswürdigen Rechnern/Benutzern
Netzwerkschnittstelle
Schnittstelle Netzwerkmaske
Keepalive-Pakete
Maximale Paketgröße
Sandini Bib
438
7 Remoteadministration
Verwende Addresse
Socket-Optionen
Abbildung 7.117 Unix Networking
Windows Networking
Das Gegenstück zur eben kennen gelernten Maske bilden die Einstellungen für
Ihr Windowssystem bzw. Netzwerk. Auch hier haben wir einen Screenshot (Abbildung 7.118) und eine Auflistung der Felder für Sie bereitgestellt:
Arbeitsgruppe
WINS Modus
Serverbeschreibung
Servername(n)
Standardfreigabe
Freigaben, die immer anzeigt werden sollen
Maximale Festplattengröße (aus Clientsicht)
Winpopup-Befehl
Master browser-Priorität
Protokolllevel
Master Browser
Sandini Bib
7.1 Webmin
439
Sicherheit
Password Server
An wen sollen die Browserlisten weitergegeben werden?
Abbildung 7.118 Windows Networking
Authentication
Wie so oft stellt Webmin auch hier wieder eine Maske zur Verfügung, in der Sie
alle wichtigen Parameter für die Authentifizierung (besonders Passwörter betreffend) spezifizieren können (Abbildung 7.119):
Verschlüsselte Passwörter verwenden?
Leere Passwörter erlauben?
Programm zum Ändern des Passwortes
Soll auf Groß-/Kleinschreibung geachtet werden?
Aufforderung zur Passwortänderung
Umsetzung der Benutzernamen
Windows to Unix Printing
Da in den wenigsten Fällen eine Firma ohne Papier und die dafür nötigen Drucker auskommt, ist diese Maske, in der Sie die Druckereinstellungen regeln können, eine der wichtigsten (Abbildung 7.120).
Sandini Bib
440
7 Remoteadministration
Abbildung 7.119 Authentication
Abbildung 7.120 Windows to Unix Printing
Sandini Bib
7.1 Webmin
441
Folgende Werte können in diesem Formular gesetzt werden:
Unix-Druckverfahren
Alle Drucker freigeben?
Druckerdefinitionsdatei
Druckerstatus zwischenspeichern
Miscellaneous Options
Die allgemeinen und erweiterten Einstellungen können Sie diesem Formular
übergeben (Abbildung 7.121). Die folgende Auflistung zeigt die zu treffenden
Optionen:
Debug Level
getwd()-Systemaufrufe zwischenspeichern?
Verzeichnis sperren
Logdatei
Maximale Logdateigröße
Direkte Lesezugriffe erlauben?
Direkte Schreibzugriffe erlauben?
Größe der überlappenden Lesevorgänge
chroot()-Verzeichnis
Pfad zu smbrun
Zeitversatz (für Clients) in Minuten
Vorausschauendes Lesen?
File Share Defaults
Wie Sie in Abbildung 7.122 sehen können, können Sie in dieser Maske bestimmte
Verzeichnisse freigeben. Dabei können Sie die folgenden Werte setzen:
Freigegebenes Verzeichnis
Verfügbar?
Sichtbar (im Netz)?
Freigabekommentar
Sandini Bib
442
7 Remoteadministration
Abbildung 7.121 Miscellaneous Options
Abbildung 7.122 File Share Defaults
Sandini Bib
7.1 Webmin
443
Des Weiteren haben Sie noch die Möglichkeit folgende Untermenüpunkte aufzurufen und Ihre Freigaben dort weiter zu definieren und zu konfigurieren:
Sicherheit und Zugriffskontrolle
Um die in Abbildung 7.123 und der folgenden Liste gezeigten Zugriffskontrollen
zu setzen, können Sie diese Maske benutzen:
Beschreibbar?
Gastzugang?
Unix-Gastbenutzer
Berechtigte Rechner
Nicht zugelassene
Benutzerauthentifizierung erneut durchführen?
Berechtigte Benutzer
Berechtigte Gruppen
Nicht berechtigte Benutzer
Nicht berechtigte Gruppen
Mögliche Benutzer
Mögliche Gruppen
Nur lesende Berechtigung (Benutzer)
Nur lesende Berechtigung (Gruppe)
Lese-/Schreibberechtigung (Benutzer)
Lese-/Schreibberechtigung (Gruppe)
Einstellungen für Dateiberechtigungen
Wie Sie sich sicher denken können, sind dieser Maske (Abbildung 7.124) die Verzeichnis- und Dateimodi zu übergeben:
Unix-Dateimodus
Unix-Verzeichnismodus
Nicht angezeigte Verzeichnisse
Verwende Unix-Benutzer
Verwende Unix-Gruppe
Symbolischen Links folgen?
Schreibgeschütze Dateien löschen?
Sandini Bib
444
7 Remoteadministration
Abbildung 7.123 Sicherheit und Zugriffskontrolle
Abbildung 7.124 Einstellungen für Dateiberechtigungen
Sandini Bib
7.1 Webmin
445
Dateinamenskonventionen
Für die Einstellungen für Ihre Dateinamenskonventionen stehen Ihnen folgende
Felder zur Verfügung (Abbildung 7.125):
Groß-/Kleinschreibung umsetzen?
Groß-/Kleinschreibung?
Standardschreibweise?
Groß-/Kleinschreibung beibehalten?
Groß-/Kleinschreibung (8.3)?
Verstecke Dateien mit führendem Punkt?
DOS Archivbit beibehalten?
DOS Hiddenbit beibehalten?
DOS Systembit beibehalten?
Abbildung 7.125 Dateinamenskonventionen
Sandini Bib
446
7 Remoteadministration
Erweiterte Einstellungen
Alle Einstellungen, die noch zu treffen sind, die aber nicht in die bereits aufgeführten Menüpunkte einzuordnen sind, können hier definiert werden (Abbildung 7.126):
Dateisperren verwenden?
Maximale Verbindungen
Dateisperrungen simulieren?
Freigabemodi verwenden?
Unbedingte Dateisperren verwenden?
Synchronisieren nach Schreibaktion?
Datenträgername Wie Freigabe
Unix-DOS Dateinamenumsetzung
Ausführen bei Verbindungsaufbau
Ausführen bei Verbindungsabbau
Ausführen bei Verbindungsaufbau als root
Ausführen bei Verbindungsabbau als root
Abbildung 7.126 Erweiterte Einstellungen
Sandini Bib
7.1 Webmin
447
Printer Share Defaults
Auch hier finden Sie ein Pendant zu einem bereits kennen gelernten Link (siehe
neue Druckerfreigabe). Neben den gleich gezeigten Feldern können Sie in zwei
weiteren Menüpunkten weitere Angaben treffen (Abbildung 7.127):
Unix-Drucker
Spoolverzeichnis
Verfügbar?
Sichtbar (im Netz)?
Freigabekommentar
Abbildung 7.127 Printer Share Defaults
Sicherheit und Zugriffskontrolle
Folgende Punkte können für die Sicherheitseinstellungen Ihrer Druckerfreigaben
getroffen werden (Abbildung 7.128):
Beschreibbar?
Gastzugang?
Unix-Gastbenutzer
Berechtigte Rechner
Sandini Bib
448
7 Remoteadministration
Nicht zugelassene Rechner
Benutzerauthentifizierung erneut durchführen?
Berechtigte Benutzer
Berechtigte Gruppen
Nicht berechtigte Benutzer
Nicht berechtigte Gruppen
Mögliche Benutzer
Mögliche Gruppen
Nur lesende Berechtigung (Benutzer)
Nur lesende Berechtigung (Gruppe)
Lese-/Schreibberechtigung (Benutzer)
Lese-/Schreibberechtigung (Gruppe)
Abbildung 7.128 Sicherheit und Zugriffskontrolle
Druckereinstellungen
In dieser Maske (Abbildung 7.129) können Sie die Einstellungen rund um Ihren
Drucker setzen. Falls Sie sich nicht sicher sind, sollten Sie die Optionen auf
»Default« stehen lassen:
Sandini Bib
7.1 Webmin
449
Minimaler freier Plattenplatz
Postscriptdrucken erzwingen
Druckbefehl
Spoolverzeichnis anzeigen
Druckauftrag löschen
Druckauftrag anhalten
Druckauftrag fortsetzen
Druckertreiber
Abbildung 7.129 Druckereinstellungen
SWAT
SWAT ist eigentlich kein Webmin-Modul und wird standardmäßig mit SAMBA
ausgeliefert. Nichtsdestotrotz hat es dieselben guten Eigenschaften wie die bereits vorgestellten Webmin-Module und ermöglicht es dem Administrator, seine
Konfigurationsaufgaben über einen Webbrowser durchzuführen.
Nachdem Sie sich über den in Abbildung 7.130 gezeigten SWAT-Login eingeloggt haben, werden Sie automatisch zu SWAT weitergeleitet. Wir werden SWAT
an dieser Stelle nicht besprechen, da dies definitiv den Rahmen dieses Buches
sprengen würde. Da die Konfigurationspunkte aber alle gut geordnet auf der ers-
Sandini Bib
450
7 Remoteadministration
ten Seite liegen und eine ausführliche Manpage (swat) vorliegt, sollte die Arbeit
damit kein Problem darstellen.
Abbildung 7.130 SWAT-Login
Encrypted Passwords
Nachdem Sie nun Ihren Sambaserver »perfekt« konfiguriert haben, steht Ihnen
ein letzter Abschnitt der Sambastartseite zur Verfügung um die Sambabenutzer
und deren Passwörter zu ändern.
Grundsätzlich können Sie folgende Verwaltungen und Konfigurationen erledigen:
Samba-Benutzer und Passwörter konfigurieren, verwalten, bearbeiten
Unix-Benutzer zu Samba-Benutzern konvertieren
Automatische Unix- und Samba-Benutzer-Synchronisation konfigurieren
Sendmail Configuration
Ich denke, jeder, der einmal ein Sendmailsystem aufgesetzt und konfiguriert hat,
weiß, wie viel Arbeitsaufwand das darstellt. Mit Webmin bekommen Sie nun die
Möglichkeit geboten, die berüchtigte Konfiguration von Sendmail über ein Webmodul zu erledigen, und sparen damit eine Menge Zeit, Arbeit und Nerven.
Sandini Bib
7.1 Webmin
451
Außerdem wird die Fehleranfälligkeit Ihrer Konfigurationsdateien drastisch gesenkt (Abbildung 7.131).
Abbildung 7.131 Sendmail
Sendmail Options (O)
Hier können Sie die verschiedensten globalen Einstellungen für Ihr Sendmailsystem spezifizieren (Abbildung 7.132).
Sende ausgehende Mail durch einen bestimmten Host
Leite unqualifizierte Benutzernamen weiter zu einem bestimmten Host
Leite Mail für lokale Benutzer weiter zum Host X
Auslieferungsmodus
SMTP Portoptionen
Maximaler Load-Durchschnitt für das Senden
Maximaler Load-Durchschnitt für das Empfangen
Maximale Anzahl von untergeordneten Prozessen
Maximale Anzahl von Verbindungen/Sekunde
Minimale Zeit vor dem erneuten Sendeversuch
Maximale Warteschlangenlänge
Sandini Bib
452
7 Remoteadministration
Zeit, bevor aufgegeben wird
Zeit, bevor eine Warnung gesendet wird
Verzeichnis der Warteschlange
An wen sollen Fehlermeldungen geschickt werden?
Benutzerweiterleitungsdateien
Minimaler freier Speicherplatz
Maximale Nachrichtengröße
Protokoll-Level
MIME-kodierte Bounce-Nachrichten?
Accept mail for users real names?
Dateisicherheitseinstellungen
Abbildung 7.132 Sendmail Options (O)
Mail Aliases (aliases)
Wie Sie aus Abbildung 7.133 erkennen können, bietet Ihnen diese Maske die
Möglichkeit neue Aliase anzulegen oder die bereits vorhandenen zu verwalten.
Sandini Bib
7.1 Webmin
453
Um die Einstellungen eines bereits vorhandenen Mail Aliases zu ändern, klicken
Sie einfach auf den entsprechenden Namen. Sie werden dadurch automatisch zu
der entsprechenden Seite weitergeleitet.
Abbildung 7.133 Mail Aliases (aliases)
Um einen neuen Alias zu definieren müssen Sie lediglich folgende Angaben machen:
Die Adresse ohne Domainnamen (z.B. max.mustermann)
Weiter müssen Sie angeben, ob der Alias aktiviert werden soll
Wohin soll der Alias gehen (E-Mail-Adresse, Datei … )
Local Domains (Cw)
Falls Sie wollen, dass Ihr Mailserver mehrere Domainnamen verwaltet, müssen
Sie diese Domains in der in Abbildung 7.134 gezeigten Maske definieren.
Domain Masquerading (CM)
Falls Sie wünschen, dass alle E-Mails, egal mit welcher Domainendung, die Ihr
System verlassen, als Absenderadresse eine bestimmte Domain zugewiesen bekommen, können Sie dies in der Maske aus Abbildung 7.135 definieren.
Beachten Sie dabei aber, dass Sie diese Funktion für einzelne Benutzer im Menüpunkt »Outgoing Addresses« ändern können.
Sandini Bib
454
7 Remoteadministration
Abbildung 7.134 Local Domains (Cw)
Abbildung 7.135 Domain Masquerading (CM)
Sandini Bib
7.1 Webmin
455
Trusted Users (T)
Um einen Benutzer die Erlaubnis zu erteilen, die Absenderadresse seiner E-Mails
zu ändern (From Feld), muss er den Status »Trusted Users« bekommen. Seien Sie
mit dieser Funktion äußerst vorsichtig, da damit logischerweise E-Mail-Adressen
gefälscht werden können.
Diese Option kann für Webdienste (wie zum Beispiel Apache) sehr nützlich und
hilfreich sein.
Address Mapping (virtuser)
Hier können Sie eine Art »besseren Alias« erstellen. Diese Methode hat im Gegensatz zu Mail Aliases folgende Vorteile:
Es können ganze Domains zu einer einzigen Adresse umgeleitet werden
Benutzer können mit einem Namen in mehreren Domains behandelt werden
E-Mails können von einer Domain zu einer anderen umgeleitet werden
Abbildung 7.136 Address Mapping
Um eine Verknüpfung zu erstellen, müssen Sie folgende Angaben machen:
Mail für
Adresse
Sandini Bib
456
7 Remoteadministration
Domain
Senden an:
Adresse
Domain
Fehler werden zu einer bestimmten Adresse geschickt
Sie können die dafür zuständige Konfigurationsdatei /etc/mail/virtusertable
auch manuell über Webmin konfigurieren.
Domain Routing (mailertable)
Hier können Sie verschiedene Auslieferungen für bestimmte Domains, die nicht
in der Liste der lokalen Domains aufgeführt sind, definieren (Abbildung 7.136).
Dabei stehen folgende Auslieferungsmodi zur Verfügung:
SMTP
Erweitertes SMTP
8-bit SMTP
dsmtp
SMTP-Weiterleitung
Procmail
UUCP
uucp-old
suucp
uucp-new
uucp-dom
uucp-uudom
bsmtp
fido
Neben dem Auslieferungsmodus müssen Sie noch angeben, ob die Mail für Hosts
oder für Domains bestimmt ist und an wen sie geschickt werden soll.
Outgoing Addresses (generics)
Wie wir bereits wissen, können Sie hierbei die Angaben, die Sie global im Menüpunkt »Domain Masquerading (CM)« definiert haben, überschreiben.
Das heißt, dass Sie auch hier das »From«-Feld einer ausgehenden E-Mail verändern können. Die hier erstellten »Verknüpfungen« funktionieren aber nicht für
Mails, die an lokalen Benutzer ausgeliefert werden sollen. Weiter müssen Sie für
jede Domain, die Sie hier verknüpfen wollen, einen Eintrag in der Tabelle für ausgehende Domänen haben (Outgoing Domains). Außerdem muss im DNS-Eintrag
für jede Domäne ein MX-Eintrag eingetragen werden, welcher auf Ihr System verweist.
Sandini Bib
7.1 Webmin
457
Abbildung 7.137 Domain Routing (mailertable)
Sie können die dafür zuständige Konfigurationsdatei /etc/mail/genericstable auch
per Hand über ein Webmin-Modul konfigurieren.
Um die Verknüpfung zu erstellen, müssen Sie lediglich zwei Felder ausfüllen:
1. Mail von <Adresse>
2. Ändern zu <Adresse>
Einen Screenshot zeigt Abbildung 7.138.
Outgoing Domains (CG)
Hier müssen Sie für jede Domain, die Sie unter dem Menüpunkt »Outgoing
Addresses« verknüpfen wollen, einen Eintrag definieren. Das heißt, dass die Domain des »From«-Feldes in dem in Abbildung 7.139 gezeigten Screenshot aufgelistet sein muss.
Domain Mapping (domaintable)
Falls Ihre Sendmailkonfiguration über die nötige Direktive für Domänenverknüpfung verfügt, können Sie diese Verknüpfungen mit diesem Formular realisieren.
Sandini Bib
458
7 Remoteadministration
Abbildung 7.138 Outgoing Addresses (generics)
Abbildung 7.139 Outgoing Domains
Sandini Bib
7.1 Webmin
459
Spam Control (access)
Mit diesem Formular können Sie so genannte Anti-Spam-Regeln definieren, die
verhindern, dass Sie Mails von bestimmten Absendern bekommen. Sie sollten
dieses Feature auf jeden Fall nützen, da dies eine Menge Traffic erspart und die
Einschleusung von Viren und Trojanern stark einschränken kann (Abbildung
7.140).
Abbildung 7.140 Spam Control (access)
Um solche Anti-Spam-Regeln einzurichten müssen Sie folgende Angaben an das
Formular übergeben:
Quelle der Mail (Domain, Benutzer, Netzwerk … )
Aktion (abweisen, weiterleiten, leise löschen, akzeptiere … )
Relay Domains (CR)
In der in Abbildung 7.141 gezeigten Seite können Sie bestimmte Domains angeben, die weitergeleitet werden dürfen. Achten Sie aber darauf, dass dieses Feature
nicht mit den Spamregeln kollidiert.
Mail Queue (mailq)
Hier finden Sie die Nachrichten, die noch nicht ausgeliefert wurden und sich somit in der Warteschlange befinden.
Sandini Bib
460
7 Remoteadministration
Abbildung 7.141 Relay Domains (CR)
User Mailboxes
Unter diesem Menüpunkt befindet sich eine Seite, die alle vorhandenen Mailboxen inklusive Größenanzeige auflistet. Von dort aus haben Sie eine gute Übersicht
über die einzelnen Mailboxen und können diese konfigurieren und einsehen.
Weiter ist es sogar möglich, vorhandene Mails weiterzuleiten oder neue Nachrichten zu erstellen (Abbildung 7.142).
Squid Proxy Server
Der Squid Proxy ist wohl der bekannteste Proxyserver, den man in der Linuxwelt
so finden kann. Daher verwundert es kaum, dass Sie auch hier die Möglichkeit
haben, diesen Dienst bequem über ein Webmin-Modul zu konfigurieren.
Wenn Sie Ihren Squid Server noch nicht initialisiert haben (vermeiden Sie eine Initialisierung durch den Superuser), können Sie dies über die Startseite (Abbildung 7.143) tun. Nachdem dies erledigt ist, stehen Ihnen für die Konfiguration elf
verschiedene Menüpunkte zur Verfügung, die wir alle im Laufe dieses Abschnittes besprechen werden.
Sandini Bib
7.1 Webmin
461
Abbildung 7.142 User Mailboxes
Abbildung 7.143 Squid
Sandini Bib
462
7 Remoteadministration
Ports and Networking
In diesem Formular (Abbildung 7.144) können Sie Ihre Netzwerkeinstellungen
und verfügbaren Anschlüsse mit den folgenden Feldern konfigurieren:
Proxy-Adressen und -Anschlüsse
ICP-Anschluss
Ausgehende TCP-Adresse
Ausgehende UDP-Adresse
Eingehende UDP-Adresse
Multicast-Gruppen
TCP-Empfangspuffer
Abbildung 7.144 Ports and Networking
Other Caches
Diese Maske (Abbildung 7.145) ermöglicht Ihnen folgende Features:
1. Caches hinzufügen
2. Cache-Auswahleinstellungen definieren
3. ACLs für Direktabholungen definieren
Sandini Bib
7.1 Webmin
463
4. ACLs für indirekte Abholung definieren
5. Wenn Sie einen neuen Cachehost hinzufügen wollen, müssen Sie – nachdem
Sie dem entsprechenden Link gefolgt sind – folgende Parameter definieren:
Host-Name
Typ
Proxy-Anschluss
ICP-Anschluss
Nur Proxy?
Sende ICP-Anfragen?
Standard-Cache?
Round-Robin-Cache?
ICP-Time-To-Live
Cache-Gewichtung
Nur nächsten?
Keine Auswahl?
Kein NetDB-Austausch?
Keine Verzögerung?
Anmeldung (User und Pass) auf Proxy
Multicast-Responder?
Frage bei Host an für Domänen
Frage nicht an für Domänen
Die Felder, die Sie ausfüllen müssen, um die Auswahlsequenzen zu definieren,
finden Sie in der angefügten Liste (ACLs werden im Anschluss besprochen):
Hole URLs direkt, die bestimmte Zeichen enthalten
ICP-Anfrage-Timeout (in ms)
Multicase-ICP-Timeout (in ms)
Timeout für abgebrochenen Kontakt (in sec)
Um ACLs für Direktabholung hinzuzufügen, müssen Sie einige Felder spezifizieren:
Aktion
Übereinstimmende ACLs
Nicht übereinstimmende ACLs
Das Gegenstück hierzu (indirekte Abholung) verlangt dieselben Eingaben.
Sandini Bib
464
7 Remoteadministration
Abbildung 7.145 Other Caches
Memory Usage
Wenn Ihr Proxy viele Zugriffe zu regeln hat und er mit viel Traffic umgehen
muss, sollten Sie unbedingt die Speichernutzung regeln, da es ansonsten durchaus passieren kann, dass die Performance Ihres Systems spürbar sinkt. Um dies
zu verhindern können Sie die folgenden Parameter setzen (Abbildung 7.146):
Speichernutzungsgrenzwert
FQDN-Cache-Größe
Oberer Schwellenwert für Speicher
Unterer Schwellenwert für Speicher
Oberer Schwellenwert für Festplatte
Unterer Schwellenwert für Festplatte
Maximale Größe zwischengespeicherter Objekte
IP-Adressen-Cache-Größe
Oberer Schwellenwert für IP-Cache
Unterer Schwellenwert für IP-Cache
Sandini Bib
7.1 Webmin
465
Abbildung 7.146 Memory Usage
Logging
Um die allgemeinen Einstellungen für die Protokollierung und die dazu verwendeten Dateien weg vom Standard zu definieren können Sie die Optionen in der
angeschlossenen Liste benutzen (Abbildung 7.147):
Zugriffsprotokolldatei
Debug-Protokolldatei
Speicherprotokolldatei
Cache-Metadata-Datei
Benutze HTTPD-Protokollformat?
MIME-Header protokollieren?
Benutzeragent-Protokolldatei
PID-Date
Führe RFC931-Ident-Lookups für ACLs aus
RFC931-Ident-Timeout
Vollen Host-Namen protokollieren?
Protokollierung der Netzmaske
Sandini Bib
466
7 Remoteadministration
Debug-Einstellungen
MIME-Header-Tabelle
Abbildung 7.147 Logging
Cache Options
Hier können Sie Einstellungen für alle Anfragen und den Cache an sich durch folgende Parameter treffen:
Cache-Verzeichnisse
Durchschnittliche Objektgröße
Objekte pro Verzeichnis
URLs für bestimmte ACLs nicht zwischenspeichern
Maximale Cache-Zeit
Maximale Anfragedateigröße
Maximale Anfrage-Header-Größe
Maximale Antwortdateigröße
Verweildauer von Fehlerantworten im Cache
DNS-Lookup-Cache-Dauer
Fehlgeschlagene DNS-Lookup-Cache-Dauer
Sandini Bib
7.1 Webmin
467
Verbindungs-Timeout
Lese-Timeout
Seitenauswahl-Timeout
Client-Anfrage-Timeout
Maximale Verbindungszeit für Clients
Maximale Shutdown-Zeit
Halb-geschlossene Clients?
Ständiger Timeout
WAIS-Relay-Host
Helper Programs
Um die vorhandenen Squid-Hilfsprogramme oder neue Hilfsprogramme und deren Einstellungen zu definieren, müssen Sie dieses Formular aufrufen, in dem Sie
folgende Felder füllen können (Abbildung 7.148):
Anon. FTP-Anmeldung
FTP-Spaltenbreite
Squid DNS-Programm
Anzahl von DNS-Programmen
Hänge Domäne an Anfragen an
Von wo werden DNS-Server-Adressen bezogen?
Cache-Reinigungsprogramm
Squid-Ping-Programm
Eigenes Weiterleitungsprogramm
Anzahl von Weiterleitungsprogrammen
Eigenes Authentifizierungsprogramm
Anzahl von Authentifizierungsprogrammen
Access Control
Wie Sie sicherlich schon bemerkt haben, konnten Sie in den bereits vorgestellten
Masken bestimmte Aktionen für bestimmte ACLs definieren. In dieser Maske
(Abbildung 7.149) finden Sie alle bereits vordefinierten Zugriffslisten, welche Sie
natürlich nach Ihren Bedürfnissen verändern können (oder neue hinzufügen).
Dabei können Sie diese drei Regelarten definieren oder verwalten:
1. Zugriffskontrolllisten (ACLs)
2. Proxy-Beschränkungen
3. ICP-Beschränkungen
Sandini Bib
468
7 Remoteadministration
Abbildung 7.148 Helper Programs
Abbildung 7.149 Access Control
Sandini Bib
7.1 Webmin
469
Miscellaneous Options
Alle Einstellungen, für die kein eigener Menüpunkt entworfen wurde und die
nicht in einen bereits vorhandenen Punkt eingefügt werden können, können Sie
an dieser Stelle konfigurieren (Abbildung 7.150). Wie zum Beispiel:
Startup-DNS-Testadressen
SIGUSR1-Protokolldateirotationen
Standarddomäne
Fehlermeldungstext
Statistiken pro Client?
X-Forwarded-For Header?
ICP-Anfragen protokollieren?
Minimale direkte Hops
Reserviere Speicher für zukünftige Nutzung?
Größe des zu reservierenden Speichers?
Header, die durchgehen
Falscher Benutzeragent
HTTP-Accel-Host
HTTP-Accel-Anschluss
HTTP-Accel mit Proxy
Soll HTTP-Accel Host-Header benutzen?
Administrative Options
Dieses Formular übernimmt die Administration Ihres Proxys. Das heißt, Sie können durch die hier verfassten Einstellungen Ihren Proxyserver konfigurieren (Abbildung 7.151). Folgende Parameter können gesetzt werden:
Unix-Benutzer
Unix-Gruppe
Proxy-Authentifizierungs-Umgebung
Cache-Manager-E-Mail-Adresse
Angezeigter Host-Name
Eindeutiger Host-Name
Cache-Bekanntmachungs-Host
Cache-Bekanntmachungs-Anschluss
Cache-Bekanntmachungs-Datei
Bekanntmachungs-Intervall
Sandini Bib
470
7 Remoteadministration
Abbildung 7.150 Miscellaneous Options
Abbildung 7.151 Administrative Options
Sandini Bib
7.1 Webmin
471
Clear and Rebuild Cache
Um den Cache zu leeren und neu aufzubauen, müssen Sie den dafür vorgesehenen Button in dieser Maske (Abbildung 7.152) drücken.
Abbildung 7.152 Clear Cache
WU-FTP-Server
Der letzte FTP-Server, den wir in unserer Webminreihe besprechen, ist der WUFTP-Server. Ob und wie Sie ihn auf Grund des aktuellen Sicherheitsrisikos einsetzen, bleibt Ihnen überlassen. Falls Sie sich aber nicht ganz sicher sind, sollten Sie
jedoch einen anderen FTP-Server vorziehen.
Dieses Webmin-Modul bietet Ihnen die Möglichkeit Ihren FTP-Server durch neun
verschiedene Menüpunkte zu konfigurieren. Dabei wird (fast) das komplette
Konfigurationsspektrum abgedeckt, das heißt, dass normalerweise die volle Konfiguration über das Netz vorgenommen werden kann.
Abbildung 7.153 zeigt die Startseite der WU-FTP-Serverkonfiguration.
Sandini Bib
472
7 Remoteadministration
Abbildung 7.153 WU-FTP-Server
Users and Classes
In dieser Maske (Abbildung 7.154) können Sie bestimmte Benutzerklassen definieren und die Standardeinstellungen zu den FTP-Benutzern abändern. Folgende
Werte können gesetzt werden:
Unix-Benutzer und UIDs, die als Gäste behandelt werden sollen
Unix-Gruppen und GIDs, die als Gäste behandelt werden sollen
Unix-Benutzer und UIDs, die nicht als Gäste behandelt werden sollen
Unix-Gruppen und GIDs, die nicht als Gäste behandelt werden sollen
Unix-Benutzer, denen der Zugriff verweigert werden soll (von /etc/ftpusers)
Unix-Benutzer und UIDs, denen der Zugriff verweigert werden soll
Unix-Gruppen und GIDs, denen der Zugriff verweigert werden soll
Unix-Benutzer und UIDs, denen der Zugriff nicht verweigert werden soll
Unix-Gruppen und GIDs, denen der Zugriff nicht verweigert werden soll
Messages and Banners
Manchmal kann es durchaus sinnvoll sein, die FTP-Meldungen, Banner und
ReadMe-Dateien abzuändern, so dass diese entweder der Sicherheitspolicy entsprechen oder auf Ihr System zugeschnitten sind.
Sandini Bib
7.1 Webmin
473
Abbildung 7.154 Users and Classes
Diese Maske ermöglicht Ihnen dies zum Beispiel durch das Setzen bestimmten
Grußlevel, Banner vor der Anmeldung, Hostnamen für Meldungen und so weiter
(Abbildung 7.155).
Außerdem können Sie hier die E-Mail-Adresse des FTP-Besitzers abändern.
Limits and Access Control
In diesem Formular (Abbildung 7.156) können Sie folgende Grenzwerte definieren:
Zugriffsverweigerung von bestimmten Adressen
Grenzwerte gleichzeitiger Benutzer
Datei- und Transfergrenzwerte
Dateizugriffsverweigerung
Zugriff auf zugriffsverweigerte Dateien
Grenzwerte für anonyme Sitzungen
Maximale Anzahl von fehlgeschlagenen Anmeldeversuchen
Sandini Bib
474
7 Remoteadministration
Abbildung 7.155 Messages and Banners
Abbildung 7.156 Limits and Access Control
Sandini Bib
7.1 Webmin
475
Networking
Hier können Sie diese drei Netzwerkgrundeinstellungen definieren (Abbildung
7.157):
TCP-Fenstergrößen
Adressen für PASV-Verbindungen
Anschlüsse für PASV-Verbindungen
Abbildung 7.157 Networking
Logging
Sie können diesem Formular die (wenigen) Protokollierungsparameter für Ihren
WU-FTP-Server übergeben (Abbildung 7.158):
Für bestimmte User alle Befehle protokollieren
Für bestimmte User alle Transfers protokollieren
Wohin sollen Transfers protokolliert werden?
Für bestimmte User Sicherheitsverletzungen protokollieren
Sandini Bib
476
7 Remoteadministration
Abbildung 7.158 Logging
Aliases and Paths
Hier können Sie bestimmte Aliase anlegen, welche wiederum auf bestimmte Verzeichnisse »zeigen«. Außerdem können Sie den Verzeichnissuchpfad definieren
(Abbildung 7.159).
Anonymous FTP
Wenn Sie einen anonymen FTP-Zugang erlauben wollen, können Sie hier die folgenden Werte definieren, um diesen Zugang zu konfigurieren (Abbildung 7.160):
Root-Verzeichnis für anonymes FTP
Gast-Root-Verzeichnis
Unix-Gruppen für anonyme Benutzer W
Kennwortüberprüfung für anonymes FTP
Kennwörter für anonymes FTP, die verweigert werden sollen
Permissions
In diesen Einstellungen (Abbildung 7.161) können Sie bezüglich Zugriffsrechten
bestimmte Befehle einschränken oder sperren. Des Weiteren ist es möglich, den
Upload bestimmter Dateinamen zu unterbinden (z.B. /etc/shadow).
Sandini Bib
7.1 Webmin
477
Abbildung 7.159 Aliases and Paths
Abbildung 7.160 Anonymous FTP
Sandini Bib
478
7 Remoteadministration
Abbildung 7.161 Permissions
Miscellaneous Options
Auch hier sind die Parameter, die in keine Rubrik eingeordnet werden konnten,
in einem eingenen Unterpunkt zusammengefasst (Abbildung 7.162):
Langer Listing-Befehl
Kurzer Listing-Befehl
Normaler Listing-Befehl
Shutdown-Benachrichtigungsdatei
Serviceprozess-Nicelevel
Standard-Umask für hochgeladene Dateien
Sandini Bib
7.1 Webmin
479
Abbildung 7.162 Miscellaneous Options
7.1.6
Hardware
Neben Ihrer Software ist es auch möglich, die wichtigsten Hardwarebestandteile
Ihres Rechners mit Webmin zu konfigurieren. Wir werden im Folgenden kurz auf
die einzelnen Menüpunkte eingehen, so dass Sie keine Probleme bei der Umsetzung haben sollten.
CD Burner
Wie Sie in Abbildung 7.163 erkennen können, können Sie in dieser Maske neue
Brennprofile anlegen oder die bereits vorhandenen konfigurieren.
Linux Bootup Configuration
Hier können Sie vorhandene Bootkonfigurationen (Kernel mit oder ohne bestimmten Optionen) einsehen und konfigurieren. Sie können auch neue Bootsequenzen hinzufügen (Abbildung 7.164).
Sandini Bib
480
7 Remoteadministration
Abbildung 7.163 CD Burner
Abbildung 7.164 Linux Bootup Configuration
Sandini Bib
7.1 Webmin
481
Dabei müssen folgende Werte übergeben und gegebenenfalls gesetzt werden:
Name
Zu bootender Kernel
Kernel-Parameter
Root-Gerät
Anfängliche RAM-Disk-Datei
Root-Mount-Modus
VGA-Textmodus
Benutzer-Kernel-Optionen merken?
Sollen Kernel, die nicht existieren, übersprungen werden?
Boot-Kennwort
Kennwort benötigt für...
Wenn Sie jedoch eine neue Bootpartition erstellen wollen, sind folgende Angaben
zu treffen:
Name
Zu bootende Partition
Übergebe die Partitionstabelle an das Betriebsystem
Boot-Kennwort
Linux RAID
Um neue RAID-Geräte hinzuzufügen oder die bereits vorhandenen zu konfigurieren, können Sie diese Maske benutzen (Abbildung 7.165). Es stehen Ihnen folgende RAID Level zur Verfügung:
Zusammengefügt (Linear)
Striped (RAID0)
Gespiegelt (RAID1)
Parität (RAID4)
Redundant (RAID5)
Network Configuration
Die Konfiguration Ihres Netzwerks ist in vier Teile aufgesplittet (Abbildung
7.166). Der erste Teil »Netzwerkschnittstellen« (Abbildung 7.167) befasst sich mit
den folgenden Punkten:
zurzeit aktive Schnittstellen
beim Booten geladene Schnittstellen
Hinzufügen neuer Schnittstellen
Sandini Bib
482
7 Remoteadministration
Abbildung 7.165 Linux RAID
Abbildung 7.166 Networking Configuration
Sandini Bib
7.1 Webmin
483
Abbildung 7.167 Netzwerkschnittstellen
Die zweite Registerkarte (Abbildung 7.168) beschäftigt sich mit den Routingeinstellungen, die zur Bootzeit aktiviert werden, und erlaubt es Ihnen, die folgenden
Konfigurationen vorzunehmen:
Soll als Router gearbeitet werden?
Was ist der Standardrouter?
Was sind die lokalen Routen?
Was sind die statischen Routen?
Um Ihren DNS Client zu konfigurieren, müssen Sie die dritte Registerkarte (Abbildung 7.169) aufrufen, welche die folgenden Felder für die Konfiguration Ihrer
DNS Client-Optionen bereitstellt:
Hostname
DNS Server
Auflösungsreihenfolge
Suchdomänen
Sandini Bib
484
7 Remoteadministration
Abbildung 7.168 Routing und Gateways
Abbildung 7.169 DNS Client
Sandini Bib
7.1 Webmin
485
Der letzte Menüpunkt befasst sich mit den vorhandenen IP-Adressen und den
dazugehörigen Hostnamen. Sie können an dieser Stelle neue Hosts hinzufügen
und ihnen eine IP-Adresse zuweisen (Sie können einer IP-Adresse dabei auch
mehrere Hostnamen zuteilen).
Die Einstellungen in dieser Maske werden aus der Konfigurationsdatei /etc/hosts
entnommen und hinzugefügt.
Dieses Formular ist in Abbildung 7.170 zu sehen.
Abbildung 7.170 Hostnamen
Partitions on Local Disks
Wenn Sie diesen Menüpunkt aufrufen, bedient sich Webmin des Programms fdisk
und stellt Ihnen somit einen mächtigen, webfähigen Festplattenmanager zur Verfügung, der Ihnen Informationen über Ihre Festplatten, die genutzten Partitionen
und den Speicherplatz auf den einzelnen Partitionen liefert. Des Weiteren ist es
möglich, sowohl primäre als auch erweiterte Partitionen hinzuzufügen (Abbildung 7.171).
Sandini Bib
486
7 Remoteadministration
Abbildung 7.171 Partitionsmanager
Printer Administration
Die von Webmin zur Verfügung gestellte Druckerverwaltung (Abbildung 7.172)
zeigt Ihnen beim Aufruf alle installierten Drucker auf und gibt Ihnen die Möglichkeit diese Drucker zu konfigurieren oder neue hinzuzufügen.
Drucker hinzufügen
Wenn Sie sich dazu entschieden haben, einen neuen Drucker hinzuzufügen, müssen
Sie folgende Informationen spezifizieren, um den Drucker einrichten zu können:
Name
Akzeptiert Anfragen?
Beschreibung
Drucken aktiviert?
Drucke Banner?
Maximale Größe eines Druckauftrags
Alternative Druckernamen
Schnittstelle (seriell, USB etc.)
Lokale Datei
Sandini Bib
7.1 Webmin
487
Entfernter-Unix-Server und dazugehöriger Drucker
Entfernter-Windows-Server und dazugehöriger Drucker
Benutzer Kennwort Arbeitsgruppe für die Windowsumgebung
Test, ob entfernter Server aktiv ist?
Soll ein Druckertreiber verwendet werden (nicht notwendig bei Text- und
PostScript-Druckern)
APSfilter-Treiber
Druckertyp
Auflösung in DPI
Papiergröße
Handelt es sich um einen Farbdrucker?
Filtermethode?
Außerdem können Sie die Warteschlange beenden.
Abbildung 7.172 Printer Administration
Sandini Bib
488
7 Remoteadministration
System Time
Wenn Sie die Systemzeit oder die Hardwarezeit ändern wollen, können Sie das in
dieser Maske machen. Außerdem können Sie hier einen eigenen Zeitserver definieren und die Zeit mit diesem Server synchronisieren (Abbildung 7.173).
Abbildung 7.173 System Time
7.1.7
Cluster
Wenn Sie diese Seite das erste Mal aufrufen, werden Sie darauf aufmerksam gemacht, dass noch kein Webmin-Server für das Softwaremanagement registriert
wurde, und Sie müssen einen Server dafür bereitstellen (Abbildung 7.174). Danach wird dieser Server mit allen Paketen, die bereits installiert sind, hinzugefügt.
Alle weiteren Aufrufe dieser Seite bringen nun eine andere Maske, welche Ihnen
die »Managed Server« Liste zeigt, Ihnen die Möglichkeit gibt nach bestimmten
Paketen zu suchen und diese zu konfigurieren oder sogar neue Pakete hinzuzufügen. Siehe Abbildung 7.175.
Sandini Bib
7.1 Webmin
489
Abbildung 7.174 Cluster Software Packages (1. Aufruf)
Cluster Users and Groups
Auch hier spielt sich dasselbe Szenario wie bei den Softwarepaketen ab. Sie müssen zuerst einen Server für das Usermanagement registrieren, bevor Sie mit der
Arbeit beginnen können.
Nachdem Sie einen Server registriert haben, können Sie ab sofort über diese
Maske Ihre Cluster User und Gruppen verwalten. Folgende Funktionen stehen
Ihnen dabei zur Verfügung:
User mit bestimmten Merkmalen finden
Gruppen mit bestimmten Merkmalen finden
User und Gruppen hinzufügen
Synchronisation
Heartbeat-Monitor
Da kein Linuxhochverfügbarkeitssystem ohne einen Heartbeat-Monitor laufen
sollte, ist dieses Webmin-Modul sehr wichtig und sollte dementsprechend auch
genutzt werden (Abbildung 7.177).
Sandini Bib
490
7 Remoteadministration
Abbildung 7.175 Cluster Software Packages (weitere Aufrufe)
Dieses Formular ist in drei Unterpunkte unterteilt, die wir im Folgenden kurz ansprechen werden.
Configuration Options
Hier können Sie die folgenden Konfigurationsoptionen für Ihr Heartbeat-System
definieren (Abbildung 7.178):
Serieller Port
Baudrate für den seriellen Port
Ethernetdevice
Zeitintervalle zwischen den einzelnen Heartbeats
Watchdogdevicedatei
Hosts im Cluster
Logdatei
Syslog Logging Facility
UDP Heartbeatport
Zeit, bis ein Knoten als »tot« betrachtet wird
Sandini Bib
7.1 Webmin
491
Abbildung 7.176 Cluster Users and Groups
Abbildung 7.177 Heartbeat-Monitor
Sandini Bib
492
7 Remoteadministration
Abbildung 7.178 Configuration Options
Cluster Resources
Wenn Sie noch keine Clusterressourcen für Ihr System definiert haben, können
Sie das an dieser Stelle machen (Abbildung 7.179). Dabei müssen Sie folgende
Werte übergeben:
Primärer Knoten (Rechner) für die Ressource
IP Adressen dafür
Dienste dafür
Authentication Keys
Hier können Sie den Authentifizierungsmodus für die Knoten spezifizieren (Abbildung 7.180). Sie haben dabei die Auswahl aus folgenden Algorithmen:
CRC
SHA1
MD5
7.1.8
Others
Die letzte Registerkarte, die Ihnen unter Webmin zur Verfügung steht, behandelt
die zum Großteil »Befehlsoperationen«, die es Ihnen ermöglichen, Ihre Befehle
Sandini Bib
7.1 Webmin
493
Abbildung 7.179 Cluster Ressourcen hinzufügen
Abbildung 7.180 Authentication Keys
Sandini Bib
494
7 Remoteadministration
wie gewohnt anstatt über die Konsole über Webmin an Ihr Betriebssystem zu
übergeben (Abbildung 7.181).
Abbildung 7.181 Others Startbildschirm
Command Shell
Um einen Befehl an die Konsole weiterzuleiten, können Sie diesen Menüpunkt
benutzen, der es Ihnen erlaubt, jeden Unixbefehl über Webmin zu realisieren
(Falls Sie dieses Feature nützen wollen, sollten Sie unbedingt SSL aktivieren.).
Einen Screenshot zeigt Abbildung 7.182.
Wie Sie im folgenden Listing erkennen können, sind auch die Ausgaben von
Webmin äquivalent zur Shell:
> ps ax | egrep webmin
981 ?
S
0:03 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1389 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1584 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
Sandini Bib
7.1 Webmin
495
1585 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1589 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1594 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1595 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1596 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1597 ?
S
0:00 /usr/bin/perl /usr/libexec/webmin/
miniserv.pl /etc/webmin/miniserv.conf
1601 ?
S
0:03 /usr/libexec/webmin/shell/index.cgi
1604 ?
S
0:00 sh -c (ps ax | egrep webmin) 2>&1
1605 ?
S
0:00 sh -c (ps ax | egrep webmin) 2>&1
1607 ?
S
0:00 egrep webmin
Abbildung 7.182 Command Shell
Sandini Bib
496
7 Remoteadministration
Custom Commands
Sie haben hier die Möglichkeit, benutzerdefinierte Befehle oder Dateieditoren anzulegen oder zu verwalten. Dies kann bei langen Befehlsketten (zum Beispiel bei
einem Backup über die Konsole mit cpio etc.) sehr hilfreich sein, da Sie diesen Befehl dann durch einen einfach »Klick« übergeben können.
Befehl hinzufügen oder editieren
Wenn Sie einen neuen Befehl hinzufügen oder verwalten wollen, müssen Sie folgende Felder ausfüllen (Abbildung 7.183):
Beschreibung des Befehls (Der Inhalt dieses Feldes wird gleichzeitig der Titel
des Buttons, über den Sie den Befehl aufrufen werden.)
Befehl
User, unter dem der Befehl ausgeführt werden soll (Webmin bedient sich dazu
des in Kapitel 6 besprochenen Tools »sudo«).
Soll die Ausgabe in das HTML-Format umgewandelt werden?
Wann soll der Befehl erscheinen (Anordnung)?
Parameter
Parametertyp
Abbildung 7.183 Custom Commands
Sandini Bib
7.1 Webmin
497
Dateieditor hinzufügen oder editieren
Falls Sie des Öfteren Änderungen an bestimmten Dateien vorzunehmen haben,
können Sie dies ebenfalls über Webmin beschleunigen. Sie haben hier die Möglichkeit einen Button anzulegen, der bei Aufruf die entsprechend vorher definierte Datei in den Editor lädt, wo Sie ihn bequem bearbeiten können.
Um einen solchen »Schnellzugriff auf Dateien« zu realisieren, müssen Sie folgende Felder ausfüllen:
Beschreibung (Der Inhalt dieses Feldes wird gleichzeitig der Titel des Buttons
über den Sie den Befehl aufrufen werden.)
Datei, die bearbeitet werden soll
Eigentümer
Zugriffsrechte
Befehl, der vor dem Speichern ausgeführt werden soll (optional)
Befehl, der nach dem Speichern ausgeführt werden soll (optional)
Anordnung
File Manager
Hinter diesem Menüpunkt verbirgt sich ein mächtiges Java-Applet, das als eine
Art Mischung zwischen Dateibrowser, Uploadmanager und Editor fungiert (Abbildung 7.184). Sie können mit diesem Filemanager durch Ihr gesamtes Dateisystem browsen, bestimmte Dateien uploaden oder verändern, nach Dateien suchen,
Dateien löschen oder umbenennen und noch vieles mehr.
Perl Modules
Wenn Sie ein neues Perl-Modul installieren und kompilieren wollen, können Sie
dies hier unter Angabe der Quelle machen (Abbildung 7.185). Es sind u.a. folgenden Quellen möglich:
CPAN
Lokale Datei
Heraufgeladene Datei
FTP Adresse
HTTP Adresse
SSH/Telnet Login
Wenn Sie eine Telnet- oder SSH-Sitzung über Ihren Browser aufbauen wollen
(falls Sie zum Beispiel an einem Thin-Client sitzen und nur Webzugriff initialisieren können), können Sie das mit diesem Formular erledigen (Abbildung 7.186).
Sandini Bib
498
7 Remoteadministration
Abbildung 7.184 File Manager
Abbildung 7.185 Perl Modules
Sandini Bib
7.1 Webmin
499
Beachten Sie dabei aber bitte, dass Telnetsitzungen nicht verschlüsselt werden
und somit nicht sicher sind. Benutzen Sie ausschließlich SSH, um über ein unsicheres Netzwerk (wie das Internet) mit Ihrem Server zu kommunizieren.
Abbildung 7.186 SSH/Telnet Login
System and Server Status
Wenn Sie den Status Ihres Systems oder der einzelnen Dienste darauf bequem
und einfach über das Web überprüfen, wollen, können Sie das mit diesem Formular erreichen.
Wie Sie in Abbildung 7.187 sehen können, haben Sie die Möglichkeit bestimmte
Dienste bei der Überwachung ein- bzw. auszuschließen. Außerdem können Sie
eine zeitgesteuerte Überwachung einrichten.
Dienst in die Überwachung aufnehmen
Um einen neuen Dienst in die Überwachung mit aufzunehmen müssen Sie folgende Felder ausfüllen:
Beschreibung (meistens schon vorgegeben durch das Pulldownmenü, welches
Ihnen die verschiedenen zu überwachenden Dienste vorgibt)
Rechner, auf dem der Dienst gestartet wird
Programm, das gestartet werden soll, wenn der Prozess beendet wird
Programm, das gestartet werden soll, wenn der Prozess gestartet wird
Dienstabhängige Angaben
Sandini Bib
500
7 Remoteadministration
Abbildung 7.187 System and Server Status
Zeitgesteuerte Überwachung einrichten
Um zeitgesteuerte Überwachung einzurichten, müssen Sie folgende Angaben
spezifizieren:
Soll die zeitgesteuerte Überwachung aktiviert werden?
In welchen Intervallen soll überprüft werden?
Wann (unter welchen Voraussetzungen) soll eine E-Mail versendet werden?
An wen soll der Statusbericht gemailt werden?
Absenderadresse der E-Mail
Soll der Statusbericht auch einen Pager gehen, wenn ja, an welche Nummer?
Soll pro Dienst eine E-Mail verschickt werden?
7.1.9
Fazit
Wie Sie sehen, können Sie mit Webmin Ihr komplettes System bequem und weniger fehleranfällig konfigurieren, ohne dabei Abstriche bei der Sicherheit machen
zu müssen. Auch die Konfiguration mehrerer oder sogar verteilter Systeme ist für
dieses Programm kein Hindernis, sondern eher ein Feature. Ich könnte jetzt seitenweise über die Vorteile von Webmin sprechen, aber ich denke, Sie werden
selbst darauf kommen und für sich persönlich die richtige Entscheidung treffen.
Sandini Bib
Stichwortverzeichnis
Symbols
! 303
&& 213
--allow-non-selfsigned-uid 259
--always-trust 254
--armor 253
--batch 254
--charset 255
--check-sigs 248
--cipher-algo 257
--clearsign 247
--comment 256
--completes-needed 257
--compress-algo 258
--debug 256
--decrypt 248
--default-comment 256
--default-key 253
--default-recipient 253
--default-recipient-self 253
--delete-key 251
--delete-secret-and-public-key 251
--delete-secret-key 251
--detach-sign 247
--digest-algo 257
--disable-cipher-algo 258
--disable-pubkey-algo 258
--dry-run 254
--edit-key 248
--emit-version 256
--encrypt 247
--encrypt-to 253
--escape-from-lines 258
--export 251, 252
--export-all 251
--export-secret-keys 251
--export-secret-subkeys 251
--fast-import 252
--fast-list-mode 260
--fingerprint 248
--force-mdc 259
--force-v3-sigs 259
--gen-key 248
--gen-prime 252
--gen-random 252
--gen-revoke 251
--help 252
--homedir 255
--honor-http-proxy 254
--ignore-time-conflict 259
--import 251
--import-ownertrust 252
--interactive 254
--keyring 255
--keyserver 254
--list-keys 248
--list-only 260
--list-packets 248
--list-public-keys 248
--list-secret-keys 248
--list-sigs 248
--load-extension 256
--local-user 253
--lock-multiple 259
--lock-never 259
--lock-once 259
--logger-fd 256
--lsign-key 250
--marginals-needed 257
--max-cert-depth 257
--no 254
--no-armor 260
--no-auto-key-retrieve 254
--no-batch 254
--no-comment 256
--no-default-keyring 260
--no-default-recipient 253
--no-encrypt-to 253
--no-greeting 259
--no-options 255
--no-random-seed-file 259
--no-secmem-warning 259
--no-tty 254
--no-utf8-strings 255
--no-verbose 259
--no-version 256
--not-dash-escaped 258
--notation-data 256
--openpgp 259
--optionsfile 255
--output 253
--passphrase-fd 258
--print-md 252
--quiet 253
--recipient 253
--recv-keys 252
Sandini Bib
502
--rfc1991 258
--s2k-cipher-algo 257
--s2k-digest-algo 257
--s2k-mode 257
--secret-keyring 255
--send-keys 251
--sign 247
--sign-key 250
--skip-verify 260
--status-fd 256
--store 248
--symmetric 247
--textmode 254
--throw-keyid 258
--trusted-key 251
--use-embedded-filename 257
--utf8-strings 255
--verbose 253
--verify 248
--verify-files 248
--version 252
--warranty 252
--with-colons 260
--with-fingerprint 260
--with-key-data 260
--yes 254
@@define 213, 224
@@else 213
@@endif 213
@@ifdef Variable 213
@@ifhost hostname 213
@@ifndef Variable 213
@@ifnhost hostname 213
@@include 213
@@undef 213
|| 213
Numerics
13. Oketett 141
A
Academic-Source-Release 205
Access timestamp 209
Ack 21, 25
ACK-Scan 152
ACL 462, 467
Actions Log 329
Activity mode 80
Add User 118
addkey 242
adduid 242
Stichwortverzeichnis
AFS 146, 288
AFSTokenPassing 266, 286
Alarmsystem 158
Alert_fast 38
Alert_full 38
Alert_smb 39
Alert_syslog 37
Alert_unisock 39
Algorithmus 210, 231
AllowGroups 266
AllowTcpForwarding 266
AllowUsers 266
Alternative Datenbank 223
Alternative Konfigurationsdatei 224
always_set_home 312
Anzeigefilter 70
Apache Webserver 368
Appletalk 146
APSfilter 487
Archivbit 445
ask 290
ASR 205, 211
Attack-Signature-Scanner 205
Ausführungsmodi 209
Auswahlmasken 212, 216
authenticate 312
Authentication 339
Authentifizierungsoptionen 339
Authentifizierungspaar 260
B
badpass_message 315
Banner 266
BatchMode 286
Befehl ausführen 358
Benutzbarkeit 149
Benutzerzugriff regeln 360
Beweissicherung 206
Binär zu dezimal 141
Binärwerte 141
Bind 387, 390
BOOTP 401, 402, 403
Bootpartition 481
Bootup 351
Bootup Configuration 479
Brute-Force 339
Bufferoverflow 188
Byte count 59
Sandini Bib
Stichwortverzeichnis
C
C-Shell 127
CA 344
CAP_CHOWN 11
CAP_DAC_READ_SEARCH 11
CAP_DEC_OVERRIDE 11
CAP_FOWNER 11
CAP_FSETID 11
CAP_KILL 11
CAP_SETGID 11
Capabilities 10
CarriageReturn 189
cd 302
CD Burner 479
CERT 40
Certificate Authority 344
CGI 325, 373, 384, 386
CGI-Angriffe 14
CGI-Dateien 176
ChallengeResponseAuthentication 267, 290
Change Passwords 352
check 242
CheckHostIP 286
CheckMail 267
Checksumme 52
chgrp 302
Chiffren 262
chmod 302
chown 302
Chroot 420, 427
Cipher 267, 286
Classtype 21
classtype 29
ClientAliveCountMax 267
ClientAliveInterval 267
Cluster 488
Heartbeat-Monitor 489
Users and Groups 489
Cluster Users and Groups 489
Code Bits 139
Color 79
Command Shell 494
Compression 286
CompressionLevel 287
ConnectionAttempts 287
Content 21, 24
Content_list 21
Copyright 192
cpio 496
crack 202
cracklib 202
crap() 188
503
CRC 492
CRC-16 211
CRC-32 211
Cronjobs 326, 358, 360
CSV 44
Custom Commands 496
CWR 141
D
Data Link Header 68
Data Rcvd 97
Data Sent 103
Database 43
Datei entschlüsseln 244
Dateien verschlüsseln 243
Dateiformat 176
Dateimodus 145
Datenaustausch 261
Datenübertragung 51
Datenzone 209
DDP 146
Debugmodus 264
DECNET 128
Defrag 33
delkey 242
delsig 242
deluid 242
Denial-of-Service 153
DenyGroups 267
DenyUser 267
Depth 21
depth 24
Detailed Interface Statistics 65
DHCP Server 400
diff 238, 244
disable 242
Disk Quotas 354
DISPLAY 291
display() 171
Displayfilter 52
Displaynummer 273
DNS 313, 466
DNS Spoofing 286
Documentation 362
DoS 153
Druckerwarteschlangen 326
Dsize 21
dsize 23
dump_ip_packet() 179
Durchschnittliche Bandbreite 107
–Dvar 224
Sandini Bib
504
E
EBNF 308
ECE 141
Echtheitsbestätigung 429
Edit Categories 341
editor 316
egrep() 187
Empfänger 243
enable 242
ENV 276, 280, 314
env_check 317
env_delete 318
env_editor 313
env_keep 318
env_reset 314
ereg() 186
Erreichbarkeit 50
Error-Code 382
Erscheinungbild 342
Escape Character 281
EscapeChar 287
ESP/AH 122
Eugene Spafford 205
exempt_group 317
Exit 302
expire 242
Exportmöglichkeiten 238
EXT2 208
Extended Backus Naur Form 308
F
FallBackToRsh 287
FDDI 125
Fehlersuche 179
Fetchmail 403, 404
File Descriptor 224
File Manager 497
Filesystem Integrity Checker 205
Filesystems 354
Fingerabdruck 240
Firewall 231, 334
Firewallregeln auslesen 152
Flags 21, 25
Flow 86
For-Schleife 170
forge_icmp_packet() 182
forge_igmp_packet() 183
forge_ip_packet() 178
forge_tcp_packet() 180
forge_udp_packet() 181
ForwardArgent 287
Stichwortverzeichnis
Forwardingtool 273
ForwardX11 287
fpr 242
FQDN 464
fqdn 313
Frag2 33
Fragbits 21, 23
FTP 261, 476
FTP-Bounce-Attack 153
FTP-Meldungen 472
ftp_get_pasv_port() 175
ftp_log_in() 175
G
GatewayPorts 268, 287
Gateways 51
Gene Kim 205
General Interface Statistics 64
Gerätetreibernummer 210
Gericht 206
Gespiegelt 481
get 302
get_host_ip() 177
get_host_name() 177
get_host_open_port() 177
get_icmp_element() 183
get_igmp_element() 183
get_ip_element() 179
get_port_state() 177, 190
get_tcp_element() 181
get_udp_elements() 182
getrpcport() 177
Globale Konfiguration (ProFTPD) 418
GlobalKnownHostsFile 287
GlobalKnownHostsFile2 287
GNUPGP 233
GPG 231, 232, 234, 241
Aufruf 247
Befehle 241, 247
Benutzer-ID 236
Datei entschlüsseln 244
Dateien verschlüsseln 243
Installation 232
Optionen 252
Optionsdatei 252
Schlüsselpaar erzeugen 234
Signatur prüfen 246
Signieren 242, 244
Verschlüsseln und Signieren 246
Sandini Bib
Stichwortverzeichnis
GPGME 231
Grenzwerte 370
grep 155
Gruppenbeschränkung 267
H
Handshake 139
Hardlinks 209, 212
Hardware 479
Bootup Configuration 479
CD Burner 479
Network Configuration 481
Partitions on Local Disks 485
Printer Administration 486
RAID 481
System Time 488
Hashed 231
Haval 211
Heartbeat-Monitor 489
HELO 414
Help 302
help 242
Hiddenbit 445
Hilfesystem 326
Hintergrund 282
Hochverfügbarkeitssystem 489
HOME 291
Hops 51
Host 286
Hostaliase 313
HostbasedAuthentication 268, 287
HostKey 262, 263, 268
HostKeyAlgorithms 288
HostKeyAlias 288
HostName 288
Hostschlüssel 263, 278, 286, 290, 295
HTTP Decode 32
I
ICMP 62
ICMP destination unreachable 151
ICMP port-unreachable 151
icmp_id 26
Icmp_ip 21
Icmp_seq 21
icmp_seq 26
Icode 21
icode 26
Id 21
id 22
IdentityFile 288
505
IDS
hostbasierend 1
LIDS 1
ignore 223
ignore_dot 311
IgnoreRhosts 268
IgnoreUserKnownHosts 268
Includes 168
Index Page Options 337
inetd 154, 265
Initialisierung 224
Initprozesse 360
Inkonsistenz 217
Inkrement 170
Inodenummer 209
insults 313, 315
Integrität 205
Integritätstest 216, 217, 220, 226
Intrusion Detection Systems 1
IP Access Control 330
IP Traffic-Monitor
Counts 58
IP-Protocol-Scan 152
IP-Protos 116
Ip_proto 22
ip_proto 31
Ipoption 21
IPTraf 52
Anzeigefilter 70
Basics 55
Counts 55
Farbcode 61
Filterdefinition 73
Funktionsumfang 52
Hintergrund 82
Host-Statistiken 81
Installation 53
Managementsystem 70
Netzwerkinterfaces 57
Protokollarten 76
Protokolle 53
Schnittstellen 53
Sortieren 60
TCP-Einträge 67
USR1 79
is_cgi_installed() 176
ISO-Datagramm 132
Itype 21, 26
Sandini Bib
506
J
Jabber 406
Jabber IM Server 406
john the ripper 202
K
KDC 269
KeepAlive 268, 288
Keepalive 267, 269, 288, 437
Kerberos 269, 288
KerberosAuthentication 269, 288
KerberosOrLocalPassword 269
KerberosTgtPassing 269, 288
KerberosTicketCleanup 269
Key 242
KeyRegenerationInterval 269
keyring 251
Klone 334
Kompressionslevel 254
Konfigurationsaufwand 206
L
LAN Station Statistics 68
LAN Statistik 52
Language 336
Last Line of Defense 1
Lauschangriff 121
lcd 302
LDAP 422
lecture 312
LFS 12
libpcap 15
LIDS 1
Append Only 3
Capabilities 10
Dateien 2
Dateisysteme 2
deaktivieren 12
Exception 3
Filesystem 1
Inodes 2
Installation 3
Interaktion 2
Kernel konfigurieren 5
Kerneloptionen 5
Konfiguration 7
lidsadm 7
Passwort 12
Protection Mounting 3
Read Only 3
System anpassen 12
Worst Case 13
Stichwortverzeichnis
LIDS Free Session 12
LIDS-Passwort 5
lidsadm
Befehlsübersicht 7
Lilo 13
Linear 481
list 242
ListenAddress 269
Listkommandos 260
listpw 317
lls 302
lmkdir 303
ln 303
LocalForward 288
Log Null 46
log_host 312
Log_tcpdump 39
log_year 312
logfile 316
Logging 79, 333
Loginberechtigung 266
LoginGraceTime 269
LogLevel 270, 289
loglinelen 314
LOGNAME 291
Logs 363
Logto 21, 22
long_otp_prompt 311
loosedir 223
Lpwd 303
ls 303
lsign 242
lumask 303
M
Mac-Adresse 68
MACs 270, 289
MAIL 291
mail_always 311
mail_badpass 311
mail_no_host 311
mail_no_perms 312
mail_no_user 311
mailerflags 316
mailerpath 316
mailsub 315
mailto 316
Mantra 236, 242
manuelle Überprüfung 216
Masterzone 387, 389, 396, 397, 398, 399
MaxStartups 270
MD2 211
Sandini Bib
Stichwortverzeichnis
MD4 211
MD5 205, 210, 226, 492
MD5Sum 230
Aufruf 230
Optionen 230
MIB 122
Minfrag 32
mkdir 303
Msg 21
msg 22
MTU 66
Multicaststatistiken 106
Mustervergleiche 186, 187
MySQL Database Server 406
N
Nachrichtenverschlüsselung 205
Namesauflösung 163
NASL 161, 166
Nasl
Operatoren 171
Skriptfamilie 192
Skriptkategorie 192
NBP 147
Nessus 161
Attack Scripting Language 166
Authentication Method 163
Benutzer anlegen 163
Konfiguration 165
Konfigurationsdatei 165
rule set 164
Nessus-Server 163
NETBIOS 39
netgroups 280
Network Configuration 481
Network Intrusion Detection System 13
Netzwerkplan 50
Netzwerkscanner 149
Netzwerkschnittstellen 64
Netzwerktool 49
Netzwerküberwachungssystem 158
Neuen CronJob erstellen 359
NewLine 189
NFS 326, 354
NFS Exports 354
NFS-Verzeichnisse 354
NIDS 13
NIS Client 356
NIS-Server 356
NMap 84, 149
Optionen 153
507
Nocase 21
nocase 25
Non Anonymous Funktion 168
NOPASSWD 319
NTop 83
DBPATH 85
Domain 99
Filterregeln 83
Format 86
HTTPS 85
interaktiv 83
Netzwerkschnittstellen 91
Optionen 83
Zusatzprogramme 89
Null-Scan 151
NumberOfPasswordPrompts 289
O
Öffentlicher Schlüssel 231
Offset 21
offset 24
open_sock_tcp() 175
open_sock_udp() 173, 174
OpenSSH 260
Installation 261
Operating System 336
Operatoren 171, 180, 185
OPIE 311
OS-Detection 149
OSPF-Protokoll 63
Others 492
Command Shell 494
Custom Commands 496
File Manager 497
Perl Modules 497
SSH/Telnet Login 497
Status 499
Outgoing Domains 456
Output-Module 37
Ownership 272
Ownertrust 242, 250, 252
P
Packet count 59
Paket Matching 121
Paketdatenbank 120
Paketdurchsatz 101
Paketgröße 59
Paketlogger 13
Paketsniffer 13
Paketverfolgung 47
Sandini Bib
508
PAM-Authentication 356
PAMAuthenticationViaKbdInt 270
Parität 481
Partitions on Local Disks 485
passprompt 315
PASSWD 319
passwd 242
passwd_timeout 315
passwd_tries 314
PasswordAuthentication 271, 289
Passwortänderung 364, 365
PASV 475
path_info 312
pcap 169
pcap_next() 180, 184
Performance 149, 210
Performanceverlust 235
Perl Modules 497
PermitEmptyPasswords 271
PermitRootLogin 271
PGP 231
PidFile 271
Ping-Scanning 151
Pingdurchlauf 151
Port 271, 289
Port und Adressen 331
Portscan Detector 33
Portscan Ignorehosts 33
Postfix Configuration 407
PPP 326, 406
pref 242
PreferredAuthentications 289
preprocess 227
Preprocessor 32, 213
Preprocessor-Syntax 213
preserve_groups 313
Primitives 125
Printer Administration 486
PrintLastLog 271
PrintMotd 271
Priority 22
ProFTPD Server 418
promiscuous mode 79
Protocol 271, 289
Protokolllistenspezifikation 85
Protokollschichten 130
Providertest 49
Proxy 334, 469
Proxy Server 334
ProxyCommand 289
Prozesse ordnen 358
Stichwortverzeichnis
Prozesse suchen 358
Prüfsumme 179
pty 276, 281
PubkeyAuthentication 272, 290
Public Key 231, 275
put 303
Pwd 303
Q
Quell Mac-Adresse 59
Quelladresse 59
Quellport 59
quit 241, 303
Quotasystem 354
R
RAID 481
Raw Sockets 150
RAW-Paket 121, 178
raw_string() 189
rcp 26, 299
React 21, 28
Reassign Modules 340
recv() 174
recv_line() 174
Redundant 481
Reference 21, 28
Referenz 247, 278
Referenzdatenbank 216
Regex 22, 32
Reinitialisierung 217
remote procedure call 152
Remoteadministration 325
RemoteForward 290
rename 303
Reply-Pakete 151
requiretty 313
Resp 21
resp 27
return() 173
Rev 21
Reverse Ident Scanning 154
ReverseMappingCheck 272
revkey 242
revsig 242
Rhostsauthentication 290
RhostsRSAAuthentication 272
rm 303
rmdir 303
root_sudo 312
rootpw 313
Sandini Bib
Stichwortverzeichnis
RPC 405
Rpc 21
RPC Call 145
RPC-Scan 152
RSAAuthentication 272, 290
RST 150
Rüstungsgut 232
runas_default 315
RUNAS_SPEC 319
runaspw 313
Running Processes 357
S
Samba 326
Samba Windows File Sharing 435
Sameip 22
sameip 31
sanatize 41
save 241
Scandurchläufe 158, 159, 219, 295
Scanmöglichkeiten 149
Scheduled Commands 358
Scheduled CronJobs 359
Schleifenkörper 170
Schlüssel-ID 251
Schlüsseländerung 235
Schlüsselbund 239, 240, 251
Schlüsselgröße 265
Schlüssellänge 235
Schlüsselpaar 234, 237
Schlüsselserver 238, 251
Schlüsselwörter 266
scp 299
Securityscanner 149
Selection Masks 205
Selection masks 208
send_packet() 180, 183
Sendmail Configuration 450
Seq 21, 25
Server 367
Apache Webserver 368
Server-Authentifizierung 282
ServerKeyBits 272
Serverschlüssel 265
Session 21, 26
Session Key 263
set-filename 256
set-policy-url 256
set_home 312
set_icmp_packet() 182
set_igmp_element() 183
509
Set_ip_elements() 179
set_logname 313
set_udp_elements() 182
SHA 211
SHA1 492
shell_noargs 312
showpref 242
Shutdown 351
Sicherheitsbarrieren 260
Sicherheitskopie 205
Sid 21, 29
siggen 228
sign 242
Signatur prüfen 246
Signaturbestimmung 226
Signaturen 242
Signieren 242, 244
Sitzungsschlüssel 263
Skript Kiddie 155
Skriptfamilie 192
Skriptkategorie 192
Slavezone 387, 397, 399
SMB 14, 15
SMI 122
SMTP VRFY 414
SNAP 132
Snefru 211
snefru 226
Snifferattacken 261
SNMP Trap 45
Snort 13
Alert_fast 38
Alert_full 38
Alert_smb 39
Alert_syslog 37
Alert_unisock 39
Beispiele 18
CSV 44
Database 43
Defrag 33
Detection-Routine 14
Frag2 33
Funktionsweise 13
High-Level_Details 45
HTTP Decode 32
Installation 14
Klassennamen 29
Log Null 46
Log_tcpdump 39
Loggingdatei 38
Minfrag 32
Sandini Bib
510
Optionen 15, 16
Output-Module 37
Portscan 33
Portscan Detector 33
Preprocessors 32
Regeln 18
Regeltypen 46
SNMP Trap 45
snort.conf 35
Stream 34
Stream4 34
Unified 45
XML 39
Zusatzlibs 15
Snortregel
Adressen und Ports 20
Bestandteile 18
Entwerfen 18
Formatierung 18
Header 19
Optionen 20
Protokoll 20
Socket 173, 175, 406
Socketfunktionen 173
Sockets 158, 294
Software Packages 360
SOHO 13
Source MAC addrs 80
Sourceforge 207
Spoofingschutz 272
Squid 467
Squid Proxy Server 460
SSH
Alle Dateien 278
Authentifizierungsagent 292
Client 281
Schlüssel generieren 296
Umgebungsvariablen 291
Wichtige Dateien 274
SSH Server 429
SSH-ADD 294
ssh-add 293, 295
ssh-agent 261, 292
SSH-Client
Aufruf 283
Konfigurationsdatei 285
Optionen 283
Sitzung 281
ssh-keygen 296, 298
ssh-keyscan 295
Stichwortverzeichnis
SSH-Server
Konfiguration 264, 266
Konfigurationsdatei 266
Schlüsselwörter 266
SSH/Telnet Login 497
SSH_AUTH_SOCK 292
SSH_CLIENT 292
SSH_ORIGINAL_COMMAND 292
SSH_TTY 292
sshd 175
SSL Tunnels 435
SSL-Verschlüsselung 344
Stateless 22
stateless 32
Statistical Breakdown 66
Packet Sizes 66
TCP and UDP Traffic Statistics 66
Status 499
Statusänderung 209
stay_setuid 314
STDERR 264
Stealth FIN-Scan 150
Stream 34
Stream4 34
StrictHostKeyChecking 290
StrictModes 272
strings 168
Striped 481
strlen() 189
strtoint() 189
Subnet-Matrix 111
Subnet-Verwendung 114
Subsystem 272
SuDo 305, 306
Aliase 309
Optionen 323
Superserver 154, 265
Superuser Do 305
SuSE 435
SWAT 449
symlink 303
syslog 316
syslog_babpri 316
syslog_goodpri 315
SyslogFacility 272
System 351
Bootup 351
Change Passwords 352
Disk Quotas 354
Documentation 362
Sandini Bib
Stichwortverzeichnis
Filesystems 354
Logs 363
NFS Exports 354
NIS Client 356
NIS-Server 356
PAM-Authentication 356
Running Processes 357
Scheduled Commands 358
Scheduled CronJobs 359
Shutdown 351
Software Packages 360
SysV Init Configuration 360
Users and Groups 363
System Time 488
Systembid 445
systemkritische Dateien 216
Systemzustand 205
SysV Init Configuration 360
T
Tag 22, 30
targetpw 313
TCP connect()-Scan 150
TCP Flag-Status 59
TCP Header 135
TCP SYN-Scan 150
TCP-Verbindungseintrag 60
TCP-Weiterleitung 282
tcp_ping() 177
TCP_Wrapper 175
Tcpdump 13, 121
Telnet 261
telnet_init() 177
Telnetsitzung 81
Telnetverbindung 177
TGT 269
Themes 342
this_host() 177
Timeout 339
timeout 315
Timeoutwert 160
Timers 80
timestamp_timeout 314
timestampdir 315
toggle 242
Toolbox 161
Tos 21
Traceroute 47
Einsatzmöglichkeiten 49
Funktionsweise 49, 51
Optionen 48
511
Transaktionsanfrage 145
triple-des 283
Tripwire 205
Befehle 217
Tripwireseiten 206
Tripwiresystem 218
Trojanisches Pferd 290
trust 242
Trusted Referers 342
Trusted Users 455
Ttl 21
ttl 22
tto 22
tty 312, 313
tty_tickets 312
tw.config 207
TZ 292
U
UDP Scan 151
uid 242
umask 315
Unified 45
Unix-Domain-Socket 292
Unixdomainsocket 39
Upgrade 337
Uricontent 22, 30
use_loginclass 314
UseLogin 273
UsePrivilegedPort 291
USER 292
User 291
User Interface 334
UserKnownHostsFile 291
UserKnownHostsFile2 291
Usermin 327
Users and Groups 363
UseRsh 291
UTF-8 255, 256
UTMP 265
–Uvar 225
V
Verbindungsversuche 287
Verbose Mode 155
Verbose Modus 228
Verfallsdatum 199, 242
verifypw 317
Verknüpfungsarten 131
Vermittlungsstelle 51
Verschlüsseln und Signieren 246
Sandini Bib
512
Verschlüsselung 224, 231, 243
VFS 2
Virendatenbank 205
Virenscanner 205
Virtuelle Server 377
Virtuelle Server (ProFTPD) 425
visudo 306, 313, 320
Fehlermeldungen 307
Optionen 307
Syntax 307
vpass 202
W
Webmin 325
Actions Log 329
Aktualisieren 338
Authentication 339
Authentifizierung 339
Betriebssystem 336
Certificate Authority 344
Cluster 488
Edit Categories 341
Hardware 479
Index Page Options 337
Indexseite 337
Installation 325
IP Access Control 330
Konfiguration 330
Language 336
Logging 333
Login 327
Module 326, 334
Module aktualisieren 338
Operating System 336
Others 492
Port und Adressen 331
Proxy Server 334
Reassign Modules 340
Server 367
Server Index 345
Sprache 336
Stichwortverzeichnis
SSL-Verschlüsselung 344
Starten 327
Stoppen 327
System 351
Themes 342
Trusted Referers 342
Upgrade 337
User Interface 334
Users 346
Webmin-Module 334
Webmin-Serversystem 330
while-Schleife 169
Widerrufszertifikat 251
Window-Größe 59
Window-Scan 152
WU-FTP Server 471
WU-FTPD 326
X
X11-Weiterleitung 282
X11DisplayOffset 273
X11Forwarding 273
xauth 273, 281, 291
XAuthLocation 273, 291
Xmas Tree-Scan 151
XML 39
XML Format 155
XO 148
Y
YAPS 39
yaps 221
Z
Zahlensystem 55
Zeichenketten 185, 188
Zeichensatz 255
Zertifizierungsauthorität 344
Zufallsscan 156
Zufallswerte 237
Zugriffsbeschränkung 331
Sandini Bib
Copyright
Daten, Texte, Design und Grafiken dieses eBooks, sowie die eventuell angebotenen
eBook-Zusatzdaten sind urheberrechtlich geschützt.
Dieses eBook stellen wir lediglich als Einzelplatz-Lizenz zur Verfügung!
Jede andere Verwendung dieses eBooks oder zugehöriger Materialien und
Informationen, einschliesslich der Reproduktion, der Weitergabe, des Weitervertriebs,
der Platzierung im Internet, in Intranets, in Extranets anderen Websites, der
Veränderung, des Weiterverkaufs und der Veröffentlichung bedarf der schriftlichen
Genehmigung des Verlags.
Bei Fragen zu diesem Thema wenden Sie sich bitte an:
mailto:info@pearson.de
Zusatzdaten
Möglicherweise liegt dem gedruckten Buch eine CD-ROM mit Zusatzdaten bei. Die
Zurverfügungstellung dieser Daten auf der Website ist eine freiwillige Leistung des
Verlags. Der Rechtsweg ist ausgeschlossen.
Hinweis
Dieses und andere eBooks können Sie rund um die Uhr
und legal auf unserer Website
(http://www.informit.de)
herunterladen
Related documents
Download