Anwendungen
Einführung
Verzeichnisse
Telnet, FTP...
HTTP
E-Mail
Sicherheit
Management
Unix & Windows

Hauptmenü
Startseite
Einführung
Daten übertragen
Datennetze
Transport
Info

Themen
Einführung
Netzwerkmanagement-Plattformen
SNMP und die MIB
SNMP und die MIB

SNMP steht für Simple Network Management Protocol und liegt mittlerweile in der dritten Version vor. SNMPv3 unterscheidet sich hierbei durch umfangreiche Sicherheitsmaßnahmen von den Vorgängern. Es gab zwar bereits von Anfang an ein Passwort (den sogenannten "Community String"), getrennt für Abfragen und Änderungen, dieses wurde aber unverschlüsselt über das Netz übertragen und konnte daher sehr leicht abgehört werden. Bei SNMPv3 läuft die gesamte Kommunikation verschlüsselt ab und ist damit sicher vor Angriffen.

Wie bei vielen anderen Protokollen auch (z.B. DNS oder HTTP), basiert das Grundprinzip von SNMP auf Requests, also Anfragen, die die Network Management Station an einen Host sendet und die dieser dann mit einem Reply beantwortet. Alle SNMP-Requests beziehen sich auf ein baumartig strukturiertes Verzeichnis, in dem alle Netzwerkeinstellungen, Protokolle und Statistiken eines Geräts in einer unter dem Namen "MIB-2" (Management Information Base) standardisierten Form abgelegt sind.

Die MIB-2 hat einen für IP-Netzwerke standardisierten Zweig. Es gibt jedoch für jeden Hersteller darüber hinaus noch die Möglichkeit, einen privaten Zweig anzulegen. Dort kann er weitere Daten verfügbar machen und dafür die Struktur frei festlegen. Die Standard-MIB sieht folgendermaßen aus:


Das Bild zeigt, dass es bereits einen weitverzweigten Baum bis zu den eigentlichen Daten der MIB-2 gibt. In fast allen Implementierungen sind alle Zweige bis auf den skizzierten leer. Zudem ist deutlich zu sehen, dass jeder Zweig neben einem Namen auch eine Nummer hat. Jeder Pfad in der MIB wird über diese Nummern beschrieben, indem man einfach alle Nummern auf dem Weg von der Wurzel des Baums bis zum gesuchten Element durch Punkte getrennt hintereinander schreibt. Der Pfad jedes Elements der MIB-2 beginnt also mit 1.3.6.1.2.1, die herstellerspezifischen Einträge im Bereich "Private" mit 1.3.6.1.4.x. Das "x" steht hierbei für eine der bereits über 4000 vergebenen Herstellernummern.

Wenn man den Baum ab dem Eintrag der MIB-2 weiterverfolgt, kommt man zu den für TCP/IP relevanten Bereichen:


Auch ohne die einzelnen Felder im Detail zu erläutern wird klar, welche Fülle an Informationen die MIB-2 bereithält. Allerdings ist kein Hersteller verpflichtet, SNMP überhaupt zu implementieren und wenn, kann er auch nur einen Teil der MIB einbauen. Besonders ärgerlich ist es, wenn der standardisierte Bereich nur sehr wenige Informationen enthält und fast alle fehlenden Daten in leicht abgewandelter Form im privaten Bereich stehen.

In der Grafik sind einige Datenbereiche als mehrere aufeinander liegende Blätter dargestellt. Damit wird gekennzeichnet, dass es sich um Tabellen handelt. Jede Zeile des Datenbereichs ist dann ein Array, der Index wird einfach an den Pfadnamen angehängt. Die Interfacetabelle z.B. hat den Pfad 1.3.6.1.2.1.2, deren erstes Element ist der ifIndex mit dem Pfad 1.3.6.1.2.1.2.1. Dabei handelt es sich aber wiederum um ein Array, dessen Elemente mit 1.3.6.1.2.1.2.1.1, 1.3.6.1.2.1.2.1.2, 1.3.6.1.2.1.2.1.3 etc. angesprochen werden.

Der Zugriff auf die MIB erfolgt wie gesagt über das Protokoll SNMP. Ein SNMP-Paket sieht folgendermaßen aus:


Die möglichen Typen teilen sich auf in SNMP-Requests, die Management Station an einen Host sendet und deren SNMP-Response:

SNMP-Requests:

GetRequest Fordert die Werte der zu den angegebenen Objekt-Ids gehörenden Objekte an.
GetNextRequest Fordert die Werte der auf die angegebenen Objekt-Ids jeweils folgenden Objekte an.
GetBulkRequest Fordert die Werte der zu den angegebenen Objekt-Ids gehörenden Objekte und aller dazugehörenden Unterobjekte an. Damit kann mit einem Befehl z.B. eine ganze Tabelle gelesen werden.
SetRequest Beschreibt die zu den angegebenen Objekt-Ids gehörenden Objekte mit den mitgegebenen Werten.


SNMP-Response:

Antwortpaket zu einem Request. Sieht genauso aus, wie der Request, der zu der Antwort geführt hat, nur der Typ steht auf "Response". Get-Requests werden mit leeren Wert-Feldern gesendet, die zugehörige Response hat die Felder dann gefüllt. Konnte ein Request nicht ausgeführt werden, sind zudem die Fehlernummer und der Fehlerindex gesetzt. Der Fehlerindex gibt an, bei der wievielten der angegebenen Objekt-Ids der Fehler aufgetreten ist.