SNMP Grundlagen

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Das Simple Network Management Protocol (SNMP) ist ein Netzwerkprotokoll zur Überwachung und Steuerung von Netzwerkgeräten wie Router, Switches, Firewalls, Drucker oder NAS Appliances. SNMP wurde schrittweise ausgebaut und unterstützt in der Version SNMP v3 neben einer Authentifizierung auch eine Verschlüsselung der übertragenen Daten. In diesem Artikel finden Sie Grundlageninformationen zu SNMP und zu den Unterschieden zwischen den verschiedenen SNMP-Versionen.

Grundlegende Informationen

Der GET-REQUEST z.B. durch snmpget wird vom Manager aus angestoßen, es folgt darauf vom Agent ein GET-RESPONSE. Ein Trap wird automatisch vom Agent aus versandt.

Das SNMP Protokoll ist im OSI-Schichtenmodell in der Anwendungsschicht angesiedelt.[1] [2]

Verwendete Ports

Die Verbindung erfolgt verbindungslos per UDP Ports 161 und 162.[3]

  • UDP 161 zur Abfrage der Agenten
  • UDP 162 für Traps, automatische Meldungen, werden bei unnormalem Verhalten von Agenten an Manager gesendet.[4]

Agent

Die Agenten-Komponente von SNMP läuft üblicherweise auf dem überwachten Serversystem, Appliance oder Netzwerkgerät. Sie können Systemzustände erfassen, Einstellungen vornehmen und auch Aktionen auslösen. Einer dieser Agenten ist der snmpd, ein Daemon der auf Linux-basierten Betriebssystemen die Agentenkomponente abbildet.[5]

Manager

Auf den Client-Servern oder auch auf Monitoring-Servern wird nun die zweite der beiden Komponenten eingesetzt. Sie dient zur Abfrage der Daten, oder aber auch um Aktionen ausführen zu können. Meist ist jedoch nur eine eingeschränkte Konfiguration der Agenten auf vielen Appliances vorhanden, es können meist nur Daten abgefragt werden. Bei Linux-basierten Betriebssystemen bilden die Applikationen des NET-SNMP Paketes diese Manager-Rolle aus. Es kann bequem per apt installiert werden, siehe Abschnitt [SNMP einsetzen].

Generell können Agenten mit folgenden Datenpaketen administriert werden:

Datenpaket Beschreibung Beispieltool
GET-REQUEST Wird zum Anfordern eines spezifischen Datensatzes verwendet, eine eindeutige OID muss angegeben werden. snmpget[6]
GETNEXT-REQUEST Durchläuft auch die nachfolgenden Datensätze, z.B. Tabellen snmpgetnext[7]
GETBULK Angegebene Anzahl an Datensätze auf einmal abrufen, ähnlich zu mehreren GETNEXT-REQUESTS snmpwalk[8]
SET-REQUEST Verändern von einem oder mehreren Datensätzen snmpset[9]
GET-RESPONSE Empfängt die Antwort auf eines der vorab gesendeten Pakete snmpstatus[10]
TRAP Unaufgeforderte Nachricht, bei Auftritt eines Ereignisses, vom Agenten an einen Manager snmptrapd[11], dieser Daemon läuft auf dem Manager-System, z.B. Monitoringserver und lauscht am Port 162 UDP.

SNMP Versionen

Die nachfolgende Tabelle vergleicht die Parameter der drei aktuell gebräuchlichen SNMP Versionen, die zur Abfrage von SNMP-Daten mit snmpget und snmpwalk erforderlich sind. Im Monitoringbereich wird vor allem ein Nagios-Plugin "check_snmp" eingesetzt, zum Beispiel basieren unsere eigenen TKmon Servicechecks für Synology NAS auf diesem Plugin. Bei diesem Plugin unterscheiden sich die Parameter teilweise, z.B. ist hier der Parameter -o vor der Angabe der OID erforderlich.

