
|
|
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.
|
|