RFC 1157 - Einfaches Netzwerkverwaltungsprotokoll (A Simple Network Management Protocol, SNMP)
Network Working Group
Request for Comments: 1157
Veraltet: RFC 1098
Autoren:
J. Case (SNMP Research)
M. Fedor (Performance Systems International)
M. Schoffstall (Performance Systems International)
J. Davin (MIT Laboratory for Computer Science)
Veröffentlichungsdatum: Mai 1990
Zusammenfassung (Abstract)
Dieses RFC definiert ein einfaches Protokoll, mit dem Verwaltungsinformationen für ein Netzwerkelement von logisch entfernten Benutzern überprüft oder geändert werden können. Insbesondere bieten diese Dokumente zusammen mit ihren begleitenden Memos, die die Struktur der Verwaltungsinformationen und die Management Information Base beschreiben, eine einfache, praktikable Architektur und ein System zur Verwaltung von TCP/IP-basierten Internets und insbesondere des Internets.
Das Internet Activities Board (IAB) empfiehlt, dass alle IP- und TCP-Implementierungen netzwerkverwaltbar sein sollten. Dies bedeutet die Implementierung der Internet MIB (RFC 1156) und mindestens eines der beiden empfohlenen Verwaltungsprotokolle: SNMP (RFC 1157) oder CMOT (RFC 1095).
Inhaltsverzeichnis (Table of Contents)
- 1. Status dieses Memos
- 2. Einführung
- 3. SNMP-Architektur
- 4. Protokollspezifikation
- 5. Definitionen
- 6. Danksagungen
- 7. Referenzen
- 8. Sicherheitsüberlegungen
- 9. Adressen der Autoren
1. Status dieses Memos
Dies ist ein Internet-Standardprotokoll. Das IAB empfiehlt, dass alle IP- und TCP-Implementierungen netzwerkverwaltbar sein sollten, was die Implementierung von SNMP bedeutet.
2. Einführung
Ziel von SNMP: Bereitstellung eines einfachen Protokolls zur Verwaltung von Netzwerkgeräten im Internet.
Hauptmerkmale:
- 🔍 Überwachung (Monitoring): Abfrage des Gerätestatus und der Statistiken
- ⚙️ Konfiguration: Änderung der Gerätekonfigurationsparameter
- 🔔 Benachrichtigungen: Empfang von Geräteausnahmewarnungen (Traps)
- 📊 Einfachheit: Leicht zu implementieren und bereitzustellen
SNMP-Funktionsweise:
Verwaltungsstation (Manager) Verwaltetes Gerät (Agent)
| |
|------ GetRequest (Abfrage) --------->|
|<----- GetResponse (Antwort) ---------|
| |
|------ SetRequest (Setzen) ---------->|
|<----- GetResponse (Bestätigung) -----|
| |
|<----- Trap (unaufgeforderte Warnung)-|
3. SNMP-Architektur
3.1 Ziele der Architektur
- Einfachheit: Das Protokoll ist einfach und leicht zu implementieren
- Erweiterbarkeit: Unterstützung für das Hinzufügen neuer Verwaltungsobjekte
- Unabhängigkeit: Unabhängig von spezifischen Netzwerkarchitekturen
- Minimale Auswirkungen: Minimale Auswirkungen auf die Geräteleistung
3.2 Elemente der Architektur
3.2.1 Umfang der Verwaltungsinformationen
Von SNMP verwaltete Informationen umfassen:
- Schnittstellenstatistiken (Verkehr, Fehler usw.)
- Routingtabellen
- TCP/UDP-Verbindungen
- Systeminformationen
3.2.2 Darstellung der Verwaltungsinformationen
Verwendet die Darstellung der Management Information Base (MIB):
Beispiel für ein MIB-Objekt:
Objektidentifikator (OID): 1.3.6.1.2.1.1.1.0
Name: sysDescr (Systembeschreibung)
Syntax: OCTET STRING
Zugriff: read-only
Wert: "Cisco IOS Software, Version 15.2"
3.2.3 Unterstützte Operationen
| Operation | Beschreibung | Richtung |
|---|---|---|
| GetRequest | Anfrage zum Abrufen eines Objektwerts | Manager → Agent |
| GetNextRequest | Anfrage zum Abrufen des nächsten Objektwerts (zum Durchlaufen) | Manager → Agent |
| SetRequest | Anfrage zum Setzen eines Objektwerts | Manager → Agent |
| GetResponse | Antwort auf Get/Set-Anfrage | Agent → Manager |
| Trap | Asynchrone Ereignisbenachrichtigung | Agent → Manager |
3.2.4 Form und Bedeutung von Protokollaustauschen
SNMP verwendet das UDP-Protokoll:
- Verwaltungsstation-Port: 162 (Empfang von Traps)
- Agent-Port: 161 (Empfang von Get/Set)
3.2.5 Definition administrativer Beziehungen
SNMP verwendet einen Community-Namen (Community Name) für einfache Authentifizierung:
Community-Name: "public" (standardmäßig nur lesbar)
Community-Name: "private" (standardmäßig lesen-schreiben)
3.2.6 Identifizierung verwalteter Objekte
Objektinstanz-Identifikation:
Skalare Objekte:
sysDescr.0 (.0 für Instanz hinzufügen)
Tabellenobjekte:
ifDescr.1 (Beschreibung der Schnittstelle 1)
ifDescr.2 (Beschreibung der Schnittstelle 2)
4. Protokollspezifikation
4.1 Verfahrenselemente
SNMP-Nachrichtenformat
SNMP-Nachricht ::= SEQUENCE {
version INTEGER, -- SNMP-Version (0 = SNMPv1)
community OCTET STRING, -- Community-Name
data PDUs -- Protokolldateneinheit
}
4.1.1 Gemeinsame Konstrukte
Von allen PDUs gemeinsam genutzte Felder:
- request-id: Anforderungsidentifikator
- error-status: Fehlerstatus
- error-index: Fehlerindex
- variable-bindings: Variablenbindungsliste
4.1.2 GetRequest-PDU
Zweck: Werte eines oder mehrerer Verwaltungsobjekte abrufen.
Beispiel:
GetRequest {
request-id: 1234,
error-status: 0,
error-index: 0,
variable-bindings: [
{name: 1.3.6.1.2.1.1.1.0, value: NULL}, -- sysDescr
{name: 1.3.6.1.2.1.1.3.0, value: NULL} -- sysUpTime
]
}
4.1.3 GetNextRequest-PDU
Zweck: Den lexikografischen Nachfolger jedes Variablennamens in der Variablenbindungsliste abrufen.
Beispiel für Tabellendurchlauf:
Schritt 1: GetNextRequest(ifDescr)
Antwort: ifDescr.1 = "eth0"
Schritt 2: GetNextRequest(ifDescr.1)
Antwort: ifDescr.2 = "eth1"
Schritt 3: GetNextRequest(ifDescr.2)
Antwort: ifType.1 = 6 (nächstes Objekt)
4.1.4 GetResponse-PDU
Zweck: Antwort auf GetRequest, GetNextRequest oder SetRequest.
Fehlerstatus:
| Wert | Name | Beschreibung |
|---|---|---|
| 0 | noError | Erfolg |
| 1 | tooBig | Antwort zu groß |
| 2 | noSuchName | Objekt existiert nicht |
| 3 | badValue | Ungültiger Wert |
| 4 | readOnly | Objekt ist nur lesbar |
| 5 | genErr | Allgemeiner Fehler |
4.1.5 SetRequest-PDU
Zweck: Werte eines oder mehrerer Verwaltungsobjekte ändern.
Beispiel:
SetRequest {
request-id: 1235,
error-status: 0,
error-index: 0,
variable-bindings: [
{name: 1.3.6.1.2.1.1.6.0, value: "New Location"} -- sysLocation
]
}
4.1.6 Trap-PDU
Zweck: Der Agent sendet asynchrone Benachrichtigungen an den Manager.
Trap-Typen:
| Trap | Beschreibung |
|---|---|
| coldStart | Gerät-Kaltstart |
| warmStart | Gerät-Warmstart |
| linkDown | Verbindung unterbrochen |
| linkUp | Verbindung wiederhergestellt |
| authenticationFailure | Authentifizierungsfehler |
| egpNeighborLoss | EGP-Nachbar verloren |
| enterpriseSpecific | Herstellerspezifisches Ereignis |
Trap-Nachrichtenformat:
Trap-PDU ::= SEQUENCE {
enterprise OBJECT IDENTIFIER, -- Unternehmens-OID
agent-addr NetworkAddress, -- Agent-Adresse
generic-trap INTEGER, -- Generischer Trap-Typ
specific-trap INTEGER, -- Spezifischer Trap-Code
time-stamp TimeTicks, -- Zeitstempel
variable-bindings VarBindList -- Variablenbindungen
}
5. Definitionen
ASN.1-Definitionen (vereinfachte Version):
RFC1157-SNMP DEFINITIONS ::= BEGIN
IMPORTS
ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks
FROM RFC1155-SMI;
-- PDU-Typen
PDUs ::= CHOICE {
get-request GetRequest-PDU,
get-next-request GetNextRequest-PDU,
get-response GetResponse-PDU,
set-request SetRequest-PDU,
trap Trap-PDU
}
-- GetRequest, GetNextRequest, SetRequest teilen diese Struktur
GetRequest-PDU ::= [0] IMPLICIT PDU
GetNextRequest-PDU ::= [1] IMPLICIT PDU
SetRequest-PDU ::= [3] IMPLICIT PDU
PDU ::= SEQUENCE {
request-id INTEGER,
error-status INTEGER,
error-index INTEGER,
variable-bindings VarBindList
}
GetResponse-PDU ::= [2] IMPLICIT PDU
Trap-PDU ::= [4] IMPLICIT SEQUENCE {
enterprise OBJECT IDENTIFIER,
agent-addr NetworkAddress,
generic-trap INTEGER,
specific-trap INTEGER,
time-stamp TimeTicks,
variable-bindings VarBindList
}
VarBindList ::= SEQUENCE OF VarBind
VarBind ::= SEQUENCE {
name ObjectName,
value ObjectSyntax
}
END
6. Danksagungen
Die Entwicklung von SNMP profitierte von der breiten Teilnahme und den Beiträgen der Internet-Community.
7. Referenzen
- [RFC1155] - Structure and Identification of Management Information for TCP/IP-based Internets
- [RFC1156] - Management Information Base for Network Management of TCP/IP-based internets
- [RFC1098] - A Simple Network Management Protocol (durch dieses RFC veraltet)
8. Sicherheitsüberlegungen
Sicherheitsbeschränkungen von SNMPv1:
⚠️ Schwache Authentifizierung: Community-Namen werden im Klartext übertragen
⚠️ Keine Verschlüsselung: Alle Daten werden im Klartext übertragen
⚠️ Kein Integritätsschutz: Nachrichten können manipuliert werden
Abhilfemaßnahmen:
- Starke Community-Namen verwenden
- SNMP-Zugriff nach IP-Adresse einschränken
- Nur-Lese-Community-Namen für Überwachung verwenden
- Firewalls zum Schutz von SNMP-Ports einsetzen
Verbesserungen in nachfolgenden Versionen:
- SNMPv2c: Erweiterte Protokolloperationen
- SNMPv3: Hinzufügung von Authentifizierung, Verschlüsselung und Zugriffskontrolle (RFC 3414)
9. Adressen der Autoren
(Das Originaldokument enthält Kontaktinformationen der Autoren)
SNMP ist das grundlegende Protokoll für das Netzwerkmanagement. Obwohl SNMPv1 schwache Sicherheit aufweist, wird es aufgrund seiner Einfachheit immer noch weithin verwendet.
Gängige SNMP-Tools:
# Systembeschreibung abfragen
snmpget -v1 -c public 192.168.1.1 sysDescr.0
# Schnittstellentabelle durchlaufen
snmpwalk -v1 -c public 192.168.1.1 ifTable
# Systemstandort setzen
snmpset -v1 -c private 192.168.1.1 sysLocation.0 s "Beijing"
Gängige OIDs:
1.3.6.1.2.1.1.1.0- sysDescr (Systembeschreibung)1.3.6.1.2.1.1.3.0- sysUpTime (System-Laufzeit)1.3.6.1.2.1.2.2.1.2- ifDescr (Schnittstellenbeschreibung)1.3.6.1.2.1.2.2.1.10- ifInOctets (Eingangs-Oktette der Schnittstelle)
Verwandte RFCs:
- RFC 1155 - SMI (Struktur der Verwaltungsinformationen)
- RFC 1156 - MIB-I
- RFC 1213 - MIB-II
- RFC 3414 - SNMPv3-Sicherheit