SNMP v1 SNMP v2c SNMP v3
Authentifizierung Community-String Username, Passwort
Verschlüsselung - Pre-Shared-Key

SNMP v2

SNMP v2 exisiterte in verschiedenen Ausprägungen, die heute noch existente Version ist v2c, die Erweiterung c bedeutet community-based SNMP. Sie ist sicherheitstechnisch auf dem Stand von SNMP v1 und wurde um zusätzliche Funktionen aus der nicht mehr verwendeten v2p, party-based SNMP, erweitert. Tabellen werden somit nicht wie bei v2 per GetNext sondern per GetBulk abgefragt. Sie ermöglicht eine Kommunikation zwischen einzelnen Managern. Die Version v2c hat sich im Gegensatz zu den bereits eingestellten Ausprägungen v2p und v2u (user-based SNMP) durchgesetzt und erfährt die breiteste Unterstützung im Markt.

SNMP v3

Sicherheitsfunktionen waren bis einschließlich SNMP v2 nicht ausreichend vorhanden, deshalb wurde SNMP v3 spezifiziert. Es erhöht durch Sicherheitsmerkmale wie Usernamen und Passwort, sowie einer Übertragungsverschlüsselung der Daten die Sicherheit enorm. Die Komplexität erhöht sich im gleichen Maße natürlich ebenso, es stehen im Vergleich zu v2c deutlich mehr Konfigurationsmöglichkeiten zur Verfügung. Es wird das User Based Security Module (USM) angewandt, als derzeit einziges von SNMP v3 unterstütztes.[12] Das USM ist in der RFC 2574 definiert.[13]

Wichtiger Hinweis: Wenn das zu überwachende Netzwerkgerät v3 unterstützt, sollte v3 auf jeden Fall v2 vorgezogen werden. Ebenso sollte es mit der größtmöglichen Sicherheitsstufe erfolgen, z.B. es sollte nicht auf eine Übertragungsverschlüsselung verzichtet werden, wenn dies unterstützt wird. Geräte von Synology z.B unterstützen derzeit nur die Methode --AuthNoPriv. Dies bedeutet, dass eine verschlüsselte Passwort-Authentifizierung erfolgt, die Übertragung der Daten aber im Klartext.[14] [15]

Die nachfolgende Tabelle zeigt die Konfigurationsmöglichkeiten von SNMP v3 und die dafür erforderlichen Parameter zur Abfrage mit snmpwalk auf.

Authentifizierungs- und Verschlüsselungsarten Beschreibung Erforderliche Parameter für snmpwalk
noAuthNoPriv Keine Authentifizierung, keine Übertragungsverschlüsselung der Daten, Angabe des Usernamen -l noAuthNoPriv -u <Username>
authNoPriv Authentifizierung, keine Übertragungsverschlüsselung der Daten, Abfrage des Usernamen und Passwortes -l authNoPriv -u <Username> -A <Passwort> -a <MD5|SHA>
authPriv Authentifizierung und Übertragungsverschlüsselung der Daten, Abfrage Username, Passwort und Passwort der Verschlüsselung -l authPriv -u <Username> -A <Passwort> -a <MD5|SHA> -X <Pre-Shared-Key> -x <DES|AES>

SNMP einsetzen

Die SNMP Funktion lässt sich in wenigen Schritten aktivieren. Nachfolgende Beispiele zeigen die Konfiguration anhand eines Synology NAS und Ubuntu.

Netzwerk-Appliances

Bei den gängigen Appliances ist die SNMP Funktion meist bequem per Webinterface konfigurierbar. Sie finden die Konfiguration bei Synology NAS Geräten in der Systemsteuerung im Reiter SNMP des Menüpunktes Terminal & SNMP.

Installation unter Ubuntu

Bei Linux-basierten Betriebssystemen, wie Ubuntu, kann die SNMP Funktion bequem per Paketverwaltung nachgerüstet werden.

Installation des Agenten

Die Installation des Agenten am zu überwachenden Server erfolgt per apt:

sudo apt install snmpd

Installation des Managers

Ebenso einfach ist die Installation der Tools auf Managerseite, z.B. Linux-Notebook oder Monitoring-Server:

sudo apt install snmp

Dieses Paket enthält unter anderem die Tools snmpget und snmpwalk.

Beispielkonfiguration eines snmpd Agenten

Am typischen Beispiel einer Netzwerkappliance, in diesem Fall ein Synology NAS, wird nun die Konfiguration eines snmpd Agenten betrachtet. Verbinden Sie sich dafür per SSH zum Zielhost.

cat /etc/snmp/snmpd.conf
rocommunity syno localhost
rocommunity <Klartextpasswort> //Lesender Zugriff per Community-Passwort, Zugriff per SNMP v2c, Passwort unverschlüsselt abgelegt
rocommunity6 <Klartextpasswort>
createuser thomas-krenn MD5 relation //v3-User
rouser thomas-krenn //"rouser" bedeutet, dass nur ein Lesezugriff erlaubt wird.

OIDs

Die OIDs, Object Identifer, sind weltweit eindeutige Bezeichner für Objekte.[16] Ein OID stellt einen Knoten in einem hierarchischen Namensraum dar. Jeder Knoten ist eindeutig durch eine Folge von Nummern gekennzeichnet. Damit lässt sich die Position des Knotens im Baum feststellen. Umso länger die Kette, umso spezifischer die Information, viele Knoten des OID-Baumes enthalten keine Informationen, sondern nur Verweise auf die darunterliegenden. Die OIDs bestehen aus ganzen Zahlen und werden z.B. per Punkt-Notation miteinander verkettet. Weitere Darstellungsarten sind die ASN.1 Notation, wie auch in den MIBs verwendet, und die URN-Notation.

Beispiel-OIDs

Nachfolgende Beispiele verdeutlichen den Aufbau einer OID.

MIBs

Neben den OID-Ketten sind die MIBs, Management Information Base, eine weitere zentrale Komponente eines Netzwerk-Management-Protokolls wie SNMP. Die Objekte werden Managed Objects genannt und werden in der Spezifikationssprache ASN.1 verfasst. Die MIBs enthalten keine Daten, sie liefern jedoch Erklärungen, wo welche Informationen zu finden sind und wie sie aussehen, z.B. welche Rückgabewerte es für die spezifische OID gibt, oder welcher Datentyp verwendet wird.

Beispieleintrag einer MIB

Synology liefert detaillierte Informationen zu den verwendeten OIDs und MIBs aus.[17] In diesem Dokument sind die verwendeten MIB-Files verlinkt, ein bespielhafter Auszug der MIB SYNOLOGY-RAID-MIB.txt zeigt die Struktur eines Eintrages.

[...]
raidStatus OBJECT-TYPE
    SYNTAX	  Integer32(1..12)
    MAX-ACCESS  read-only
    STATUS	  current
    DESCRIPTION
    "Synology Raid status
	 Each meanings of status represented describe below.
	 Normal(1): The raid functions normally.
 	 Degrade(11): Degrade happens when a tolerable failure of disk(s) occurs.
 	 Crashed(12): Raid has crashed and just uses for read-only operation.

	 Note:
	 Other status will be showed when creating or deleting raids, including below status, Repairing(2), Migrating(3), Expanding(4), Deleting(5), Creating(6), RaidSyncing(7), RaidParityChecking(8), RaidAssembling(9) and Canceling(10).
	"
    ::= { raidEntry 3 }
[...]

Weitere Informationen

Einzelnachweise


Foto Thomas Niedermeier.jpg

Autor: Thomas Niedermeier

Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates.

Icon-Twitter.png 

Das könnte Sie auch interessieren

ISCSI Multipathing unter Linux
SSH Key unter Windows erstellen
Wiederherstellung eines CloneZilla Images